2016년 1학기 인공지능 수업에서 프로젝트로 진행했었던 Connect4 게임 인공지능이다. 제출한 데모 버전에 버그 픽스, 기능 추가, UI 개선 등의 과정을 거쳐서 나름 완성에 가까운(?) 버전으로 업그레이드했다.
1. Connect4란 무엇인가
https://en.wikipedia.org/wiki/Connect_Four
Connect4는 한국에서는 생소한 게임이지만, 기본적인 룰은 5목과 유사한 "4목"이라고 할 수 있다. 돌 네 개를 수직, 수평 혹은 대각선으로 일렬로 놓으면 이기는 간단한 게임이다. 그런데 특징은 아무데나 원하는 곳에 돌을 둘 수 있는 것이 아니라 세로줄 중 하나를 선택해서 Stack처럼 아래에서부터 채워야 한다는 것이다. 따라서 생각보다 수읽기가 까다롭다.
게임판은 8x8 또는 7x6으로 두 가지 종류가 있는데, 해당 프로젝트에서는 7x6 보드를 사용하였다.
인공지능은 하, 중, 상의 난이도로 나누었는데, 상의 난이도를 기준으로 하면 대략 10수 앞 정도를 내다보고 수를 둔다고 생각하면 된다. 판에 놓인 돌의 수가 많아질수록 내다보는 수도 점점 증가한다.
2. Demo
Eclipse Java EE IDE for Web Developers.
Version: Mars.2 Release (4.5.2)
Java 언어를 사용하여 개발하였다. IDE로는 이클립스를 사용하였다.
GUI는 복습 겸 awt를 통해 구현하였다. Swing을 사용하지 않아서 꽤나 시간을 많이 잡아먹었다.
4. 구현 알고리즘
Minimax Algorithm + Alpha-beta Pruning (Game Tree)
https://en.wikipedia.org/wiki/Minimax
https://en.wikipedia.org/wiki/Alpha-beta_pruning
5. Heuristic Function
Winning Line의 수를 세는 것을 바탕으로 스코어링을 했다. 일렬로 놓이는 돌의 개수가 많을수록 높은 점수를 얻으며, 가능한 모든 Line에 대한 점수를 합산하여 다음 수를 두는 데 반영하였다.
6. Source Code
자세한 사항은 Github에서 확인할 수 있다. 전체 소스코드와 실행파일(.jar) 및 보고서가 포함되어 있다.
https://github.com/arkainoh/Connect4
jar 파일을 실행하려면, 해당 파일이 있는 위치에서 터미널을 열고 다음 커맨드를 입력하면 된다. 컴퓨터에 Java가 설치되어 있고, 환경변수 설정이 완료된 상태여야 한다.
java -jar Connect4AI.jar
댓글 없음:
댓글 쓰기