sbl.Append ("The game in a point wishes you all the best.\r\n");
textBox1.Text = sbl.ToString();
Естественно, текст в этом листинге мы можем редактировать, как пожелаем.
В режиме выполнения, после выбора команды Помощь на форме Form1, поверх этой формы Form1 появляется справочная форма Form2 (рис. 1.33). Внутри элемента управления TextBox мигает курсор, который мы можем перемещать клавишами, одновременно перемещая текст, чтобы он стал видимым. На рис. 1.33 видны первые три правила игры, а следующие правила 4, 5 и 6 на форме уже были показаны ранее.
Рис. 1.33. Справочная форма Form2.
Напомним, что выше мы записали код для вывода справочной формы Form2 методом ShowDialog как модальной формы (рис. 1.34), а именно, мы не сможем продолжить игру на первой форме Form1 (и на любой другой форме), пока не закроем форму Form2.
Рис. 1.34. Код для вывода Form2 методом ShowDialog как модальной формы.
Для вывода справочной формы 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).