상세 컨텐츠

본문 제목

테트리스 AI Cold Clear 싱글 소개

본문

이 글에서는 테트리스 AI Cold Clear의 싱글플레이용 프로그램을 소개합니다. 

 

뿌요뿌요 테트리스용 프로그램은 디스코드에서 배포하고 있으며 [디스코드 링크, 계정 필요], 이 글에서 소개 드릴 것은 아래와 같이 썰렁한 단독 프로그램입니다.

 

목차

1. 다운로드 링크

2. 간단한 소개

3. 설정

4. 마무리

 
 

1. 다운로드 링크

Cold Clear의 제작자 MinusKelvin의 GitHub 페이지[GitHub 링크]의 Releases에서 가장 최근 버전을 다운 받아 활용하시면 됩니다.

 

뿌요뿌요 테트리스용 프로그램은 디스코드에서 배포하고 있습니다 [디스코드 링크, 계정 필요].

 

2. 간단한 소개

이전에 비슷한 프로그램인 미사미노(Misamino)를 소개 드린 바 있는데[글 링크], 미사미노는 2013년 이후로는 더 이상 개량이 되지 않아 최고 성능의 AI라고 부르기에는 부족한 상황이 되었습니다.

 

게다가 Misamino는 테트리스 프렌즈 등 라인 클리어 딜레이가 짧은 게임을 상정하고 제작되었기 때문에 한 줄 제거를 상당히 많이 하는 모습을 보여 주는 등 다른 게임에서는 약간 비효율적인 모습을 보여주기도 하였습니다.

 

이런 상황에서 뿌요뿌요 테트리스 스팀판 온라인 대전에 Zetris가 등장하였습니다. 강한 유저들을 차례차례 이기면서 큰 관심을 받았고 프로그램이 향상되면서 사람이 이길 수 없는 정도가 되었습니다.

 

그 이후에 Cold Clear가 나왔습니다. 처음에는 Zetris가 우세했지만 2020년 1월 초 기준으로는 비슷해졌고, 2020. 1. 21. 대전에서는 Cold Clear가 상당히 우세를 점했습니다[대전 영상 유튜브 링크]. 이후에는 Cold Clear가 항상 우세를 점하고 있습니다. 따라서 현재는 Cold Clear가 가장 강한 테트리스라 AI라고 할 수 있습니다.

 

게다가 Cold Clear는 행동 방식이 비교적 사람에 가깝기 때문에 보고 배우기에도 좋다고 생각합니다.

 

3. 설정

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:

 

    spawn_delay: 7

→ 블럭 생성 시간입니다. 단위는 프레임으로, 1초를 60프레임으로 두고 계산합니다. Jstris처럼 바로 나오는 것을 원한다면 0으로 설정합니다. 기본 값은 뿌요뿌요 테트리스 같은 느낌으로 약간의 딜레이가 있습니다.

봇인 경우 다른 딜레이를 0으로 놓고 이걸로 속도를 조정하는 것이 쉽습니다.

 

    line_clear_delay: 35

→ 줄 제거 딜레이입니다. Jstris처럼 바로 제거되는 것을 원하시면 0으로 두시면 됩니다.

 

    delayed_auto_shift: 9

→ 흔히 DAS로 줄여 부르는 수치로, 방향키를 누르고 있으면 자동으로 이동하는 것에 얼마만큼의 딜레이를 둘 것인지를 의미합니다. 쉽게 생각해서 숫자가 작을수록 블럭이 좌우로 쉽게 움직입니다.

 

0으로 두면 게임 하기가 어렵고, 6~8 정도로 두는 것을 추천 드립니다.

 

  auto_repeat_rate: 2

→ 흔히 ARR로 줄여 부르는 수치로, 방향키를 누르고 있으면 자동으로 이동하는 것을 몇 프레임마다 반복할 것인지를 의미합니다. 쉽게 생각하여 0으로 두면, 방향키를 잠깐만 눌러도 벽으로 휙 움직입니다. Jstris 같은 플레이 환경을 원한다면 대개 0으로 두고 플레이합니다.

 

  soft_drop_speed: 2

→ 소프트드랍 키를 눌렀을 때 몇 프레임마다 블럭을 아래로 움직일 것인지를 의미합니다. 쉽게 생각하여 0으로 두면, 소프트 드랍 키를 누르자마자 바닥으로 이동합니다.

 

   lock_delay: 30

