ОБЪЕКТИВНОСТЬ БЕЗ КОМПРОМИССОВОбъективность Без Компромиссов В Мире Компьютеров
НОВОСТИ САЙТАТЕСТИРУЕМ ВМЕСТЕИНТЕРНЕТ и ПОВСЯКО-РАЗНОСОФТ ПРОЕКТЫНАШИ ССЫЛКИ
ГЛАВНАЯ >> ИНТЕРНЕТ и ПО >> ПРОГРАММИРОВАНИЕ: Visual Basic 2010 - это просто. "Камень, ножницы, бумага"

НАЗВАНИЕ СТАТЬИ: Visual Basic 2010 - это просто. "Камень, ножницы, бумага"
АВТОРСТВО: Алексей Набережный
ДАТА НАПИСАНИЯ: Июль 2010 года
ДАТА ПЕЧАТНОЙ ПУБЛИКАЦИИ: Сентябрь 2010 года ( ISSN 0235-3520 )
ДАТА ПОСЛЕДНЕЙ РЕДАКЦИИ: Июль 2010
Алекс Н.

Напомним, что в прошлый раз мы разработали игру «Угадай-ка» (см. статью «Visual Basic 2010 - это просто. "Угадай-ка"»). Но есть ли в той программе элемент состязательности? Компьютер лишь загадывает число от 0 до 100, а мы попытаемся его угадать за 7 попыток. Признаемся, что скучно.
Давайте запрограммируем сегодня древнюю китайскую игру «Камень, ножницы, бумага». В ней есть победная развязка и интрига. Пользователь и компьютер загадывают один из трех знаков: камень, ножницы или бумага. Так, если пользователь загадал камень, а компьютер ножницы, то выиграл человек, ведь «камень затупляет ножницы». Для других случаев еще пара выигрышных правил: «ножницы разрезают бумагу» и «бумага заворачивает камень». А главное, на этом алгоритме можно учиться программировать конструкции с многочисленными ветвлениями.
Разумеется, вы уже скачали бесплатную редакцию Visual Studio 2010 (с сайта www.microsoft.com/express/downloads/) и установили ее на компьютер. Жмем Пуск – Программы - Microsoft Visual Studio 2010 Express - Microsoft Visual Studio 2010 Express. Однако, сейчас вас попросят ввести регистрационный ключ для Visual Studio, выдаваемый абсолютно бесплатно – щелкните на кнопку «Получить регистрационный ключ через Интернет» и заполните соответствующую анкету. Регистрационный ключ появится по ссылке. Нажмите «Зарегистрировать».

Регистрируем Visual Studio 2010 Express
Visual Studio 2010

В открывшемся окошке Visual Basic 2010 идите в меню Файл – Создать Проект, в списке выбирайте строчку «Консольное приложение». Теперь задаем имя проекта (по умолчанию, оно ConsoleApplication2, ведь ConsoleApplication1 – проект «Угадай-ка»). И опять в рабочем окне видим четыре заботливых строчки нашей будущей программы:

Module Module1
	Sub Main()
	End Sub
End Module

Между второй и третьей вставляем наш игровой код – разберем его чуть ниже. А чтобы запустить алгоритм на исполнение идем в меню «Отладка – Начать отладку» или давим кнопку F5.

10:     Dim a, b As Integer
20:     Console.Title = ("Камень, ножницы, бумага")
30:     Console.WriteLine("Играем в ""Камень, ножницы, бумага"",")
40:     Console.WriteLine("где есть три ключевых правила:")
50:     Console.ForegroundColor = ConsoleColor.Red
60:     Console.WriteLine("камень затупляет ножницы,")
70:     Console.WriteLine("ножницы разрезают бумагу,")
80:     Console.WriteLine("бумага заворачивает камень")
90:     Console.WriteLine()
100:    Randomize() : a = 1 + Math.Round(Rnd() * 2)
110:    Console.ForegroundColor = ConsoleColor.White
120:    Console.Write("Введи свой вариант (камень - 1, ножницы - 2, бумага - 3): ")
130:    b = Console.ReadLine
140:    Select Case b
            Case 1
150:            Console.Write("Ты выбрал КАМЕНЬ, ")
            Case 2
160:            Console.Write("Ты выбрал НОЖНИЦЫ, ")
            Case 3
170:            Console.Write("Ты выбрал БУМАГУ, ")
            Case Else
180:            Console.Write("Хитришь, надо было ввести 1, 2 или 3. Кстати, ")
190:    End Select
200:    Select Case a
            Case 1
210:            Console.WriteLine("я загадал КАМЕНЬ")
            Case 2
220:            Console.WriteLine("я загадал НОЖНИЦЫ")
            Case 3
230:            Console.WriteLine("я загадал БУМАГУ")
240:    End Select
250:    If a = b Then
260:        Console.WriteLine("Ничья дружище")
270:    ElseIf a = 1 And b = 2 Then
280:        Console.WriteLine("Ты проиграл, ведь камень затупляет ножницы")
290:    ElseIf a = 1 And b = 3 Then
300:        Console.WriteLine("Ты победил, ведь бумага заворачивает камень")
310:    ElseIf a = 2 And b = 1 Then
320:        Console.WriteLine("Ты победил, ведь камень затупляет ножницы")
330:    ElseIf a = 2 And b = 3 Then
340:        Console.WriteLine("Ты проиграл, ведь ножницы разрезают бумагу")
350:    ElseIf a = 3 And b = 1 Then
360:        Console.WriteLine("Ты проиграл, ведь бумага заворачивает камень")
370:    ElseIf a = 3 And b = 2 Then
380:        Console.WriteLine("Ты победил, ведь ножницы разрезают бумагу")
390:    Else
400:        Console.WriteLine("Исключительный случай - нет победителей ;)")
410:    End If
420:    Console.ReadLine()

В строке 10 мы объявили пару целочисленных переменных с помощью оператора DIM. В нашем случае: a – случайный выбор компьютера, b – сознательный выбор пользователя.
В строке 20 меняем стандартный заголовок окна будущей игры на более логичный - «Камень, ножницы, бумага».
Строка 30. Иногда возникает необходимость в выводе на экран обычных кавычек. В Visual Basic делается так: используются два последовательных знака кавычек, т.е. "". Отметим, что парные кавычки, представленные в строке, могут выставляться как в середине, так и в ее начале или конце. Для сравнения, кодируя на языке C# (читается, как «Си шарп») пришлось бы использовать специальный код - \x0022. Согласитесь, на VB куда все проще. Кстати, обратите внимание на строку 30 в скриншоте алгоритма. Там есть значок комментария «'». После него можно записывать любые мысли – у нас там ремарка на русском языке.
Строки с 40 по 90 выводят в консоль нужный текст для пользователя. Здесь особого внимания заслуживает строка 50 – с помощью свойства Console.ForegroundColor можно задавать цвет текста. Кстати, попробуйте самостоятельно поэкспериментировать еще со свойством Console.BackgroundColor. Да и работу с методами Console.ResetColor() и Console.Clear() возьмите на вооружение.
В строке 100 в ознакомительных целях мы разместили сразу две командных конструкции. Скажем больше, можно почти всю программу написать в одну строчку, разделяя команды двоеточием. Но куда аккуратнее все операторы размещать на отдельных строках. Randomize() инициализирует генератор случайных чисел. Math.Round(Rnd()*2) округляет до целого произведение случайного вещественного числа (от 0 до 1) и 2. Затем к получившемуся значению прибавляется единица, ведь по замыслу 1 означает камень, 2 - ножницы и 3 – бумага. Других значений в переменных a и b не подразумевается.
Метод Console.ReadLine в строке 130 считывает введенное пользователем число в переменную b – это выбор человека.
Конструкции в строках с 140 по 190 и с 200 по 240 – блоки операторов ветвления Select Case ... End Select. Там в зависимости от значения переменных a и b выполняются определенные последовательности команд. Кстати, обратите внимание на строку 180. Это на любой случай, если человек вместо ожидаемых цифр 1, 2 или 3, введет что-то другое (например, 4). Еще уместно уточнить, если человек введет любые нецифровые символы (например, напишет «камень»), то в строке 130 возникнет недопустимая ошибка – нужно бы сделать так называемую «защиту от дураков».
Разумеется, более популярная конструкция с условиями – это If ... End If. Именно ее мы видим в строках с 250 по 410. Здесь мы рассмотрели всевозможные варианты, сопоставляющие выбранные вещи. Кстати, если бы пользователь схитрил и в переменную b ввел значение 4 (или больше), то сработала бы ловушка в строках 390-400 для всех исключений.

Разработка игры в Visual Studio 2010
Visual Studio 2010

Вместо заключения, давайте подумаем, как можно улучшить играбельность. Предлагаем строки 100 - 410 обернуть в цикл For ... Next (см. статью «Visual Basic 2010 - это просто. "Угадай-ка"») и запустить 10 раундов противостояния «Компьютер против Человека». В строке 10 нужно «дообъявить» переменные i, p и n (i –счетчик цикла). В переменную p мы будем складывать победы человека – в строках 300, 320, 380 через двоеточие допишите команду p = p + 1. В n сложим все победы компьютера – в строках 280, 340, 360 допишите n = n + 1. Теперь в конце каждого раунда надо выводить текущий счет – перед Next i вставьте два оператора

Console.WriteLine("Чел - ПК") : Console.WriteLine(Str(p) + " - " + Str(n)).

Пусть эта небольшая доработка игрового алгоритма будет вашим домашним заданием. А в следующий раз мы разберем более интересную игру - «Города».

>> НАВЕРХ СТРАНИЦЫ <<

Rambler's Top100 Рейтинг@Mail.ru