AI 뉴스

Show GN: 엄랭으로 틱택토 AI를 만들어 봤습니다. — 난해한 언어로 게임 AI를 만드는 법

노동1호 2026. 7. 26. 22:07

Show GN: 엄랭으로 틱택토 AI를 만들어 봤습니다. — 난해한 언어로 게임 AI를 만드는 법

tags: AI, 인공지능, 게임AI, 틱택토, 엄랭, 난해한언어, 프로그래밍, 개발

Show GN: 엄랭으로 틱택토 AI를 만들어 봤습니다. — 난해한 언어로 게임 AI를 만드는 법

> 원문 주제: Show GN: 엄랭으로 틱택토 AI를 만들어 봤습니다.

>

> 엄랭(UmmLang)으로 틱택토 AI를 구현해봤습니다. 엄랭은 변수, 입출력, 조건문, 라인 점프 정도만 제공하는 난해한 프로그래밍 언어로 [ 어어엄어어어,,,,,,,, 식어어어ㅋ 동탄어?준. ] 이러한 생김새를 가지고 있습니다. 반복문이나 함수 같은 일반적인 제어 구조가 거의 없습니…

화면과 문법을 벗어나도 핵심은 알고리즘이다

틱택토는 규칙이 단순해 보이지만, 컴퓨터가 사람처럼 수를 선택하게 만들려면 생각보다 많은 요소가 필요합니다. 보드의 현재 상태를 표현해야 하고, 놓을 수 있는 칸을 찾아야 하며, 승패를 판정해야 합니다. 여기에 상대의 다음 수까지 고려하면 작은 게임도 분명한 의사결정 문제로 바뀝니다.

이번 사례가 흥미로운 이유는 이 과정을 일반적인 언어가 아니라 엄랭(UmmLang) 으로 구현했다는 점입니다. 엄랭은 변수, 입출력, 조건문, 라인 점프 정도의 제한적인 기능을 제공하는 난해한 언어입니다. 반복문이나 함수처럼 익숙한 제어 구조가 거의 없기 때문에, 개발자는 언어가 제공하는 편의 기능에 기대기보다 상태와 흐름을 직접 설계해야 합니다.

틱택토 AI를 작은 상태 머신으로 나누기

제한된 언어에서 복잡한 코드를 작성할 때는 기능을 한 번에 구현하려고 하기보다, 프로그램을 몇 개의 상태로 나누는 방식이 유용합니다.

  1. 보드 입력 상태: 현재 9칸의 값을 읽고 화면에 표시합니다.
  2. 사용자 차례 상태: 비어 있는 칸인지 확인한 뒤 사용자의 수를 반영합니다.
  3. 종료 판정 상태: 가로, 세로, 대각선의 승리 조건을 검사합니다.
  4. AI 차례 상태: 가능한 수를 훑고 가장 적절한 칸을 선택합니다.
  5. 다음 라운드 상태: 승패가 결정되지 않았다면 다시 보드 입력으로 돌아갑니다.

일반적인 언어라면 함수와 반복문으로 깔끔하게 표현할 수 있지만, 엄랭에서는 라인 점프와 조건 분기를 이용해 같은 흐름을 만들어야 합니다. 겉으로는 난해해 보여도, 내부적으로는 작은 상태 머신을 수작업으로 작성하는 셈입니다.

제한이 오히려 설계를 선명하게 만든다

언어에 기능이 많으면 문제를 해결하는 방법도 다양해집니다. 반대로 사용할 수 있는 문법이 적으면 먼저 데이터와 규칙을 정의해야 합니다. 예를 들어 보드의 각 칸을 하나의 값으로 표현하고, 승리 조합을 고정된 목록으로 둔 다음, 각 조합의 세 칸을 차례로 비교할 수 있습니다.

Show GN: 엄랭으로 틱택토 AI를 만들어 봤습니다. — 난해한 언어로 게임 AI를 만드는 법

간단한 의사코드로 표현하면 다음과 같습니다.


보드를 읽는다
사용자의 수를 반영한다
승리 조합을 모두 검사한다
  세 칸이 같은 플레이어라면 종료한다
빈 칸이 없다면 무승부로 종료한다
가능한 AI 수를 평가한다
선택한 칸에 AI의 수를 반영한다
다음 차례로 이동한다

여기서 중요한 점은 특정 언어의 문법이 아니라 상태가 어떻게 바뀌는지입니다. 문법이 풍부한 언어에서는 이 구조가 코드 안에 자연스럽게 숨지만, 엄랭처럼 제한적인 환경에서는 상태 전이가 그대로 드러납니다. 덕분에 게임 AI의 기본 구조를 학습하는 예제로도 활용할 수 있습니다.

완벽한 AI보다 구현 가능한 AI부터

틱택토는 미니맥스 같은 알고리즘을 적용하기 좋은 게임이지만, 첫 구현부터 모든 수를 깊게 탐색할 필요는 없습니다. 다음과 같은 우선순위만으로도 충분히 그럴듯한 AI를 만들 수 있습니다.

  • 지금 이길 수 있는 수가 있으면 먼저 둡니다.
  • 상대가 다음 수에 이길 수 있다면 그 칸을 막습니다.
  • 중앙과 모서리처럼 유리한 칸을 우선합니다.
  • 그 외에는 남은 칸 중 하나를 선택합니다.

이 전략은 최적의 수를 항상 보장하지는 않지만, 보드 표현·승리 판정·수 선택이라는 핵심 문제를 모두 포함합니다. 이후 언어의 한계를 넘을 수 있다면 미니맥스와 가지치기를 단계적으로 추가할 수 있습니다.

개발자가 얻을 수 있는 교훈

엄랭으로 틱택토 AI를 만든 사례는 난해한 언어를 배우라는 뜻만은 아닙니다. 오히려 익숙한 도구를 사용할 수 없을 때도 문제를 작은 규칙과 상태 변화로 분해하면 동작하는 프로그램을 만들 수 있다는 점을 보여줍니다.

AI라는 이름이 붙었다고 해서 항상 거대한 모델이나 복잡한 인프라가 필요한 것도 아닙니다. 틱택토처럼 상태 공간이 작은 문제에서는 명확한 규칙과 탐색만으로 충분히 의사결정 시스템을 구성할 수 있습니다. 중요한 것은 문제의 크기에 맞는 방법을 선택하는 일입니다.

마무리

엄랭으로 만든 틱택토 AI는 장난스러운 프로젝트처럼 보이지만, 그 안에는 좋은 개발 습관이 담겨 있습니다. 문제를 상태로 나누고, 규칙을 명시하고, 가능한 수를 제한하며, 가장 단순하게 동작하는 버전부터 완성하는 방식입니다.

화려한 프레임워크가 없어도 알고리즘은 작동합니다. 오히려 제약이 큰 환경에서 직접 구현해 보면, 평소 라이브러리가 대신 처리해 주던 보드 표현과 흐름 제어의 본질을 더 분명하게 볼 수 있습니다.

  • --

📰 원본 출처 · https://news.hada.io/topic?id=31827 (#N=31827)

이 글은 GeekNews(긱뉴스)에 게제된 글을 기반으로 작성되었습니다. 원본의 라이선스와 저작권은 원작자에게 있습니다.