→ 미노가 바닥에 접근했을 때 자동으로 설치되는 시간입니다. 0으로 주면 자동 설치가 안 되는 것 같습니다.

 

    gravity: 4500

    max_garbage_add: 10

    move_lock_rule: 15

    garbage_blocking: false

    next_queue_size: 5

→ NEXT의 표시 개수를 설정합니다. 화면의 제한 상 11까지 되는 것 같습니다.

 

• P1을 봇으로 설정할 것인지 여부를 결정

  is_bot: false

→ P1을 봇으로 설정할 것인지의 여부를 결정합니다. [is_bot: true]로 두면 봇이 되고 아래의 봇 설정이 적용됩니다

 

• P1을 봇으로 할 경우의 P1 봇 설정

위에서 is_bot: true로 설정한 경우, 봇의 행동 방식을 결정합니다. 만약 P1을 직접 플레이하고 싶다면 여기를 수정할 필요는 없고 아래 P2의 bot_config를 수정해야 합니다.

  bot_config:

    weights:

→ 봇(AI) 행동의 가중치를 설정합니다. 숫자를 크게 할수록 가중치를 크게 둡니다.

 

      back_to_back: 52

      bumpiness: -24

      bumpiness_sq: -7

      height: -39

      top_half: -150

      top_quarter: -511

      jeopardy: -5

      cavity_cells: -158

      cavity_cells_sq: -7

      overhang_cells: -48

      overhang_cells_sq: 1

      covered_cells: -17

      covered_cells_sq: -1

      tslot:

        - 8

        - 148

        - 192

        - 407

      well_depth: 57

      max_well_depth: 17

      well_column:

        - 20

        - 23

        - 20

        - 50

        - 59

        - 21

        - 59

        - 10

        - -10

        - 24

      b2b_clear: 104

      clear1: -143

      clear2: -100

      clear3: -58

      clear4: 390

      tspin1: 121

      tspin2: 410

      tspin3: 602
      mini_tspin1: -158

      mini_tspin2: -93
     perfect_clear: 999

→ 각 클리어 방식의 가중치입니다. 기본 설정에서는 T스핀 트리플의 가중치를 꽤 크게 두었고, 퍼펙트 클리어를 굉장히 중요시한다는 것을 알 수 있습니다.

 

예를 들어 tspin2: -999로 설정하면 T스핀 더블을 사용할 수 있는 상황에서도 T스핀 더블을 사용하지 않습니다. 하지만 tspin2: -999로 설정하여도 T스핀 더블 형태 자체는 만드는 것을 보아 당장의 우선도에만 영향을 미치고 포석 자체에는 영향을 덜 미치는 것 같습니다.

 

      combo_garbage: 150

      move_time: -3

 

      wasted_t: -152

→ T미노로 T스핀을 안 하고 그냥 쌓기에 사용하는 행위의 가중치입니다. 초기값이 음수인 것에서 알 수 있는 것처럼, 가능하면 T미노로 T스핀을 하는 것을 중시합니다. 

예를 들어 wasted_t: -999로 설정하면 극단적으로 T스핀 지향적인 플레이를 합니다. 다만 T스핀을 지나치게 중시하게 되어 지형을 망치는 경우가 종종 생깁니다. -9999로 설정해 본 결과 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:
→ 사람이 p2를 플레이할 거라면 수정합니다.

    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:

 

    spawn_delay: 7

→ 블럭 생성 시간입니다. 단위는 프레임으로, 1초를 60프레임으로 두고 계산합니다. Jstris처럼 바로 나오는 것을 원한다면 0으로 설정합니다. 기본 값은 뿌요뿌요 테트리스 같은 느낌으로 약간의 딜레이가 있습니다.

봇인 경우 다른 딜레이를 0으로 놓고 이걸로 속도를 조정하는 것이 쉽습니다.

 

    line_clear_delay: 35

→ 줄 제거 딜레이입니다. Jstris처럼 바로 제거되는 것을 원하시면 0으로 두시면 됩니다.

 

    delayed_auto_shift: 9

→ 흔히 DAS로 줄여 부르는 수치로 방향키를 누르고 있으면 자동으로 이동하는 것에 얼마만큼의 딜레이를 둘 것인지를 의미합니다. 쉽게 생각해서 숫자가 작을수록 블럭이 좌우로 쉽게 움직입니다.

 

