Оглавление:

Игра Arduino Touch Tic Tac Toe: 6 шагов (с изображениями)
Игра Arduino Touch Tic Tac Toe: 6 шагов (с изображениями)

Видео: Игра Arduino Touch Tic Tac Toe: 6 шагов (с изображениями)

Видео: Игра Arduino Touch Tic Tac Toe: 6 шагов (с изображениями)
Видео: Игра крестики нолики на микроконтроллере stm32: звук, эффекты, голос, дисплей с тачскрином, аудиоЦАП 2024, Июнь
Anonim
Image
Image
Игра Arduino Touch Tic Tac Toe
Игра Arduino Touch Tic Tac Toe
Игра Arduino Touch Tic Tac Toe
Игра Arduino Touch Tic Tac Toe
Игра Arduino Touch Tic Tac Toe
Игра Arduino Touch Tic Tac Toe

Дорогие друзья, добро пожаловать в очередной учебник по Arduino! В этом подробном руководстве мы собираемся создать игру Arduino Tic Tac Toe. Как видите, мы используем сенсорный экран и играем против компьютера. Такая простая игра, как Tic Tac Toe, - отличное введение в программирование игр и искусственный интеллект. Несмотря на то, что мы не будем использовать какие-либо алгоритмы искусственного интеллекта в этой игре, мы поймем, почему алгоритмы искусственного интеллекта требуются в более сложных играх.

Разработка игр для Arduino - дело непростое и требует много времени. Но мы можем создать несколько простых игр для Arduino, потому что это весело и позволит нам изучить некоторые более сложные темы программирования, такие как искусственный интеллект. Это отличный учебный опыт, и в конце у вас будет хорошая игра для детей!

Теперь приступим к созданию этого проекта.

Шаг 1. Получите все детали

Image
Image
2.8
2.8

Детали, необходимые для создания этого проекта, следующие:

Arduino Uno ▶

Сенсорный экран 2,8 дюйма ▶

Стоимость проекта очень низкая. Это всего 15 $

Прежде чем пытаться создать этот проект, посмотрите подготовленное мной видео о сенсорном дисплее. Я приложил его к этому руководству. Это поможет вам понять код и откалибровать сенсорный экран.

Шаг 2. 2,8-дюймовый цветной сенсорный дисплей для Arduino

Image
Image
2.8
2.8
2.8
2.8

Я обнаружил этот сенсорный экран на banggood.com и решил купить его, чтобы попробовать использовать его в некоторых своих проектах. Как видите, дисплей недорогой, он стоит около 11 долларов.

Получите здесь ▶

Дисплей имеет разрешение 320x240 пикселей и представляет собой экран, который делает соединение с Arduino чрезвычайно простым. Как видите, дисплей использует почти все цифровые и аналоговые контакты Arduino Uno. При использовании этого экрана у нас остается только 2 цифровых вывода и 1 аналоговый вывод для наших проектов. К счастью, дисплей отлично работает и с Arduino Mega, поэтому, когда нам нужно больше контактов, мы можем использовать Arduino Mega вместо Arduino Uno. К сожалению, этот дисплей не работает с платой Arduino Due или Wemos D1 ESP8266. Еще одним преимуществом экрана является то, что он предлагает слот для микро SD, который очень прост в использовании.

Шаг 3: Создание проекта и его тестирование

Сборка проекта и его тестирование
Сборка проекта и его тестирование
Сборка проекта и его тестирование
Сборка проекта и его тестирование
Сборка проекта и его тестирование
Сборка проекта и его тестирование

После подключения экрана к Arduino Uno мы можем загрузить код и готовы к игре.

Сначала нажимаем кнопку «Начать игру» и игра запускается. Arduino играет первой. Затем мы можем сыграть свой ход, просто прикоснувшись к экрану. Затем Arduino выполняет свой ход и так далее. Игрок, которому удастся разместить три своих метки в горизонтальном, вертикальном или диагональном ряду, выигрывает игру. Когда игра закончится, появится экран Game Over. Затем мы можем нажать кнопку воспроизведения снова, чтобы снова начать игру.

Arduino очень хорош в этой игре. Он выиграет большинство игр, или, если вы очень хороший игрок, игра закончится ничьей. Я специально разработал этот алгоритм, чтобы допускать некоторые ошибки, чтобы дать игроку-человеку шанс на победу. Добавив еще две строчки в код игры, мы можем сделать так, чтобы Arduino не проиграла игру. Но как процессор Arduino за 2 доллара может превзойти человеческий мозг? Разработанная нами программа умнее человеческого мозга?

Шаг 4: алгоритм игры

Алгоритм игры
Алгоритм игры
Алгоритм игры
Алгоритм игры

Чтобы ответить на этот вопрос, давайте посмотрим на реализованный мной алгоритм.

