Валерий Жарков
Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 5: Программирование искусственного интеллекта на Visual Basic (продолжение 1)
Введение
Это первый и единственный в мире “Справочник Жаркова по проектированию и программированию искусственного интеллекта” из нескольких томов по методологии разработки искусственного интеллекта в двухмерных и трёхмерных играх и приложениях со звуковым сопровождением для настольных компьютеров, ноутбуков, планшетов и смартфонов на основе популярного, совершенного и перспективного языка программирования высокого уровня Visual Basic самой мощной в мире в области программирования корпорации Microsoft (США).
Искусственный интеллект (ИИ) – это интеллектуальная компьютерная программа, способная разумно выполнять функции, задачи и действия, обычно характерные для разумных существ и свойственные человеческому интеллекту. ИИ в игре или приложении, например, в игре между Компьютером и Человеком, умеет не только проигрывать, но и выигрывать у хорошего Игрока-человека с визуализацией результатов выигрыша. Хорошо известно, что компьютер с ИИ обыгрывает в шахматы любого гроссмейстера. Компьютер с ИИ также легко обыгрывает многих хороших игроков в карты. Если программа в виде ИИ размещена, например, в роботе или другом устройстве, то после того, как ИИ решил заданную ему задачу, ИИ выдаёт команду на выполнение устройством определённого действия. При программировании ИИ важно правильно подобрать среду разработки ИИ и язык программирования.
Среда разработки (иначе, платформа, студия) Visual Studio (или коротко VS) для визуального объектно-ориентированного проектирования приложений даёт уникальную возможность быстро разрабатывать высокотехнологичные и наукоёмкие программные продукты с использованием ИИ, а также компьютерные игры с двухмерной и трёхмерной графикой также с использованием ИИ. Важно отметить, что на основе VS мы программируем не закрытые “чёрные ящики”, как это делают другие известные компьютерные фирмы, а мы создаём открытые любому пользователю (для постоянного дополнения и совершенствования) программы на базе самых мощных в мире алгоритмических языков высокого уровня Visual C#, Visual Basic и Visual C++. В данном чрезвычайно насыщенном томе (заменяющим несколько других книг) мы последовательно и всесторонне, идя от простого к сложному, излагаем методологию программирования ИИ в играх и приложениях с использований двухмерных и трёхмерных изображений.
Наша основная цель – дать читателю ту информацию, которую он больше нигде не найдёт. Поэтому мы не будем дублировать известные книги по языку программирования Visual Basic и давать подробные объяснения по теории языка VB. Если у читателя возникнуть вопросы, он легко отыщет книгу по данному языку (некоторые полезные по данной тематике книги и журналы с сайта ZharkovPress.ru приведены в нашем списке литературы) и там найдёт ответ, так как терминология по всем тематикам у нас общая. Мы будем давать лишь краткие пояснения в виде комментариев в программах, чтобы начинающий пользователь постепенно осваивал базовые дисциплины программирования ИИ на языке VB, по возможности не используя другие книги; опытному пользователю также будут полезны эти пояснения, поскольку книги по разработке ИИ на основе новых версий языка Visual Basic в мире ещё не изданы. К достоинствам нашей книги, рассчитанной на широкий круг новичков и опытных специалистов, мы относим практическую направленность, простоту изложения (без описания сложных теорий, но давая ссылки на книги, в которых эти сложные теории можно изучить), наличие подробных методик и пошаговых инструкций, большое количество примеров и иллюстраций. Теперь читателям может не потребоваться изучать сложные теоретические книги, посещать длительные и дорогостоящие учебные курсы и покупать много отдельных книг. Автор это сделал за них. Читателю необходимо лишь открыть данную книгу в интересующем его разделе (мало кто будет изучать книгу от корки до корки, хотя это и желательно) и по аналогии с разделом (по принципу: делай, как я) самостоятельно программировать ИИ в практическом приложении или игре на основе VS. И именно при проектировании ИИ в своём конкретном и профессионально интересном приложении или игре (а не отвлечённых примеров в других книгах) читатель будет изучать базовые дисциплины по данной тематике. Создавая ИИ в своём приложении или игре по методике данной и других наших книг и журналов из списка литературы и с сайта ZharkovPress.ru (а также используя справку Help из Visual Studio, как правило, заменяющей все учебники по всем языкам), читатель сможет в одиночку работать за конструктора, технолога, математика и программиста одновременно (при разработке практических приложений) или за сценариста, режиссёра, оператора, дизайнера, художника, музыкального редактора и программиста одновременно (при разработке игр) и сэкономить недели упорного труда. Если в начальных главах серии книг инструкции по разработке ИИ в играх и приложениях на базе VS подробны (в интересах новичков), то инструкции в каждой последующей главе мы даём всё короче и короче, чтобы не повторяться и экономить место в книге.
Приводим краткое содержание всех XVIII частей из трёх томов 4, 5 и 6 по программированию ИИ на Visual Basic. Введение. Часть I. Краткие основы Visual Basic. Глава 1. Основные определения книги. Глава 2. Методика разработки приложений для выполнения расчётов с эффектами анимации. Глава 3. Методика разработки приложений на нескольких формах и передачи данных с одной формы на другую. Часть II. Учебная методология программирования игр и приложений с подвижными объектами. Глава 4. Методика анимации и управления подвижными объектами. Глава 5. Методика обнаружения столкновений, программирования уничтожений летающих объектов и подсчёта очков. Глава 6. Методология воспроизведения звуковых файлов. Глава 7. Методика программирования жизней, уровней сложности и вывода лучшего результата. Глава 8. Методика улучшения графики и добавления фона экрана. Глава 9. Методика программирования игры с летающими объектами на основе спрайтов. Глава 10. Игра с летающими объектами на основе спрайтов, двух форм и возможности приостановки и повторного запуска игры. Глава 11. Игра с изменяемой траекторией летающих объектов. Часть III. Методология программирования искусственного интеллекта в карточных играх. Глава 12. Методика программирования искусственного интеллекта в карточных играх на примере игры в покер. Часть IV. Методология программирования искусственного интеллекта в играх по сборке картины из её частей. Глава 13. Методика программирования искусственного интеллекта в игре по сборке разрезанной картины заменой местами её масштабируемых частей. Часть V. Методология программирования искусственного интеллекта в играх типа змейки, которая поедает куски пищи. Глава 14. Методика программирования искусственного интеллекта в игре типа змейки, которая поедает куски пищи и за счёт этого увеличивается по длине, на основе одного файла. Глава 15. Методика программирования искусственного интеллекта в игре типа змейки, которая поедает куски пищи и за счёт этого увеличивается по длине, на основе четырёх файлов. Часть VI. Методология программирования искусственного интеллекта в играх типа “Тетрис” по сборке сплошных полос из разнообразных фигур. Глава 16. Методика программирования искусственного интеллекта в игре по сборке сплошных прямых полос из сторон фигур 12 типов. Глава 17. Методика программирования искусственного интеллекта в игре по сборке сплошных прямых полос из сторон фигур 7 типов с формами для имени игрока, результатов и справкой по игре. Часть VII. Методология программирования искусственного интеллекта в играх в “Крестики-нолики” для Игрока с Компьютером и двух Игроков. Глава 18. Методика программирования искусственного интеллекта в игре в “Крестики-нолики”. Часть VIII. Методология программирования искусственного интеллекта в играх типа “Поле чудес” по угадыванию слова по буквам. Глава 19. Методика программирования искусственного интеллекта в игре по угадыванию слова по буквам при заданном количестве попыток. Часть IX. Методология программирования искусственного интеллекта в играх по сборке и выбиванию фигур одинакового цвета или геометрии. Глава 20. Методика программирования искусственного интеллекта в игре по выбиванию фигур одинакового цвета. Глава 21. Методика программирования искусственного интеллекта в игре по сборке прямых из 5 и более объектов одинакового цвета. Часть X. Методология программирования искусственного интеллекта в ролевых сюжетных играх. Глава 22. Методика программирования искусственного интеллекта в сюжетных играх на примере сюжета о пещерных людях Адаме и Еве. Часть XI. Методология программирования искусственного интеллекта в играх с воздушными боями ракетами с участием самолётов и вертолётов.Глава 23. Методика программирования искусственного интеллекта в игре воздушного боя ракетами вертолёта с самолётами и вертолётами различных типов. Часть XII. Методология программирования искусственного интеллекта в спортивных играх. Глава 24. Методика программирования искусственного интеллекта в игре в теннис на основе элементов управления с уничтожением их после удара мячом. Часть XIII. Методология программирования искусственного интеллекта в играх в кости. Глава 25. Методика программирования искусственного интеллекта в игре в кости на примере игры с двумя кубиками. Часть XIV. Методология программирования искусственного интеллекта в играх с летающими объектами, уничтожающимися после столкновения. Глава 26. Методика программирования искусственного интеллекта в игре с генерированием летающих объектов, отскакивающих от границ и уничтожающихся после столкновения друг с другом. Часть XV. Методология программирования искусственного интеллекта в математических играх. Глава 27. Методика программирования искусственного интеллекта в игре на арифметические действия. Часть XVI. Методология программирования искусственного интеллекта в трёхмерных играх по управлению автомобилем при езде по дороге с препятствиями. Глава 28. Методика программирования искусственного интеллекта в игре по управлению автомобилем. Глава 29. Создание двух проектов игры. Глава 30. Запуск игры. Часть XVII. Проектирование вспомогательных объектов для игр и приложений с искусственным интеллектом. Глава 31. Методика проектирования цифровых часов. Часть XVIII. Развёртывание, публикация и распространение разработанной игры или приложения с искусственным интеллектом. Глава 32. Методика распространения игры или приложения. Заключение. Список литературы.
В данном томе 5 приводим краткое содержание одной, но с самым большим текстом программ, части. Введение. Часть VIII. Методология программирования искусственного интеллекта в играх типа “Поле чудес” по угадыванию слова по буквам. Глава 19. Методика программирования искусственного интеллекта в игре по угадыванию слова по буквам при заданном количестве попыток. Заключение. Список литературы.
Многие приложения и игры в книге основаны на программах, или разработанных корпорацией Microsoft, или опубликованных на сайте корпорации Microsof. Поэтому эти программы являются очень мощными и могут быть использованы не только при разработке ИИ в самых разнообразных играх, но и на практике для разработки различных приложений. Структура книги продумана таким образом, чтобы читатели могли создавать на профессиональном уровне (по методологиям и программам из данной и предыдущих наших книг и журналов с сайта ZharkovPress.ru) свои приложения, игры и открытые графические и вычислительные системы с применением двухмерных и трёхмерных изображений и звуковых эффектов, могли вводить разнообразные исходные данные и на выходе приложения или игры получать с использованием ИИ те результаты, которые необходимы именно им и характерны для их профессиональных или непрофессиональных интересов.
Книга предназначена для всех желающих быстро изучить основы программирования искусственного интеллекта в разнообразных двухмерных и трёхмерных компьютерных играх и приложениях на базе популярного, совершенного и перспективного (в мире программирования) языка высокого уровня Visual Basic последних версий для настольных компьютеров, ноутбуков, планшетов и смартфонов, на этих основах сразу же проектировать ИИ в сложных играх и приложениях и применять ИИ на практике или на отдыхе в разнообразных сферах профессиональной и непрофессиональной деятельности. Также адресована начинающим и опытным пользователям, программистам любой квалификации, а также учащимся и слушателям курсов, студентам, аспирантам, учителям, преподавателям и научным работникам.
В следующем томе автор (доктор технических наук Жарков Валерий Алексеевич) продолжит описывать программирование ИИ в следующих играх и приложениях.
Вопросы, замечания и предложения по тематике книги можно направлять по email с сайта:
ZharkovPress.ru
Часть VIII. Методология программирования искусственного интеллекта в играх типа “Поле чудес” по угадыванию слова по буквам
Глава 19. Методика программирования искусственного интеллекта в игре по угадыванию слова по буквам при заданном количестве попыток
19.1. Общие сведения и правила игры
Опишем методику проектирования и программирования типичной и широко распространённой игры по угадыванию слова по буквам. Известно много вариантов этой игры как в ручном, так и в компьютерном варианте.
В ручном варианте смысл игры хорошо понятен из хорошо известной телепередачи “Поле чудес” 1-го канала российского телевидения. Телеведущий (в роли Игрока 1) рассказывает, по какой тематике он загадал слово. На доске показана строка, состоящая и такого количества квадратов, сколько букв содержит это слово. И участники телепередачи (в роли Игрока 2) по очереди отгадывают отдельные буквы загаданного слова. Если участник угадал букву, то в одном или нескольких квадратах слова появляется эта буква. Если участник угадал все буквы слова, игра заканчивается, и победитель получает приз. Начинается новый сеанс игры по угадыванию нового слова.
В компьютерном варианте эту игру мы будем разрабатывать, следуя проекту Hang Man автора Ibrahim от 1.3.2005 с сайта www.planet-source-code.com, но с нашими усовершенствованиями для современной версии Visual Studio.
Игрок, угадывающий слово, будет воздействовать на кнопки типа Button с названиями букв из алфавита. После каждого щелчка игроком кнопки (мышью или клавишей Enter) искусственный интеллект анализирует событие, какую букву выбрал игрок, и выдаёт или мелодию для неправильного ответа, или мелодию для правильного ответа. Кроме того, при неправильном ответе искусственный интеллект будет выводить на форму смайлик (в виде известного графического файла) с недовольным изображением лица, а при правильном ответе – с довольным и улыбающимся изображением лица.
Правила игры.
1. После запуска появляется форма с интерфейсом игры (рис. 19.1). По умолчанию, в окне TextBox мигает курсор, приглашающий Игрока 1 записать слово.
Сначала Игрок 1 при помощи клавиатуры записывает английскими буквами, причём только строчными буквами (без нажатия клавиши Shift) загаданное им слово в окно TextBox, например, слово exception (исключение). Даже первую букву имени собственного, например, имени человека, следует записывать строчной буквой.
Это слово искусственный интеллект скрывает от Игрока 2, записывая его звёздочками (как пароль), рис. 19.2. Далее Игрок 1 объясняет Игроку 2, как переводится на русский язык (или только тематику) загаданное им английское слово, и щёлкает кнопку Старт.
Кнопка Старт становится недоступной (рис. 19.3).
2. Игрок 2 пытается отгадать отдельные буквы загаданного слова и щёлкает первую кнопку с выбранной им буквой (из всех кнопок со всеми буквами английского алфавита).
Например, Игрок 2 щёлкнул кнопку с буквой O. Такая буква есть в загаданном слове. Искусственный интеллект делает кнопку с буквой О недоступной и размещает эту букву на верхней строке для букв загаданного слова (рис. 19.4). Звучит мелодия для правильного ответа.
Рис. 19.1. Перед игрой.
Рис. 19.2. Игрок 1 записал слово.
Рис. 19.3. Игрок 1 щёлкнул кнопку Старт.
Рис. 19.4. Игрок 2 выбрал букву О.
3. Далее, например, Игрок 2 щёлкнул кнопку с буквой А. Такой буквы нет в загаданном слове. Искусственный интеллект делает кнопку с буквой А недоступной и размещает эту букву в таблице для 10 допустимых неправильных букв красного цвета (рис. 19.5). Звучит мелодия для неправильного ответа.
Рис. 19.5. Игрок выбрал букву А и не угадал.
4. Далее, например, Игрок 2 щёлкнул кнопку с буквой E. Такой буквы в загаданном слове две. Искусственный интеллект делает кнопку с буквой E недоступной и размещает эту букву в двух квадратах на верхней строке для букв загаданного слова (рис. 19.6). Звучит мелодия для правильного ответа.
5. Аналогично игрок щёлкает кнопки с оставшимися доступными буквами алфавита, пытаясь угадать слово. На рис. 19.7 видно, что игрок уже угадал много букв загаданного слова, но выбрал уже все 10 букв из 10 допустимых неправильных букв. Предположим, что после этого он щёлкнул кнопку с буквой F, которой нет в слове.
Но после 11-й ошибки игрок считается проигравшим.
6. Появляется панель типа MessageBox с сообщением “Вы не угадали слово.” (рис. 19.8).
Закрываем эту панель, воздействуя на выделенную кнопку OK мышью или клавишей Enter.
7. Чтобы Игрок 2 проверил, правильно ли записал слово Игрок 1 (не допустил ли Игрок 1 ошибки в слове, что явилось причиной поражения Игрока 2), Игрок 2 щёлкает кнопку Проверка.
8. Появляется панель типа MessageBox с ответом Exception (рис. 19.9).
Такое слово в английском языке по компьютерной тематике имеется и переводится как исключение (или ошибка).
Следовательно, в этой игре проиграл Игрок 2, из 10 попыток не угадавший слово.
9. Для начала новой игры следует в Меню выбрать команду “Новая игра” (рис. 19.10).
Рис. 19.6. Игрок выбрал букву E и угадал.
Рис. 19.7. Игрок на последней 10-й попытке не угадал букву.
Рис. 19.8. Панель с сообщением “Вы не угадали слово.”. Рис. 19.9. Загаданное слово.
Рис. 19.10. В Меню выбираем команду “Новая игра”.
10. Теперь участники игры могут поменяться ролями. Аналогично, сначала Игрок 1 при помощи клавиатуры записывает английскими буквами, причём только строчными буквами (без нажатия клавиши Shift) загаданное им слово в окно TextBox, например, слово thanks (благодарность).
Это слово искусственный интеллект скрывает от Игрока 2, записывая его звёздочками (как пароль), рис. 19.11. Далее Игрок 1 объясняет Игроку 2, как переводится на русский язык (или только тематику) загаданное им английское слово, и щёлкает кнопку Старт. Кнопка Старт становится недоступной. Игрок 2 пытается отгадать отдельные буквы загаданного слова и щёлкает кнопки с выбранными им буквами (из всех кнопок со всеми буквами английского алфавита). Искусственный интеллект делает кнопки с выбранными буквами недоступными и размещает эти буквы либо в верхней строке для правильного ответа, либо в таблице для 10 допустимых неправильных букв красного цвета. Звучит мелодия либо для правильного ответа, либо для неправильного ответа.
Рис. 19.11. Из 10 попыток игрок угадал слово.
11. Предположим, что из 10 попыток игрок угадал слово.
Изображение типа смайлика улыбается, звучит музыка для правильного ответа, значит победил Игрок 2.
12. Для начала новой игры следует в Меню выбрать команду “Новая игра”.
13. Для закрытия игры следует в Меню выбрать команду Выход.
14. Появляется панель типа MessageBox с благодарностью “Спасибо за игру” (рис. 19.12).
Закрываем эту панель, воздействуя на выделенную кнопку OK мышью или клавишей Enter.
15. Появляется панель типа MessageBox с вопросом “Вы желаете выйти из игры” (рис. 19.13).
Рис. 19.12. Панель MessageBox с благодарностью. Рис. 19.13. Панель MessageBox с вопросом.
В зависимости от выбранного нами ответа Yes или No мы выходим или продолжаем игру.
16. Если выбираем No, появляется уже показанный выше интерфейс игры.
Теперь первый ход (загадывает слово) делает, например, тот игрок, который в предыдущей игре начинал вторым. Если в игре участвует несколько человек, то можно условиться, что победитель в предыдущей игре начинает первым.
17. Если выбираем Yes, игра закрывается. Для закрытия игры можно также в любой момент выбрать на форме значок Close.
18. Если игроку требуется вспомнить правила игры, то в меню Помощь он выбирает команду “Правила игры”, после чего появляется соответствующая форма (рис. 19.14).
Рис. 19.14.
Форма с правилами игры.
На основании этих правил можно сформулировать другие правила, и любые правила ввести в эту справочную форму.
19.2. Создание проекта
Создаём проект по обычной схеме: в VS в панели New Project в окне Project types выбираем тип проекта Visual Basic, Windows, в окне Templates выделяем шаблон Windows Forms Application, в окне Name записываем любое имя проекта, например, HangMan и щёлкаем OK. Создаётся проект, появляется форма Form1 на экране в режиме проектирования (рис. 19.15). Оставляем по умолчанию или проектируем форму, как подробно описано в параграфе “Методика проектирования формы”. Например, в панели Properties в свойстве Font выбираем шрифт Times New Roman, 14, Bold.
C панели инструментов Toolbox переносим на форму (слева направо и сверху вниз) следующие элементы управления.
Надпись Label с любым именем Name (т.к. это имя не будет использоваться в программе) и текстом “1. Запишите слово:”.
Окно текста TextBox, для которого в панели Properties: записываем имя Name = Word_in, ограничиваем количество букв двадцатью MaxLenght = 20, скрываем буквы слова за звёздочками (как пароль) PasswordChar = *.
Надпись Label с любым именем Name (т.к. это имя не будет использоваться в программе) и текстом “2. Щёлкните:”.
Кнопка Button, для которой в панели Properties записываем имя Name = Done и текст Text = Старт.
Надпись LinkLabel, для которой в панели Properties записываем имя Name = check_answer (проверка ответа) и текст Text = Проверка.
Двадцать надписей Label, для которых в панели Properties записываем имена Name = Chr1, Chr2, Chr3, …, Chr20 (эти имена будут использоваться в программе) и текст Text во всех надписях – в виде символа подчёркивания “_”.
Рис. 19.15. Форма Form1 в режиме проектирования.
Двадцать надписей Label, для которых в панели Properties записываем имена Name = dash1, dash2, dash3, …, dash20 (эти имена будут использоваться в программе) и текст Text во всех надписях – в виде символа подчёркивания “_”.
Надпись Label с любым именем Name (т.к. это имя не будет использоваться в программе) и текстом “Таблица для 10 допустимых неправильных букв:”.
Ниже последней надписи проектируем таблицу из двух горизонтальных и трёх вертикальных линий из элементов управления типа PictureBox, для которых в панели Properties в свойстве BackColor выбираем чёрный цвет, например, ControlText.
В двенадцати ячейках этой таблицы размещаем двенадцать надписей Label, для которых в панели Properties записываем имена Name = f_chr1, f_chr2, f_chr3, …, f_chr12 (эти имена будут использоваться в программе) и без текста Text во всех первых 11 надписях. Чтобы выделить 11 ошибочных букв в этих 11 ячейках, в свойстве ForeColor этих 11 надписей задаём красный цвет Red. Только в последней надписи с именем Name = f_chr12 в свойстве Text записываем какой-либо символ, например, символ подчёркивания “_”, а в свойстве BackColor выбираем чёрный цвет, например, ControlText (тем самым, выделяя чёрный прямоугольник этой ячейки, как показано на рисунке).