0으로 두면 게임 하기가 어렵고, 6~8 정도로 두는 것을 추천 드립니다.

 

    auto_repeat_rate: 2

→ 흔히 ARR로 줄여 부르는 수치로,방향키를 누르고 있으면 자동으로 이동하는 것을 몇 프레임마다 반복할 것인지를 의미합니다. 쉽게 생각하여 0으로 두면, 방향키를 잠깐만 눌러도 벽으로 휙 움직입니다. Jstris 같은 플레이 환경을 원한다면 대개 0으로 두고 플레이합니다.

 

    soft_drop_speed: 2

→ 소프트드랍 키를 눌렀을 때 몇 프레임마다 블럭을 아래로 움직일 것인지를 의미합니다. 쉽게 생각하여 0으로 두면, 소프트 드랍 키를 누르자마자 바닥으로 이동합니다.

 

     lock_delay: 30

→ 미노가 바닥에 접근했을 때 자동으로 설치되는 시간입니다. 0으로 주면 자동 설치가 안 되는 것 같습니다.

 

    gravity: 4500
    next_queue_size: 5

→ 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는 기본적으로 봇으로 설정되어 있으므로, 봇의 행동 양식은 여기에서 결정해야 합니다.

  bot_config:

    weights:

→ 봇(AI) 행동의 가중치를 설정합니다. 숫자를 크게 할수록 가중치를 크게 둡니다.

 

      back_to_back: 52

      bumpiness: -24

      bumpiness_sq: -7

      height: -39

      top_half: -150

      top_quarter: -511

      jeopardy: -5

      cavity_cells: -158

      cavity_cells_sq: -7

      overhang_cells: -48

      overhang_cells_sq: 1

      covered_cells: -17

      covered_cells_sq: -1

      tslot:

        - 8

        - 148

        - 192

        - 407

      well_depth: 57

      max_well_depth: 17

      well_column:

        - 20

        - 23

        - 20

        - 50

        - 59

        - 21

        - 59

        - 10

        - -10

        - 24

      b2b_clear: 104

      clear1: -143

      clear2: -100

      clear3: -58

      clear4: 390

      tspin1: 121

      tspin2: 410

      tspin3: 602
      mini_tspin1: -158

      mini_tspin2: -93
     perfect_clear: 999

→ 각 클리어 방식의 가중치입니다. 기본 설정에서는 T스핀 트리플의 가중치를 꽤 크게 두었고, 퍼펙트 클리어를 굉장히 중요시한다는 것을 알 수 있습니다.

예를 들어 tspin2: -999로 설정하면 T스핀 더블을 사용할 수 있는 상황에서도 T스핀 더블을 사용하지 않습니다. 하지만 tspin2: -999로 설정하여도 T스핀 더블 형태 자체는 만드는 것을 보아 당장의 우선도에만 영향을 미치고 포석 자체에는 영향을 덜 미치는 것 같습니다.

 

 

      combo_garbage: 150

      move_time: -3

 

      wasted_t: -152

→ T미노로 T스핀을 안 하고 그냥 쌓기에 사용하는 행위의 가중치입니다. 초기값이 음수인 것에서 알 수 있는 것처럼, 가능하면 T미노로 T스핀을 하는 것을 중시합니다. 

예를 들어 wasted_t: -999로 설정하면 극단적으로 T스핀 지향적인 플레이를 합니다. 다만 T스핀을 지나치게 중시하게 되어 지형을 망치는 경우가 종종 생깁니다. -9999로 설정해 본 결과 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끼리의 경쟁을 보는 것도 좋습니다.

 

양쪽의 가중치를 다르게 두면서 어떤 플레이 방식이 더 좋을지 연구하는 것도 좋을 것입니다.

 

4. 마무리

게임으로서의 편의성은 미사미노에 비해 약간 부족합니다만, 설정을 적당히 하면 일단 대전 자체는 쾌적하게 할 수 있습니다.

 

그리고 보고 배울 점도 많은 AI이니, 영상을 녹화하여 복기용으로 활용하기에도 좋다고 생각합니다.

 

대전 테트리스를 연습하시는 분은 한 번 활용해 보시면 좋겠습니다.

반응형

관련글 더보기