Компьютер всегда играет первым. Одно это решение значительно упрощает победу Arduino. Первый ход всегда угловой. Второй ход для Arduino также является случайным углом из оставшихся, не заботясь о перемещении игрока. С этого момента Arduino сначала проверяет, может ли игрок выиграть следующим ходом, и блокирует этот ход. Если игрок не может выиграть одним ходом, он выполняет угловой ход, если он доступен, или случайный из оставшихся. Вот и все, этот простой алгоритм может каждый раз побеждать игрока-человека или, в худшем случае, игра закончится ничьей. Это не лучший алгоритм игры в крестики-нолики, но один из самых простых.

Этот алгоритм можно легко реализовать в Arduino, потому что игра Tic Tac Toe очень проста, и мы можем легко ее проанализировать и решить. Если мы спроектируем дерево игры, мы сможем обнаружить некоторые выигрышные стратегии и легко реализовать их в коде, или мы можем позволить процессору вычислить дерево игры в реальном времени и самому выбрать лучший ход. Конечно, алгоритм, который мы используем в этой игре, очень прост, потому что игра очень проста. Если мы попытаемся разработать алгоритм победы в шахматах, даже если мы будем использовать самый быстрый компьютер, мы не сможем вычислить дерево игры за тысячу лет! Для подобных игр нам нужен другой подход, нам нужны алгоритмы искусственного интеллекта и, конечно же, огромная вычислительная мощность. Подробнее об этом в будущем видео.

Шаг 5: Код проекта

Код проекта
Код проекта

Взглянем на код проекта. Для компиляции кода нам нужны три библиотеки.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. Сенсорный экран:

Как видите, даже такая простая игра требует более 600 строк кода. Код сложный, поэтому я не буду пытаться объяснять его в коротком руководстве. Я покажу вам реализацию алгоритма движений Arduino.

Сначала мы играем два случайных угла.

<int firstMoves = {0, 2, 6, 8}; // сначала будут использовать эти позиции для (counter = 0; counter <4; counter ++) // Подсчитайте первые сыгранные ходы {if (board [firstMoves [counter]! = 0) // Кто-то сделал первый ход {movePlayed ++; }} делать {если (перемещает <= 2) {int randomMove = random (4); int c = firstMoves [randomMove]; если (доска [c] == 0) {задержка (1000); доска [c] = 2; Serial.print (firstMoves [randomMove]); Serial.println (); drawCpuMove (firstMoves [randomMove]); b = 1; }}

Далее в каждом раунде мы проверяем, сможет ли игрок выиграть следующим ходом.

интервал checkOpponent ()

{if (board [0] == 1 && board [1] == 1 && board [2] == 0) return 2; иначе, если (доска [0] == 1 && доска [1] == 0 && доска [2] == 1) return 1; иначе, если (доска [1] == 1 && доска [2] == 1 && доска [0] == 0) return 0; иначе, если (доска [3] == 1 && доска [4] == 1 && доска [5] == 0) return 5; иначе, если (доска [4] == 1 && доска [5] == 1 && доска [3] == 0) return 3; иначе, если (доска [3] == 1 && доска [4] == 0 && доска [5] == 1) return 4; иначе, если (доска [1] == 0 && доска [4] == 1 && доска [7] == 1) return 1; иначе верните 100; }

Если да, мы блокируем этот ход в большинстве случаев. Мы не блокируем все ходы, чтобы дать игроку-человеку шанс на победу. Вы можете найти, какие ходы не заблокированы? После блокировки хода мы играем в оставшийся угол или случайный ход. Вы можете изучить код и легко реализовать свой собственный непревзойденный алгоритм. Как всегда, вы можете найти код проекта в этой инструкции.

ПРИМЕЧАНИЕ. Поскольку Banggood предлагает один и тот же дисплей с двумя разными драйверами дисплея, если приведенный выше код не работает, измените функцию initDisplay на следующее:

void initDisplay ()

{tft.reset (); tft.begin (0x9341); tft.setRotation (3); }

Шаг 6: Заключительные мысли и улучшения

Заключительные мысли и улучшения
Заключительные мысли и улучшения

Как видите, даже с Arduino Uno мы можем создать непревзойденный алгоритм для простых игр. Этот проект великолепен, потому что его легко построить, и в то же время он является отличным введением в искусственный интеллект и программирование игр. В будущем я постараюсь создать еще несколько продвинутых проектов с использованием искусственного интеллекта, используя более мощный Raspberry Pi, так что следите за обновлениями! Хотелось бы услышать ваше мнение об этом проекте.

Пожалуйста, разместите свои комментарии ниже и не забудьте поставить лайк инструкциям, если вы сочтете интересным. Спасибо!

Рекомендуемые: