이 글에서는 테트리스 AI Cold Clear의 싱글플레이용 프로그램을 소개합니다.
뿌요뿌요 테트리스용 프로그램은 디스코드에서 배포하고 있으며 [디스코드 링크, 계정 필요], 이 글에서 소개 드릴 것은 아래와 같이 썰렁한 단독 프로그램입니다.
목차
1. 다운로드 링크 2. 간단한 소개 3. 설정 4. 마무리 |
Cold Clear의 제작자 MinusKelvin의 GitHub 페이지[GitHub 링크]의 Releases에서 가장 최근 버전을 다운 받아 활용하시면 됩니다.
뿌요뿌요 테트리스용 프로그램은 디스코드에서 배포하고 있습니다 [디스코드 링크, 계정 필요].
이전에 비슷한 프로그램인 미사미노(Misamino)를 소개 드린 바 있는데[글 링크], 미사미노는 2013년 이후로는 더 이상 개량이 되지 않아 최고 성능의 AI라고 부르기에는 부족한 상황이 되었습니다.
게다가 Misamino는 테트리스 프렌즈 등 라인 클리어 딜레이가 짧은 게임을 상정하고 제작되었기 때문에 한 줄 제거를 상당히 많이 하는 모습을 보여 주는 등 다른 게임에서는 약간 비효율적인 모습을 보여주기도 하였습니다.
이런 상황에서 뿌요뿌요 테트리스 스팀판 온라인 대전에 Zetris가 등장하였습니다. 강한 유저들을 차례차례 이기면서 큰 관심을 받았고 프로그램이 향상되면서 사람이 이길 수 없는 정도가 되었습니다.
그 이후에 Cold Clear가 나왔습니다. 처음에는 Zetris가 우세했지만 2020년 1월 초 기준으로는 비슷해졌고, 2020. 1. 21. 대전에서는 Cold Clear가 상당히 우세를 점했습니다[대전 영상 유튜브 링크]. 이후에는 Cold Clear가 항상 우세를 점하고 있습니다. 따라서 현재는 Cold Clear가 가장 강한 테트리스라 AI라고 할 수 있습니다.
게다가 Cold Clear는 행동 방식이 비교적 사람에 가깝기 때문에 보고 배우기에도 좋다고 생각합니다.
Build 6, v0.1-alpha4.1, 20200326버전 기준으로 설명 드립니다. Build 5 이후로 설정이 P1, P2로 나뉘는 등 변경이 꽤 있었습니다. |
1. [GitHub 링크]에서 cold-clear.exe를 다운 받거나, cold-clear.zip을 다운 받고 압축을 풉니다.
2. cold-clear.exe를 한 번 실행시키고 바로 종료합니다.
3. options.yaml이 생성되었을 것입니다. 이 파일을 메모장으로 엽니다.
4. 설정할 것이 정말 많습니다. 중요한 것만 몇 가지 실펴 보겠습니다.
● P1 설정 방법
모두 설명 드리지는 않고, 중요한 것만 골라서 설명을 드리겠습니다.
• P1 입력 설정
입력 설정입니다. 키보드이기 때문에 주로 키보드로 플레이하겠지만, 게임패드를 이용할 수도 있습니다.
Misamino의 경우 프로그램 내에서 쉽게 수정할 수 있었지만 Cold Clear는 직접 수정해야 합니다. options.yaml의 controls 부분이나 gamepad 부분을 수정해야 합니다.
키 이름: [링크] 게임 패드 버튼 이름: [링크] 게임 패드 축 이름: [링크] |
p1: controls: keyboard: left: Left right: Right rotate_left: Z rotate_right: X hard_drop: Space soft_drop: Down hold: C gamepad: left: Button: DPadLeft right: Button: DPadRight rotate_left: Button: South rotate_right: Button: East hard_drop: Button: DPadUp soft_drop: Button: DPadDown hold: Button: LeftTrigger |
• P1 게임 설정
game:
→ 블럭 생성 시간입니다. 단위는 프레임으로, 1초를 60프레임으로 두고 계산합니다. Jstris처럼 바로 나오는 것을 원한다면 0으로 설정합니다. 기본 값은 뿌요뿌요 테트리스 같은 느낌으로 약간의 딜레이가 있습니다.
→ 줄 제거 딜레이입니다. Jstris처럼 바로 제거되는 것을 원하시면 0으로 두시면 됩니다.
→ 흔히 DAS로 줄여 부르는 수치로, 방향키를 누르고 있으면 자동으로 이동하는 것에 얼마만큼의 딜레이를 둘 것인지를 의미합니다. 쉽게 생각해서 숫자가 작을수록 블럭이 좌우로 쉽게 움직입니다.
0으로 두면 게임 하기가 어렵고, 6~8 정도로 두는 것을 추천 드립니다.
→ 흔히 ARR로 줄여 부르는 수치로, 방향키를 누르고 있으면 자동으로 이동하는 것을 몇 프레임마다 반복할 것인지를 의미합니다. 쉽게 생각하여 0으로 두면, 방향키를 잠깐만 눌러도 벽으로 휙 움직입니다. Jstris 같은 플레이 환경을 원한다면 대개 0으로 두고 플레이합니다.
→ 소프트드랍 키를 눌렀을 때 몇 프레임마다 블럭을 아래로 움직일 것인지를 의미합니다. 쉽게 생각하여 0으로 두면, 소프트 드랍 키를 누르자마자 바닥으로 이동합니다.
→ 미노가 바닥에 접근했을 때 자동으로 설치되는 시간입니다. 0으로 주면 자동 설치가 안 되는 것 같습니다.
gravity: 4500 max_garbage_add: 10 move_lock_rule: 15 garbage_blocking: false
→ NEXT의 표시 개수를 설정합니다. 화면의 제한 상 11까지 되는 것 같습니다. |
• P1을 봇으로 설정할 것인지 여부를 결정
is_bot: false |
→ P1을 봇으로 설정할 것인지의 여부를 결정합니다. [is_bot: true]로 두면 봇이 되고 아래의 봇 설정이 적용됩니다
• P1을 봇으로 할 경우의 P1 봇 설정
위에서 is_bot: true로 설정한 경우, 봇의 행동 방식을 결정합니다. 만약 P1을 직접 플레이하고 싶다면 여기를 수정할 필요는 없고 아래 P2의 bot_config를 수정해야 합니다.
→ 봇(AI) 행동의 가중치를 설정합니다. 숫자를 크게 할수록 가중치를 크게 둡니다.
→ 각 클리어 방식의 가중치입니다. 기본 설정에서는 T스핀 트리플의 가중치를 꽤 크게 두었고, 퍼펙트 클리어를 굉장히 중요시한다는 것을 알 수 있습니다.
예를 들어 tspin2: -999로 설정하면 T스핀 더블을 사용할 수 있는 상황에서도 T스핀 더블을 사용하지 않습니다. 하지만 tspin2: -999로 설정하여도 T스핀 더블 형태 자체는 만드는 것을 보아 당장의 우선도에만 영향을 미치고 포석 자체에는 영향을 덜 미치는 것 같습니다.
combo_garbage: 150 move_time: -3
→ T미노로 T스핀을 안 하고 그냥 쌓기에 사용하는 행위의 가중치입니다. 초기값이 음수인 것에서 알 수 있는 것처럼, 가능하면 T미노로 T스핀을 하는 것을 중시합니다.
use_bag: true sub_name: ~ |
• P1 기타 설정
options: mode: ZeroG use_hold: true speculate: true min_nodes: 0 max_nodes: 4000000000 threads: 1 |
● P2 설정 방법
p2: controls: keyboard: left: Left right: Right rotate_left: Z rotate_right: X hard_drop: Space soft_drop: Down hold: C gamepad: left: Button: DPadLeft right: Button: DPadRight rotate_left: Button: South rotate_right: Button: East hard_drop: Button: DPadUp soft_drop: Button: DPadDown hold: Button: LeftTrigger |
• P2 게임 설정
game:
→ 블럭 생성 시간입니다. 단위는 프레임으로, 1초를 60프레임으로 두고 계산합니다. Jstris처럼 바로 나오는 것을 원한다면 0으로 설정합니다. 기본 값은 뿌요뿌요 테트리스 같은 느낌으로 약간의 딜레이가 있습니다.
→ 줄 제거 딜레이입니다. Jstris처럼 바로 제거되는 것을 원하시면 0으로 두시면 됩니다.
→ 흔히 DAS로 줄여 부르는 수치로 방향키를 누르고 있으면 자동으로 이동하는 것에 얼마만큼의 딜레이를 둘 것인지를 의미합니다. 쉽게 생각해서 숫자가 작을수록 블럭이 좌우로 쉽게 움직입니다.
0으로 두면 게임 하기가 어렵고, 6~8 정도로 두는 것을 추천 드립니다.
→ 흔히 ARR로 줄여 부르는 수치로,방향키를 누르고 있으면 자동으로 이동하는 것을 몇 프레임마다 반복할 것인지를 의미합니다. 쉽게 생각하여 0으로 두면, 방향키를 잠깐만 눌러도 벽으로 휙 움직입니다. Jstris 같은 플레이 환경을 원한다면 대개 0으로 두고 플레이합니다.
→ 소프트드랍 키를 눌렀을 때 몇 프레임마다 블럭을 아래로 움직일 것인지를 의미합니다. 쉽게 생각하여 0으로 두면, 소프트 드랍 키를 누르자마자 바닥으로 이동합니다.
→ 미노가 바닥에 접근했을 때 자동으로 설치되는 시간입니다. 0으로 주면 자동 설치가 안 되는 것 같습니다.
→ NEXT의 표시 개수를 설정합니다. 화면의 제한 상 11까지 되는 것 같습니다.
max_garbage_add: 10 move_lock_rule: 15 garbage_blocking: false |
is_bot: true |
→ P2를 봇(AI)로 설정할 것인지 여부를 결정합니다 is_bot: false로 설정하면 사람이 플레이하고, is_bot: true로 설정하면 봇이 플레이합니다.
p1과 p2의 is_bot 부분을 모두 true로 하면 봇끼리 게임을 합니다.
• P2를 봇으로 할 경우의 P2 봇 설정
P2는 기본적으로 봇으로 설정되어 있으므로, 봇의 행동 양식은 여기에서 결정해야 합니다.
→ 봇(AI) 행동의 가중치를 설정합니다. 숫자를 크게 할수록 가중치를 크게 둡니다.
→ 각 클리어 방식의 가중치입니다. 기본 설정에서는 T스핀 트리플의 가중치를 꽤 크게 두었고, 퍼펙트 클리어를 굉장히 중요시한다는 것을 알 수 있습니다.
combo_garbage: 150 move_time: -3
→ T미노로 T스핀을 안 하고 그냥 쌓기에 사용하는 행위의 가중치입니다. 초기값이 음수인 것에서 알 수 있는 것처럼, 가능하면 T미노로 T스핀을 하는 것을 중시합니다.
use_bag: true sub_name: ~ |
• p2 기타 설정
options: mode: ZeroG use_hold: true speculate: true min_nodes: 0 max_nodes: 4000000000 threads: 1 |
취향에 따라 여러 가지로 수정하면서 플레이하면 좋을 것 같습니다. p1, p2의 is_bot을 모두 true로 설정하여 bot끼리의 경쟁을 보는 것도 좋습니다.
양쪽의 가중치를 다르게 두면서 어떤 플레이 방식이 더 좋을지 연구하는 것도 좋을 것입니다.
게임으로서의 편의성은 미사미노에 비해 약간 부족합니다만, 설정을 적당히 하면 일단 대전 자체는 쾌적하게 할 수 있습니다.
그리고 보고 배울 점도 많은 AI이니, 영상을 녹화하여 복기용으로 활용하기에도 좋다고 생각합니다.
대전 테트리스를 연습하시는 분은 한 번 활용해 보시면 좋겠습니다.