Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Создание сенсорной игры «Крестики-нолики» на Arduino Due

Компоненты и материалы

КомпонентКоличество
Arduino Due1
TFT LCD 2.8" с сенсорной панелью (ILI9341 + XPT2046)1
Перемычки1 комплект

Приложения и сервисы

О проекте

Описание

Проект основан на работе nickthegreek82 (arduino-touch-tic-tac-toe-game). Реализована игра «Крестики-нолики» против компьютера с ИИ на сенсорном TFT-дисплее 2.8".

Необходимые библиотеки

Подключение (Wiring)

Сенсорная панель → Arduino Due

Дисплей → Arduino Due

История версий

Код

Две версии скетча:

1. Базовая версия (TIC TAC TOE)

Простая игра против компьютера с базовым ИИ. Использует битмапы для отрисовки X и O.

// Основные определения пинов и библиотеки
#define TFT_RST 8
#define TFT_DC 9
#define TFT_CS 10
#define TOUCH_ORIENTATION LANDSCAPE

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
Adafruit_GFX_Button buttons[9];
URTouch myTouch(30, 28, 26, 24, 22);

// Игровая логика: массив board[9], проверка победителя, ходы игрока и CPU
// CPU использует эвристику: центр, углы, блокировка двойных угроз, случайный ход
// Отрисовка через drawBitmap() из PROGMEM массивов circle[] и x_bitmap[]
// Меню: кто начинает, экран Game Over с кнопкой "Again?"

Полный код объемный — см. раздел Code исходника.

2. Улучшенная версия (TicTacToe_new) — непобедимый ИИ на Minimax

Реализован алгоритм Minimax с альфа-бета отсечением (глубина difficulty=8). CPU играет идеально — ничью гарантированно, выигрыш только при ошибке игрока.

// Ключевые отличия:
int minimax(int board[9], int player, int depth) {
  int winner = win(board);
  if(winner != 0) return winner * player;
  int move = -1, score = -2;
  for(int i=0; i<9; ++i) if(board[i]==0) {
    board[i] = player;
    int thisScore = (depth < difficulty) ? -minimax(board, -player, depth+1) : 0;
    board[i] = 0;
    if(thisScore > score) { score = thisScore; move = i; }
  }
  return (move==-1) ? 0 : score;
}

void computerMove(int board[9]) {
  // перебор всех ходов, выбор с лучшим minimax score
  // board: 1 = CPU (O), -1 = Human (X)
}

Отрисовка сетки линиями, координаты тача маппятся на 9 клеток. В меню выбора первого хода — кнопки YOU / CPU. После партии — экран результата (HUMAN WINS / CPU WINS / DRAW) и кнопка Again.

Схемы

Создание сенсорной игры «Крестики-нолики» на Arduino Due

Производственный процесс

  1. Визитка-PCB с игрой «Крестики-нолики» 4×4: руководство по проектированию, сборке и программированию
  2. Датчик CO2 K30: мониторинг качества воздуха в реальном времени на Arduino
  3. Устройство для общения глухосліпых людей с помощью 1Sheeld и Arduino
  4. Умная копилка: управление монетоприёмником на Arduino Nano
  5. Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
  6. Интеграция ёмкостного сканера отпечатков DFRobot с Arduino или ESP8266
  7. Интерактивный HMI-проект на Nextion с Arduino Mega и датчиками
  8. Роботизированная рука 6 степеней свободы на Arduino Mega с управлением через Nunchuk
  9. Измерение солнечной радиации на Arduino UNO с Ethernet Shield
  10. Компактный радар на Arduino Nano с HC-SR04 и дисплеем 1.8"