Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 8: Программирование на Visual C# искусственного интеллекта. Издание 2. Продолжение 1
Шрифт:
Для вывода справочной формы Form2 методом Show как немодальной формы надо записать:
helpForm.Show;
Теперь, активируя (щёлкая) форму Form1, мы сможем продолжить игру на первой форме Form1 (и на любой другой форме любого приложения), видя на экране справочную форму Form2 (которую можно передвинуть в любое удобное место экрана).
1.22. Запуск игры
Строим и запускаем программу на выполнение обычным образом:
Build, Build Selection; Debug, Start Without Debugging.
В ответ, Visual C# выводит форму Form1 с показанным
Отметим, что все графические файлы этой игры применимы как для смартфонов и планшетов (описанных в наших предыдущих книгах), так и для настольных компьютеров. Для настольного компьютера с большим (чем у смартфона и планшета) экраном размеры рисунков фона и карт можно увеличить (в случае необходимости) по описанной ранее схеме.
Для начала игры нажимаем клавишу Enter и играем согласно приведённым выше правилам.
Таким образом, эта глава описывает механизм раздачи карт (из колоды) случайным образом (на основе генератора случайных чисел класса Random), показ их на экране, показ их в "руках" для каждого игрока и управления карточной игрой.
Мы разработали методику программирования полностью функциональной игры, которая в США и других странах называется как “Black Jack”, “21” или понтон (pontoon) при использовании 52 карт, а в России и других странах обычно называется как “очко” или “21” при использовании 36 карт.
В разработанной в данной главе игре можно вместо 52 карт добавить в проект новые 36 карт (в случае необходимости) или из 52 карт удалить лишние карты, чтобы оставить только 36 карт.
По методике данной главы можно разрабатывать самые разнообразные карточные игры.
Часть
I
I. Методология программирования искусственного интеллекта в спортивных играх с ракетками и мячами
Глава 2. Методика программирования искусственного интеллекта в игре в теннис для игрока с компьютером или двух игроков
2.1. Общие сведения
Разработаем методику проектирования и программирования такой типичной и широко распространённой игры, как игра в теннис с мячом и двумя ракетками.
Кратко, сюжет игры заключается в следующем. После старта игры появляется форма, справа на форме (точнее, в клиенткой области формы) находится ракетка Игрока 1, слева – ракетка Игрока 2 (по первому режиму игры) или Компьютера в роли Игрока 2 (по второму режиму игры). Обе ракетки могут перемещаться только вертикально. Мяч произвольным образом прыгает в пределах 2-х границ формы, отскакивая от верхней и нижней границ формы и двух ракеток. Правая граница формы – это ворота Игрока 1, а левая граница формы – это ворота Компьютера в роли Игрока 2 или самого Игрока 2. Если мяч коснётся левой или правой границ формы, считается, что один игрок забил мяч в ворота другого игрока, у пропустившего мяч игрока количество жизней (lives) с трёх уменьшается на единицу, а мяч снова появляется
По первому режиму игры Singleplayer (Игрока 1 с компьютером), заданному по умолчанию, Игрок 1 при помощи клавиш со стрелками перемещает правую ракетку, старается отбить ею мяч и не дать мячу коснуться правой границы формы, так как после каждого такого касания (пропущенного в свои ворота мяча) Игрок 1 теряет одну жизнь. Более того, Игрок 1 должен стараться (по возможности) ракеткой отбить мяч таким образом, чтобы забить его в противоположные ворота. Аналогично поступает Компьютер с левой ракеткой.
По второму режиму игры Multiplayer (Игрока 1 с Игроком 2), Игрок 1 действует так же, как по первому режиму, а вот Игрок 2 при помощи клавиш W и S перемещает левую ракетку, старается отбить ею мяч и не дать мячу коснуться левой границы формы, так как после каждого такого касания (пропущенного в свои ворота мяча) Игрок 2 теряет одну жизнь.
В программе в методе GetInputStates в строках:
if (gamePadUp ||
keyboard.IsKeyDown(Keys.Up))
rightPaddlePosition -= moveFactorPerSecond;
if (gamePadDown ||
keyboard.IsKeyDown(Keys.Down))
мы видим, что Игрок 1 управляет правой ракеткой при помощи клавиш со стрелками Up и Down.
В методе GetInputStates в строках:
if (gamePad2Up ||
keyboard.IsKeyDown(Keys.W))
leftPaddlePosition -= moveFactorPerSecond;
if (gamePad2Down ||
keyboard.IsKeyDown(Keys.S) ||
keyboard.IsKeyDown(Keys.O))
leftPaddlePosition += moveFactorPerSecond;
мы видим, что Игрок 2 управляет левой ракеткой при помощи клавиш W, S и O.
По мере игры скорость перемещения мяча увеличивается, а угол отскока мяча от границ формы и ракеток изменяется, что приводит к достаточно быстрому окончанию игры.
Игра прекращается, когда один из игроков потеряет все жизни. Победителем считается игрок, у которого сохранилась хотя бы одна жизнь.
2.2. Правила игры
1. После запуска игры, на экране появляется форма с меню Singleplayer, Multiplayer и Exit (рис. 2.1). Клавишами со стрелками выбираем нужную команду и нажимаем клавишу Enter.
2. Появляется поле игры, на котором справа находится синяя (Blue) ракетка Игрока 1, а слева – красная (Red) ракетка Компьютера в роли Игрока 2 (по первому режиму игры Singleplayer) или Игрока 2 (по второму режиму игры Multiplayer).
Вверху слева и справа находятся два табло с тремя жизнями Lives в виде начальных трёх шаров для двух игроков (рис. 2.2).
Мяч произвольным образом прыгает в пределах 4-х границ формы, отскакивая от границ формы и двух ракеток. После каждого такого отскока мы слышим звук добавленного в проект звукового файла. Правая граница формы – это ворота Игрока 1, а левая граница формы – это ворота Игрока 2 (или Компьютера в роли Игрока 2).