Найти в Дзене

Программирование игр на C#. Висилица.

Логическая игра "Виселица" (Hangman), как не странно, развивает логическое мышление. Суть игры состоит в следующем. Первый игрок задумывает слово, второй игрок пытается угадать слово по буквам. Если угадывающий называет букву, которой в задуманном слове нет, то первый игрок рисует элемент картинки, изображающей повешенного человечка. Игра заканчивается, если слово угадано, или если картинка нарисована полностью, т.е. угадывающий не смог угадать слово. Картинка состоит из восьми элементов и, следовательно, второй игрок может назвать не более 8 букв. Роль первого игрока может выполнить компьютерная программа. Ниже приведена реализация игры Виселица в форме консольного приложения на языке C#. Код разделен на фрагменты для улучшения восприятия комментария. Строковый массив words содержит слова, которые может "задумать" программа. Переменная secretWords - слово, "задуманное" компьютером, в нее в начале игры будет помещено выбранное случайным образом слово из массива words. Переменная user

Логическая игра "Виселица" (Hangman), как не странно, развивает логическое мышление. Суть игры состоит в следующем. Первый игрок задумывает слово, второй игрок пытается угадать слово по буквам. Если угадывающий называет букву, которой в задуманном слове нет, то первый игрок рисует элемент картинки, изображающей повешенного человечка. Игра заканчивается, если слово угадано, или если картинка нарисована полностью, т.е. угадывающий не смог угадать слово. Картинка состоит из восьми элементов и, следовательно, второй игрок может назвать не более 8 букв.

Роль первого игрока может выполнить компьютерная программа.

Ниже приведена реализация игры Виселица в форме консольного приложения на языке C#. Код разделен на фрагменты для улучшения восприятия комментария.

Фрагмент 1
Фрагмент 1

Строковый массив words содержит слова, которые может "задумать" программа.

Переменная secretWords - слово, "задуманное" компьютером, в нее в начале игры будет помещено выбранное случайным образом слово из массива words.

Переменная userWords - последовательность скрытых и угаданных букв задуманного слова. Скрытые, еще не угаданные буквы, изображаются прочерками.

В начале работы программы генерируется случайное число в диапазоне от нуля до n-1, где n - длинна массива word. По этому номеру выбирается слово из массива words.

Также в переменную userWords записывается состоящая из прочерков строка (в начале игры все буквы слова скрыты). Количество прочерков равно количеству букв секретного слова.

Обратите внимание на инструкцию вывода секретного слова. Она вставлена в текст, чтобы в процессе отладки программы можно было контролировать правильность ее работы. После того, как программа будет отлажена, эту инструкцию надо удалить или закомментировать.

Следующий фрагмент кода цикл, реализующий игру.

Фрагмент 2
Фрагмент 2

В начале цикла на экран выводится слово игрока (userWord) и список букв (Misses), которые в процессе угадывания были введены игроком, ко которых нет в задуманном слов.

В слове игрока в соответствующих позициях отображаются "правильные" буквы или прочерки, если в соответствующих позициях секретного слова находятся буквы, которые пользователь еще не вводил.

После ввода очередной буквы (строки), которая попадает в переменную ch, программа проверяет, есть ли введенная буква в секретном слове. Проверка выполняется посимвольно в цикле for. Инструкции цикла формируют строку st2, по следующему правилу: если i-ый символ (буква) секретного слова совпадает с введенным пользователем символом, т.е. пользователь угадал очередную букву, то к строке st2 добавляется введенная буква, а если введенная буква "неправильная", то к строке добавляется буква из слова игрока (в процессе игры слово игрока меняется - прочерки в соответствующих позициях заменяются "правильными" буквами). По завершении цикла for строка st2 содержит новое слово игрока, которое записывается в переменную userWord.

Обратите внимание, как программа получает нужный (i-ый) символ секретного слова, слова игрока и символ, введенный игроком в процессе игры. Переменные secretWord, userWord и ch - строки. Но C# позволяет получить нужный символ, указав его номер в квадратных скобках после имени строковой переменной. Символы в строке нумеруются с нуля.

Переменная found (англ. found - найден) используется для фиксации факта, что пользователь угадал очередную букву. По завершении цикла for проверяется этой переменной и, если ее значение false, то в переменную misses добавляется "неправильная" буква, если это первая неправильная буква, или запятая и буква.

Цикл do while, и соответственно игра, завершается если игрок угадал секретное слово, или если использовал 8 попыток.

По завершению игры (цикла do while) программа выводит результат игры:

Фрагмент 3
Фрагмент 3

Введите программу в свой компьютер и заставьте ее работать! Успехов!