Show GN: 엄랭으로 틱택토 AI를 만들어 봤습니다.
요약
난해한 프로그래밍 언어인 엄랭(UmmLang)을 사용하여 틱택토 AI를 구현한 프로젝트입니다. 모든 게임 상태를 직접 작성하는 대신 Python 코드 생성기를 통해 미니맥스 알고리즘 기반의 조건문을 자동 생성하여 구현했습니다.
핵심 포인트
- 난해한 언어인 엄랭의 제약 사항을 극복하기 위해 Python 생성기 활용
- 미니맥스 알고리즘을 통해 최적의 수를 계산하고 엄랭 문법으로 변환
- 런타임 계산 대신 미리 생성된 방대한 조건문을 실행하는 방식 채택
- 2x1에서 3x3 틱택토로 확장하며 게임 로직 및 인터페이스 구현
엄랭(UmmLang)으로 틱택토 AI를 구현해봤습니다.
엄랭은 변수, 입출력, 조건문, 라인 점프 정도만 제공하는 난해한 프로그래밍 언어로
[ 어어엄어어어,,,,,,,, 식어어어ㅋ 동탄어?준. ] 이러한 생김새를 가지고 있습니다.
반복문이나 함수 같은 일반적인 제어 구조가 거의 없습니다. 정수조차 점(.), 쉼표(,), 공백만으로 표현해야 하기 때문에 일반적인 알고리즘을 구현하기에는 상당히 불편한 환경입니다.
먼저 2×1 틱택토를 구현하며 게임판 표현과 AI 구현 방식을 검증했습니다.
각 칸을 변수 하나에 대응시키고 빈칸, X, O를 각각 0, 1, 2로 표현한 뒤, 가능한 모든 상태를 동탄(IF) 문으로 나열하여 AI가 둘 위치를 결정하도록 구성했습니다.
이 과정에서 게임판 출력 인터페이스와 사용자 입력 처리 구조도 함께 만들었습니다.
이후 이를 3×3 틱택토로 확장했습니다.
문제는 합법적인 게임 상태가 약 4,520개에 달해 모든 경우를 직접 작성하는 것이 현실적으로 불가능했다는 점입니다.
그래서 Python으로 별도의 코드 생성기를 작성했습니다.
생성기는 모든 게임 상태를 O의 개수가 X보다 많거나 이미 승부가 끝난 상태를 제외한 뒤, 각 상태에서 틱택토 AI(미니맥스 기반)의 최적 수를 계산합니다.
계산된 결과를 엄랭의 동탄 조건문 형태로 자동 변환하여 case.umm 파일을 생성하도록 했습니다.
최종적으로 생성된 수천 개의 동탄 분기를 메인 소스에 삽입해 AI 로직을 완성했습니다.
플레이어가 입력한 좌표를 게임판 변수에 반영하면, 생성된 조건문들이 현재 게임 상태와 일치하는 케이스를 찾아 AI의 착수를 수행합니다.
이후 게임판을 다시 출력하고 준 문법으로 사용자 입력 부분으로 점프하여 게임 루프를 구성했습니다.
즉, 런타임에는 탐색이나 계산을 수행하지 않고 미리 생성한 조건문만 실행하기 때문에, 최적화되어있진않지만 틱택토 AI를 구현할 수 있었습니다.
깃허브에 류갓 사이트에서 직접 플레이 하는 방법도 남겨 두었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기