В серии книг “Справочник Жаркова по проектированию и программированию искусственного интеллекта” в нескольких томах собрано лучшее программирование искусственного интеллекта (ИИ) в двух- и трёхмерных играх и приложениях, разработанных как автором, так и взятые из Интернета за многие годы и доработанные автором с учётом современного программирования. Программирование ИИ на Visual C# разделено на тома. В томе 8 дана методология программирования ИИ: в карточных играх на примере игры в 21 очко, в спортивных играх с ракетками и мячами, в играх и приложениях, когда первый объект охотится за вторым, а второй – за третьим, в игре боя космического корабля с инопланетными кораблями. Описано распространение приложения с ИИ. Даны полные тексты программ на VC# соревнования Игрока с Компьютером, которые можно переписать на другой язык, адреса в Интернете для загрузки рисунков и мелодий. Книги предназначены для желающих изучить программирование ИИ в играх и приложениях на базе VC# и других языков.
Приведённый ознакомительный фрагмент книги Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 8: Программирование на Visual C# искусственного интеллекта. Издание 2. Продолжение 1 предоставлен нашим книжным партнёром — компанией ЛитРес.
Купить и скачать полную версию книги в форматах FB2, ePub, MOBI, TXT, HTML, RTF и других
Глава 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).
Рис. 2.1. Выбираем режим игры Singleplayer или Multiplayer.
Рис. 2.2. Справа — ракетка Игрока 1, слева — ракетка Игрока 2, мяч — в нижнем правом углу.
3. Предположим, что мы выбрали заданный по умолчанию первый режим игры Singleplayer (Игрока 1 с компьютером) и нажали клавишу Enter. Игрок 1 при помощи клавиш со стрелками Up и Down перемещает правую ракетку, старается отбить ею мяч и не дать мячу коснуться правой границы формы, так как после каждого такого касания (пропущенного в свои ворота мяча) Игрок 1 теряет одну жизнь. Аналогично поступает Компьютер с левой ракеткой.
4. Предположим, что клавишами со стрелками мы выбрали второй режим игры Multiplayer (Игрока 1 с Игроком 2) и нажили клавишу Enter. Игрок 1 действует так же, как по первому режиму, а вот Игрок 2 при помощи клавиш W и S перемещает левую ракетку, старается отбить ею мяч и не дать мячу коснуться левой границы формы, так как после каждого такого касания (пропущенного в свои ворота мяча) Игрок 2 теряет одну жизнь.
5. Игра прекращается, когда один из игроков потеряет все жизни.
6. Победителем считается игрок, у которого сохранилась хотя бы одна жизнь (на рис. 2.3 — это Игрок 2 с красной ракеткой Red). Мы видим сообщение Red Won. Чаще всего, Компьютер (в роли Игрока 2) побеждает.
4. Если в игре участвуют несколько человек, то победителем считается тот, у кого после окончания игры сохранилось больше жизней.
5. Форму с игрой закрываем стандартно, щёлкая на ней значок Close.
На основании этих правил можно сформулировать другие правила.
В игре можно использовать различные графические изображения и звуковые файлы различных форматов (с внесением соответствующих изменений в приведённую далее программу).
Рис. 2.3. Сообщение о победителе.
2.3. Создание проекта Visual Studio
В VS щёлкаем значок New Project (или File, New, Project), в панели New Project в окне Project types выбираем тип проекта Visual C#, XNA Game Studio в окне Templates выделяем шаблон Windows Game, в окне Name записываем имя Pong2 и щёлкаем OK. VS создаёт проект и выводит файл Game1.cs с показанным выше шаблоном кода.
В панели Solution Explorer выполняем правый щелчок по имени проекта Content, в контекстном меню выбираем Add, Existing Item, в панели Add Existing Item в окне “Files of type” выбираем “All Files”, в центральном окне находим (например, в Интернете) и с нажатой клавишей Shift или Ctrl выделяем три не звуковых файла PongGame.png, PongMenu.png и SpaceBackground.dds, и щёлкаем кнопку Add. Эти файлы добавляются в панель Solution Explorer, как показано на рис. 2.4 (файла PongSound.xap здесь пока не должно быть, он появится после создания проекта XACT). Если в панели Solution Explorer выделить файл SpaceBackground.dds, то ниже в панели Properties мы увидим тип этого файла (рис. 2.5).
Чтобы добавить в проект звуковые файлы, щёлкаем значок Open File (или в меню выбираем File, Open, File), в появившейся панели Open File в окне"Look in:"находим (например, в Интернете) папку со звуковыми файлами (в данном примере, PongBallHit.wav и PongBallLost.wav), с нажатой клавишей Shift или Ctrl выделяем все эти звуковые файлы, выполняем по ним правый щелчок и в контекстном меню выбираем команду Копировать (Copy) для копирования этих файлов в буфер обмена.
Рис. 2.4. Панель Solution Explorer. Рис. 2.5. Панель Properties.
Теперь в этой же панели Open File в окне"Look in:"находим наш проект Visual Studio и в нём папку Content, на белом поле центрального окна выполняем правый щелчок и в контекстном меню выбираем команду Вставить (Paste) для вставки звуковых файлов из буфера обмена. Эти звуковые файлы вставятся в папку Content только в панели Open File, а в панели проводника решения Solution Explorer в этой же папке Content этих звуковых файлов не будет видно.
Кратко поясним, что в данной игре файл PongBallHit.wav будет воспроизводится, когда будет происходить столкновение мяча с ракеткой. А файл PongBallLost.wav будет воспроизводится, когда игрок пропускает мяч, мяч пролетает мимо ракетки и исчезает с формы, а игрок теряет одну жизнь.
На данном этапе программирования приложения построение (Build, Build Solution) и выполнение (Debug, Start Without Debugging) программы должно происходить без ошибок, но и без звука. А чтобы получить звуковое сопровождение приложения, нам нужно создать звуковой проект типа XACT в виде файла формата (.xap), как описано в следующем параграфе. Сворачиваем или закрываем Visual Studio.
2.4. Создание звукового проекта XACT
Приведём пошаговую инструкцию создания звукового проекта типа XACT в виде файла формата Audio Project или (.xap).
1. Чтобы запустить XACT, выбираем команды Start (Пуск), All Programs (Все программы), Microsoft XNA Game Studio Tools, Microsoft Cross-Platform Audio Creation Tool (XACT). Появляется показанная ранее панель Microsoft Cross-Platform Audio Creation Tool (XACT) v.2.0 (Windows).
2. В меню File выбираем New Project. Появляется панель New Project Path. В этой панели в окне"Папка:"находим в проекте Visual Studio папку Content, в окне"Имя файла:"записываем любое имя, например, PongSound и щёлкаем кнопку Сохранить (Save), рис. 2.6. Отметим, что если в этой панели в окне"Тип файла:"мы выберём строку All Files, то увидим также и добавленные нами в эту папку звуковые файлы.
Рис. 2.6. В проекте VS в папке Content записываем имя. Рис. 2.7. Выделяем файл.
В панели Microsoft Cross-Platform Audio Creation Tool (XACT) v.2.0 (Windows) вместо слов New Project появляется записанное нами имя файла.
3. В меню Wave Banks выбираем команду New Wave Bank. В панели XACT в центральном окне появляется панель Wave Bank.
В меню Sound Banks выбираем команду New Sound Bank. В панели XACT в центральном окне появляется панель Sound Bank.
Размещаем эти две панели Wave Bank и Sound Bank в центральном панели XACT так, как нам удобно. При щелчке по любой из этих панелей, в нижнем левом углу панели XACT появляются параметры соответствующей панели Wave Bank или Sound Bank.
4. Выполняем правый щелчок на белом поле панели Wave Bank и в контекстном меню выбираем команду Insert Wave File(s).
В появившейся панели Открыть (Open) проверяем, чтобы в окне"Папка:"была папка Content (если этой папки в окне нет, то находим ее), выделяем первый добавленный нами звуковой файл (рис. 2.7) и щёлкаем кнопку Открыть. Панель Открыть закрывается, а этот файл появляется в панели Wave Bank (со всеми заполненными свойствами).
Аналогично выполняем правый щелчок на белом поле панели Wave Bank, в контекстном меню выбираем команду Insert Wave File(s), в панели Открыть выделяем второй файл Lost.wav и щёлкаем кнопку Открыть. Этот файл появляется в панели Wave Bank.
На рисунке в окне"Тип файлов:"видно, какого формата звуковые файлы поддерживает XNA, а именно: Sound Files (*.wav, *.aif, *.aiff).
5. В панели Wave Bank сначала выделяем указателем мыши все добавленные нами звуковые файлы, затем захватываем их указателем мыши и переносим в панель Sound Bank, точнее, в нижнюю левую часть со свойством Cue Name. Эти файлы появляются в двух левых окнах панели Sound Bank. Щёлкаем по файлам, в двух правых окнах появляется информация о файлах.
Рис. 2.8. Панель Microsoft Cross-Platform Audio Creation Tool (XACT) v.2.0 (Windows).
Конец ознакомительного фрагмента.
Приведённый ознакомительный фрагмент книги Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 8: Программирование на Visual C# искусственного интеллекта. Издание 2. Продолжение 1 предоставлен нашим книжным партнёром — компанией ЛитРес.
Купить и скачать полную версию книги в форматах FB2, ePub, MOBI, TXT, HTML, RTF и других