훌라 CPU 플레이어 만들기 Part 1: 룰북이 없는 게임의 룰을 정한다
이 글은 Claude Opus 5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.
봇 이야기를 시작할 수 없는 게임#
러미 계열 게임 Part 2 에서 훌라를 다루면서 이렇게 적었습니다.
⚠️ 훌라는 표준 룰북이 없는 게임입니다. 7의 점수 처리, 스톱 조건, 배수 규칙(훌라·로우·하이·세븐 포카드 등)이 지역과 모임마다 다릅니다.
카드 게임을 소개하는 글이라면 이 문장으로 충분합니다. 읽는 사람이 자기 모임의 룰을 떠올리며 읽으면 됩니다. 그런데 봇을 만들려는 사람에게는 이 문장이 출발선이 아니라 장벽입니다.
달무티에는 Wizards of the Coast 가 낸 공식 룰북이 있습니다. 달무티 CPU 플레이어 만들기 Part 1 에서 룰셋을 못 박을 때 근거란에 “공식 룰북 The Play " 라고 적을 수 있었던 것은 그 덕입니다. 훌라에는 그 자리에 적을 것이 없습니다. 누구에게 물어봐도 “우리 동네에서는” 으로 시작하는 대답이 돌아옵니다.
그래서 이 시리즈는 순서가 하나 늘어납니다. 봇의 정책을 설계하기 전에, 봇이 뛸 판을 먼저 만들어야 합니다.
이 글은 여덟 편으로 나누어 씁니다.
- Part 1 (이 글): 이 시리즈가 전제하는 훌라 룰셋을 확정합니다. 조합, 땡큐, 스톱, 정산과 박입니다.
- Part 2: 봇이 무엇을 봐도 되는지 경계를 긋고, 정책 인터페이스를 설계합니다.
- Part 3: 결정적 규칙만으로 동작하는 easy 난이도 봇 을 구현합니다.
- Part 4: easy 봇이 보지 못하는 여덟 자리를 정리합니다. hard 봇의 요구사항이 됩니다.
- Part 5: hard 봇이 무엇을 알고, 한 턴을 어떻게 통째로 계획해 한 수를 고르는지 다룹니다.
- Part 6: 남의 차례에 끼어드는 땡큐와 판을 접는 스톱을 hard 봇이 어떻게 판단하는지 다룹니다.
- Part 7: 시뮬레이터로 봇을 재고, 평가 항을 하나씩 꺼 보며 무엇이 실제로 일하는지 확인합니다.
- Part 8: 한 번도 보지 않은 판에서 최종 검증을 하고, Part 4 의 여덟 자리를 결산합니다.
이 글의 전제#
다섯 편 모두 특정 제품을 설명하는 글이 아니라, 훌라를 디지털 게임으로 만든다면 봇을 어떻게 설계할 것인가에 대한 설계안 입니다. 코드는 Go 로 쓰되 논지를 보이기 위한 발췌 이며, 그대로 컴파일되는 완성 패키지가 아닙니다.
아래 표의 선택이 달라지면 Part 3 이후의 알고리즘 상당 부분이 바뀝니다. 특히 정산 방식 과 땡큐 우선권 두 줄은 봇의 목적 함수 자체를 갈아 치웁니다.
| 항목 | 이 글의 전제 |
|---|---|
| 인원 | 3~5명 |
| 덱 | 표준 트럼프 52장 1덱. 조커 없음 |
| 배분 | 각 7장 |
| 첫 버림패 | 딜 직후 덱 첫 장을 열고, 땡큐 창부터 판이 시작 |
| 선 | 첫 판은 무작위, 이후는 직전 판 승자 |
| 조합 최소 장수 | SET·RUN 모두 3장. 단 7 은 한 장으로도 성립 |
| RUN 의 A | K 다음과 2 앞에 모두 설 수 있음 (Q-K-A-2) |
| 붙이기 자격 | 자기가 한 번 등록한 뒤 부터 |
| 붙이기 최소 장수 | RUN 은 2장 까지 인정. SET 은 3장 이상 |
| 땡큐 우선권 | 좌석 순서. 버린 사람 다음 자리부터 |
| 땡큐 창 | 방 설정. 기본 5초 |
| 스톱 | 총통 · 로우 · 하이 · 일반 스톱 네 가지 |
| 스톱 기준선 | 방 설정. 기본은 “높음” (로우 22 · 하이 76 · 일반 15) |
| 정산 바탕 | 등수. 2등이 1점, 아래로 갈수록 두 배 |
| 개인 박 | 미등록박 · 세븐박. 서로 곱해짐 |
1. 한 턴에 무슨 일이 일어나는가#
기본 골격은 러미 그대로입니다. 뽑고, 조합을 만들고, 버립니다.
flowchart LR
A["뽑기<br/>덱 또는<br/>버림패 맨 위"] --> B["등록<br/>새 조합을<br/>내려놓기"]
B --> C["붙이기<br/>이미 놓인 조합에<br/>카드 얹기"]
C --> D["버리기<br/>한 장"]
D --> E["땡큐 창<br/>3초"]
E --> F["다음 좌석"]
E -.->|"선언 발생"| G["차례 가로채기"]
style A fill:#87CEEB,color:#000000
style B fill:#90EE90,color:#000000
style C fill:#90EE90,color:#000000
style D fill:#FFD700,color:#000000
style E fill:#FF9999,color:#000000
style F fill:#D3D3D3,color:#000000
style G fill:#FF9999,color:#000000
등록과 붙이기는 한 턴에 여러 번 할 수 있습니다. 세 장짜리 SET 을 내려놓고, 이어서 RUN 을 하나 더 내려놓고, 남은 카드를 남의 조합에 붙이는 것이 한 턴 안에서 다 일어납니다. 이 성질이 Part 3 의 봇 구조를 결정합니다. 봇은 “한 턴” 이 아니라 “한 수” 를 돌려주고, 서버가 상태를 갱신한 뒤 다시 부르는 방식이 됩니다.
손패를 모두 비우면 그 자리에서 이깁니다. 덱이 떨어져도 판이 끝나는데, 이때는 카드값 합이 가장 낮은 사람 이 1등입니다.
판은 땡큐 창으로 시작합니다#
딜이 끝나면 선이 바로 카드를 뽑는 것이 아닙니다. 덱의 첫 장을 버림패로 열고, 그 카드에 땡큐 창이 먼저 열립니다. 창이 닫힌 뒤에야 선의 뽑기가 열립니다.
flowchart LR
A["딜<br/>각 7장"] --> B["덱 첫 장을<br/>버림패로 공개"]
B --> C["땡큐 창<br/>선 포함 전원"]
C -->|"아무도 없음"| D["선의 뽑기"]
C -->|"선언 발생"| E["가져간 사람의<br/>턴 시작"]
style A fill:#87CEEB,color:#000000
style B fill:#FFD700,color:#000000
style C fill:#FF9999,color:#000000
style D fill:#90EE90,color:#000000
style E fill:#90EE90,color:#000000
이 첫 창은 보통의 땡큐 창과 세 가지가 다릅니다.
- 버린 사람이 없으므로 선을 포함한 전원 에게 자격이 있습니다.
- 우선권은 선부터 돕니다.
- 이 카드로 누가 훌라를 내더라도 독박을 쓸 사람이 없습니다.
선은 첫 판에는 무작위로 정하고, 다음 판부터는 직전 판 승자 가 맡습니다. 승자가 여럿이면 직전 선의 다음 자리부터 가까운 승자입니다. 덱은 판마다 한 장이 줄어 4인 게임이면 덱에 23장이 남은 채 시작합니다.
2. 조합 — 7 한 장의 특권#
| 조합 | 뜻 | 예 |
|---|---|---|
| SET | 같은 숫자 3장 이상 | Q♠ Q♥ Q♣ |
| RUN | 같은 문양으로 이어지는 3장 이상 | ♠8 ♠9 ♠10 |
| 7 한 장 | 7 만은 한 장으로도 내려놓을 수 있음 | 7♠ |
7 한 장이 곧 조합이라는 규칙은 러미 계열 전체에서 훌라와 세븐브리지에만 있는 특징입니다. 이 한 줄이 게임을 크게 흔듭니다.
- 누구나 첫 턴부터 등록할 수 있는 길이 열립니다. 7 을 한 장이라도 들고 있으면 조합이 안 만들어져 아무것도 못 하는 상황이 없습니다.
- 붙이기 자격을 사는 가장 싼 값입니다. 뒤에서 보겠지만 붙이기는 자기가 한 번 등록한 뒤에만 가능하고, 7 한 장은 그 자격을 카드 한 장에 삽니다.
- 동시에 가장 비싼 카드입니다. 판이 끝날 때 손에 7 이 남아 있으면 장당 배수가 붙습니다.
세 번째 성질 때문에 7 은 쥐고 있는 것 자체가 리스크인 카드 가 됩니다. Part 4 에서 easy 봇의 한계를 이야기할 때, 그리고 hard 봇을 설계할 때 이 카드 하나가 계속 돌아옵니다.
RUN 에서 A 가 서는 자리#
A 는 K 다음에도 서고 2 앞에도 섭니다. Q-K-A-2 가 유효한 RUN 입니다.
다만 점수를 셀 때 A 는 언제나 1점입니다. K 다음에 섰다고 14점이 되지 않습니다. 이어지는지를 볼 때만 A 가 K 위에 있고, 카드값을 셀 때는 맨 아래로 돌아옵니다. 봇 코드에서 이 둘을 같은 함수로 처리하면 조용히 틀립니다.
붙이기는 등록보다 느슨하다#
이미 테이블에 놓인 조합에 카드를 얹는 것을 붙이기라고 합니다. 규칙이 두 가지입니다.
- 자기가 한 번 등록한 뒤부터 붙일 수 있습니다. 남의 조합이든 자기 조합이든 마찬가지입니다.
- 붙이기는 RUN 방향으로만 최소 장수가 풀립니다.
두 번째가 중요합니다. 7♠ 한 장이 놓여 있을 때 6♠ 를 붙여 2장짜리 RUN 을 만드는 것은 됩니다. 하지만 2장짜리 RUN 을 처음부터 내려놓을 수는 없습니다. 같은 모양의 조합인데 도달 경로에 따라 합법성이 갈립니다.
SET 방향은 풀리지 않습니다. 7♠ 에 7♥ 한 장만 붙여 2장짜리 SET 을 만들 수는 없습니다. SET 은 언제나 3장 이상이어야 하므로, 7♥ 와 7♦ 를 한 번에 두 장 붙여야 합니다.
7♠ 한 장에 붙이는 방향 | 한 번에 붙일 카드 | 결과 |
|---|---|---|
| RUN | 6♠ 한 장 | 2장짜리 RUN |
| SET | 7♥ 7♦ 두 장 동시에 | 3장짜리 SET |
이 비대칭이 봇 설계에 그늘을 하나 만듭니다. 7♠ 를 내려놓는 순간, 그것은 나만 쓸 수 있는 조합이 아니라 남들이 카드를 털어 낼 발판이 됩니다. 게다가 6♠ 가 붙는 순간 그 조합은 RUN 으로 확정되어, 내가 나중에 7♥ 7♦ 로 SET 을 만들려던 계획이 막힙니다. 7 한 장을 내려놓는다는 결정은 생각보다 간단하지 않습니다.
3. 땡큐 — 남의 차례에 끼어드는 행위#
누군가 버린 카드가 내 손패 2장 이상과 합쳐져 조합이 되면, 그 카드를 가져오면서 차례를 가로챌 수 있습니다. 버린 직후 모두에게 창이 열리고, 그 안에 선언해야 합니다. 창의 길이는 방을 만들 때 정하며 기본은 5초 입니다. 우선권 1순위가 선언하면 창은 그 자리에서 닫힙니다.
조건이 두 가지 더 붙습니다.
- 가져온 카드는 반드시 그 조합으로 즉시 내려놓아야 합니다. 가져와서 손에 쥐고 있을 수 없습니다.
- 테이블에 놓인 카드는 손패 장수를 대신하지 못합니다. 내 조합이 이미 테이블에 있어도, 그 조합에 붙일 목적으로는 땡큐를 부를 수 없습니다. 손에 든 2장이 있어야 합니다.
임자를 정하는 방식을 바꿨습니다#
여기가 러미 계열 Part 2 의 서술과 갈리는 지점입니다. 그 글에서는 이렇게 정리했습니다.
훌라는 손이 빠른 사람이 임자가 되고, 세븐브리지는 조합 종류에 매겨진 우선순위 규칙이 임자를 정합니다.
이 시리즈의 룰셋은 세븐브리지 쪽을 택합니다. 여럿이 선언하면 버린 사람 다음 자리부터 가까운 사람 이 가져갑니다. 먼저 누른 순서가 아닙니다.
오프라인 훌라의 “손이 빠른 사람” 규칙을 그대로 옮기면, 온라인에서는 네트워크 지연이 임자를 정합니다. 같은 판단을 같은 순간에 내린 두 사람 중 회선이 좋은 쪽이 이깁니다. 게임의 실력 요소가 아닌 것이 결과를 가르는 셈입니다. 봇이 끼면 문제가 더 노골적입니다. 봇의 반응 속도는 서버가 임의로 정하는 값이라, 반응 속도 규칙을 쓰는 순간 봇을 얼마나 굼뜨게 만들지가 곧 밸런싱 손잡이 가 되어 버립니다.
좌석 순서로 정하면 이 문제가 통째로 사라집니다. 창이 닫힌 뒤 선언자 목록을 좌석 순서로 정렬해 앞선 사람에게 주면 끝입니다. 판정이 결정적이므로 재현도 되고 테스트도 됩니다.
flowchart LR
D["좌석 2<br/>버림"]:::src --> P1["좌석 3<br/>선언"]
P1 --> P2["좌석 4<br/>선언"]
P2 --> P3["좌석 5<br/>선언"]
P3 --> P4["좌석 1<br/>선언"]
classDef src fill:#D3D3D3,color:#000000
style P1 fill:#90EE90,color:#000000
style P2 fill:#FF9999,color:#000000
style P3 fill:#FF9999,color:#000000
style P4 fill:#FF9999,color:#000000
좌석 2 가 버렸고 네 명이 모두 선언했다면, 버린 사람 다음 자리인 좌석 3 이 가져갑니다. 누가 먼저 눌렀는지는 보지 않습니다.
이 선택에는 대가가 있습니다. 버림패 앞자리에 앉은 사람이 구조적으로 유리해집니다. 대신 그 유리함은 매 판 선이 돌면서 평준화되고, 무엇보다 봇이 사람의 반응 속도와 경쟁하지 않아도 됩니다. 디지털 구현에서는 이쪽이 낫다고 판단했습니다.
4. 스톱 — 판을 멈추는 네 가지 방법#
자기 차례에, 카드를 뽑기 전에 판을 멈출 수 있습니다. 네 가지가 있고, 성격이 완전히 다릅니다.
| 스톱 | 언제 | 조건 | 결과 |
|---|---|---|---|
| 총통 | 자기 첫 턴부터 | 손에 7 넉 장 | 무조건 승리 · 배율 8배 |
| 로우 | 자기 두 번째 턴부터 | 아직 등록하지 않았고 카드합이 기준선 이하 | 무조건 승리 · 배율 4배 |
| 하이 | 자기 두 번째 턴부터 | 아직 등록하지 않았고 카드합이 기준선 이상 | 무조건 승리 · 배율 4배 |
| 일반 스톱 | 자기 턴 | 등록한 뒤 이고 카드합이 기준선 이하 | 점수를 비교 |
기준선은 방을 만들 때 고릅니다. 두 단계가 있고 기본값은 “높음” 입니다.
| 빈도 설정 | 로우 | 하이 | 일반 스톱 |
|---|---|---|---|
| 표준 | 18 이하 | 80 이상 | 10 이하 |
| 높음 (기본) | 22 이하 | 76 이상 | 15 이하 |
앞의 셋과 마지막 하나는 다른 종류입니다#
총통·로우·하이는 확정 승리 입니다. 조건을 갖췄으면 선언하는 순간 이깁니다. 봇 입장에서 이 셋은 판단할 것이 없는 규칙입니다. 자격이 뜨면 선언합니다.
일반 스톱만 이길지 알 수 없습니다. 선언하고 나서 전원의 카드합을 비교하는데, 나보다 낮거나 같은 사람이 하나라도 있으면 실패입니다. 동점도 실패입니다. 실패하면 선언자를 뺀 나머지 중 카드합이 가장 낮은 사람 이 승자가 되고, 선언자는 자기 몫에 더해 다른 패자들이 낼 몫까지 혼자 물게 됩니다. 이것을 스톱박이라고 부릅니다.
카드합 15 이하는 훌라에서 그리 어려운 조건이 아닙니다. 등록을 몇 번 하고 나면 자연스럽게 도달합니다. 그래서 일반 스톱은 “할 수 있으니 한다” 가 아니라 “할 수 있지만 지금 하면 얼마를 벌고 실패하면 얼마를 무는가” 를 재야 하는 결정이 됩니다. Part 5 이후의 hard 봇에서 가장 계산이 까다로운 자리 중 하나입니다.
총통이 8배인 이유도 여기서 나옵니다. 7 넉 장은 그대로 들고 지면 손해가 가장 큰 손패입니다. 뒤에서 볼 세븐박이 장당 배수를 붙이기 때문입니다. 가장 위험한 손패를 즉시 최고 배당으로 바꿔 주는 탈출구 가 총통입니다.
5. 정산 — 순위가 아니라 포인트#
여기가 이 시리즈에서 가장 중요한 절입니다. 봇의 목적 함수가 여기서 정해집니다.
카드값#
A 는 1점, 2~10 은 쓰인 대로, J 는 11, Q 는 12, K 는 13 입니다.
그런데 카드값은 등수를 정할 때만 쓰입니다. 정산 금액의 바탕이 아닙니다.
등수 사다리#
판이 끝나면 진 사람들이 이긴 사람에게 냅니다. 내는 금액은 등수 로 정해집니다. 2등이 1점을 내고, 아래로 갈수록 두 배입니다.
| 인원 | 1등 | 2등 | 3등 | 4등 | 5등 |
|---|---|---|---|---|---|
| 3인 | +3 | -1 | -2 | ||
| 4인 | +7 | -1 | -2 | -4 | |
| 5인 | +15 | -1 | -2 | -4 | -8 |
카드합이 같은 사람들은 모두 아래 등수 로 배정됩니다. 먼저 멈춘 쪽이 이득을 보지 않습니다.
이 구조가 왜 중요한가 하면, 한 등수 차이의 값이 아래로 갈수록 커지기 때문입니다. 4인 게임에서 2등과 3등의 차이는 1점이지만, 3등과 4등의 차이는 2점입니다. 꼴찌를 피하는 것이 2등을 노리는 것보다 늘 더 값어치가 있습니다.
배율#
승리 방식에 따라 판 전체에 배율이 곱해집니다.
| 무엇 | 배율 | 언제 |
|---|---|---|
| 일반 승리 | 1배 | 손패를 비웠거나 덱이 떨어졌을 때 |
| 훌라 | 4배 | 그 턴이 시작될 때까지 한 번도 등록하지 않았다가 그 턴에 손패를 비웠을 때 |
| 로우 · 하이 스톱 | 4배 | 위 표 참조 |
| 총통 | 8배 | 위 표 참조 |
훌라 는 이 게임의 이름이 붙은 수입니다. 등록을 한 번도 하지 않고 버티다가 한 턴에 손패 일곱 장을 통째로 털어 내는 것입니다. 성공하면 4배지만, 실패하면 등록을 한 번도 못 한 채 판이 끝나는 것이므로 뒤에 나올 미등록박을 정면으로 맞습니다. 가장 큰 배당과 가장 큰 벌이 같은 선택지에 붙어 있습니다.
개인 박 — 곱해집니다#
배율이 판 전체에 붙는다면, 박은 개인에게 붙습니다.
| 개인 박 | 배율 | 언제 |
|---|---|---|
| 미등록박 | 최하위로 자리를 옮긴 뒤 2배 | 한 번도 등록하지 못한 채 판이 끝났을 때 |
| 세븐박 | 7 한 장마다 2배 | 손에 7 을 들고 판이 끝났을 때 |
미등록박은 배율보다 먼저 자리를 옮깁니다. 카드합이 아무리 낮아도 등록을 한 번도 못 했으면 맨 아랫자리로 내려간 뒤 거기에 2배가 붙습니다. 여러 명이면 모두 같은 맨 아랫자리에 앉습니다.
그리고 두 박은 겹쳐서 곱해집니다.
flowchart LR
A["4인 게임<br/>미등록 + 7 두 장"] --> B["4등 배정<br/>-4점"]
B --> C["미등록박<br/>× 2"]
C --> D["세븐박<br/>× 2 × 2"]
D --> E["-32점"]
style A fill:#87CEEB,color:#000000
style B fill:#FFD700,color:#000000
style C fill:#FF9999,color:#000000
style D fill:#FF9999,color:#000000
style E fill:#FF6666,color:#000000
4인 게임에서 등록을 못 했고 7 이 두 장 남았다면 2 × 2 × 2 = 8 배입니다. 4등 기본 -4점이 -32점 이 됩니다. 1등이 잘해서 버는 +7점의 네 배가 넘는 손실이 한 사람에게서 나옵니다.
그리고 이 8배를 피하는 방법이 하나 있습니다. 7 한 장을 내려놓으면 두 박을 한 번에 벗습니다. 등록을 했으니 미등록박이 사라지고, 7 이 한 장 줄었으니 세븐박도 절반이 됩니다. 카드 한 장을 내려놓는 행동의 값이 상황에 따라 이렇게까지 벌어집니다.
땡큐 독박#
하나 더 있습니다. 땡큐로 가져간 카드로 상대가 훌라 를 내면, 그 카드를 버린 사람이 독박 으로 모두의 몫을 떠안습니다.
즉 버리는 카드 한 장의 위험이 자기 손패 손익으로 끝나지 않습니다. 아무 생각 없이 던진 카드가 상대의 4배 훌라를 완성시키면, 그 판의 손실을 혼자 다 뭅니다. 판을 여는 첫 버림패만은 버린 사람이 없으므로 예외입니다.
6. 이 룰셋이 봇 설계에 뜻하는 것#
정리하면 이렇습니다.
첫째, 최적화 대상이 “순위” 가 아닙니다. 달무티와 렉시오 시리즈에서 봇의 목적 함수는 판 단위 평균 순위였습니다. 훌라는 그렇게 잡을 수 없습니다. 등수 사다리가 등비수열이고 그 위에 배율과 박이 곱해지므로, 더 자주 이기고도 누적 포인트가 마이너스인 봇 이 나올 수 있습니다. 3등을 자주 하는 봇이 가끔 -32점을 무는 봇보다 낫습니다. 목적 함수는 고정 판수 매치의 기대 누적 포인트 여야 합니다.
둘째, 이 게임에는 “안전한 기본 수” 가 없습니다. 뽑고 등록하고 버리는 것만 반복해도 판은 굴러가지만, 그 봇은 훌라도 스톱도 땡큐도 쓰지 않으면서 자기가 버린 카드로 남의 독박을 만들어 줍니다. 최소한의 봇과 제대로 된 봇의 거리가 다른 게임보다 멉니다.
셋째, 한 장 차이가 배수로 증폭됩니다. 7 한 장을 내려놓느냐 쥐고 있느냐가 미등록박·세븐박·훌라 자격·붙이기 자격·상대 발판 공개를 한꺼번에 뒤집습니다. 카드 한 장을 놓는 결정이 다섯 가지 결과에 동시에 걸리는 게임은 흔치 않습니다.
Part 2 에서는 이 판 위에 봇을 올리기 전에 경계를 긋겠습니다. 봇이 무엇을 봐도 되는가, 그리고 봇과 게임 서버 사이의 계약을 어떤 모양으로 잡아야 규칙이 두 곳으로 갈라지지 않는가 하는 이야기입니다.
시리즈 목록#
- 훌라 CPU 플레이어 만들기 Part 1: 룰북이 없는 게임의 룰을 정한다 (이 글)
- 훌라 CPU 플레이어 만들기 Part 2: 봇이 봐도 되는 것
- 훌라 CPU 플레이어 만들기 Part 3: 규칙 다섯 줄짜리 easy 봇
- 훌라 CPU 플레이어 만들기 Part 4: easy 봇이 보지 못하는 여덟 자리
- 훌라 CPU 플레이어 만들기 Part 5: 한 턴을 통째로 그려 보는 hard 봇
- 훌라 CPU 플레이어 만들기 Part 6: 남의 차례에 끼어들고 판을 접는 판단
- 훌라 CPU 플레이어 만들기 Part 7: 저울의 추를 하나씩 빼 보니
- 훌라 CPU 플레이어 만들기 Part 8: 처음 보는 판에서 재다
References#
- John McLeod, Hoola — 훌라의 룰과 세븐브리지 관련 서술
- 러미 계열 게임 Part 2: 대표 게임 다섯 가지
- 달무티 CPU 플레이어 만들기 Part 1: 규칙 기반 easy 봇
- 렉시오 CPU 플레이어 만들기 Part 1: 타일 하나를 정수 하나로