아두이노 듀(Due) 터치스크린으로 만드는 틱택토(Tic-Tac-Toe) 게임
부품 및 소모품
| 부품 | 수량 |
| 아두이노 듀 (Arduino Due) | 1 |
| 2.8인치 TFT LCD 터치스크린 (ILI9341 컨트롤러, 터치 컨트롤러 XPT2046 등) | 1 |
| 점퍼 와이어 | 1세트 |
소프트웨어
- 아두이노 IDE
- 필수 라이브러리: Adafruit_GFX, Adafruit_ILI9341, URTouch
프로젝트 개요
nickthegreek82의 'arduino-touch-tic-tac-toe-game' 프로젝트를 기반으로, 아두이노 듀와 2.8인치 터치스크린 TFT LCD를 이용해 사람 대 컴퓨터 대전이 가능한 틱택토 게임을 구현했습니다. 미니맥스(Minimax) 알고리즘으로 무적에 가까운 AI를 탑재했습니다.
배선 (Wiring)
터치스크린 → 아두이노 듀
| 터치 핀 | 아두이노 핀 |
| T_IRQ | 22 |
| T_DO | 24 |
| T_DIN | 26 |
| T_CS | 28 |
| T_CLK | 30 |
디스플레이 → 아두이노 듀
| 디스플레이 핀 | 아두이노 핀 |
| SDO (MISO) | A.25 (아날로그 25) |
| LED (백라이트) | 3.3V |
| SCK | A.27 |
| SDI (MOSI) | A.26 |
| DC | 9 |
| RESET | 8 |
| CS | 10 |
| GND | GND |
| VCC | 3.3V |
개발 이력
- 2017-08-22: AI 로직 개선 및 코드 최적화
- 2017-08-26: 추가 코드 최적화
- 2017-08-27: CPU 상대로 승리 가능한지 도전 과제 추가
- 2018-03-13: klauscam의 GitHub 저장소(ArduinoTicTacToe) 알고리즘 참조로 AI 대폭 개선
소스 코드 (두 가지 버전)
버전 1: 기본 틱택토 (방어적 AI)
상대방의 2연속을 막고, 자신이 2연속이면 이기는 수를 두며, 그 외엔 랜덤 수를 두는 휴리스틱 AI.
// 주요 구조:
// - 보드 상태: int board[9] (0=빈칸, 1=사람, 2=CPU)
// - 터치 입력으로 사람 수 둠 (playerMove)
// - CPU 수: arduinoMove()에서 휴리스틱으로 결정
// - 승리 판정: checkWinner()에서 8가지 승리 라인 검사
// - 비트맵으로 X(파랑), O(빨강) 그리기
// 전체 코드는 원본 참조 (길이 상 생략)
버전 2: TicTacToe_new (미니맥스 AI - 필승/무승부 보장)
미니맥스 알고리즘으로 최적의 수를 계산해 사람이 이길 수 없음(최적 플레이 시 무승부). 난이도 조절 가능(difficulty 변수로 탐색 깊이 제한).
// 핵심 함수:
// int minimax(int board[9], int player, int depth)
// - 재귀적으로 모든 가능한 수 탐색, 평가 점수 반환
// - player: 1(CPU), -1(사람)
// - depth 제한으로 난이도 조절
// void computerMove(int board[9])
// - 빈 칸 각각에 대해 minimax 호출, 최고 점수 수 선택
// 터치 좌표 매핑: playerMove()에서 터치 영역 9구역으로 분할 판정
// 전체 코드는 원본 참조
회로도
