본문 바로가기

Program/My program

한게임 테트리스 인공지능(AI)을 얼마나 잘 구현할 수 있을까?

저랑 비슷한걸 해보신 분이 있어서 관심있게 보다가 저도 포스팅 해봅니다^^

전 지금 소프트웨어 엔지니어링, 그 중에서 테스팅 분야를 연구하고 있지만
원래는 인공지능에 관심이 많았습니다(취미로서).
그래서 먼가를 자동으로 해주는 도구를 만드는 것을 좋아하고요.

예전엔 넷마블 테트리스를 자동으로 해주는(다른 말로 'XX오토'라고 이야기하는...)
프로그램을 만들어서 '컴퓨터가 얼마나 사람보다 잘 할 수 있을까?'에 대한 궁금증을
해소해 보려 하였고, 그 질문에 대해서'일반적인 컴퓨터를 이용해서는 동등한 속도로 블록을
쌓는다고 하였을 때 아주 잘하는 사람(일명 테트리스 신)을 이기기는 힘들다'라는 결론을 내렸었습니다.
(그 당시 제 컴이 조금 꾸지긴 했죠)

최근엔 한게임 테트리스가 다시 서비스를 하게 되어서 '테트리스 1등하는 사람보다 더 잘하는 알고리즘을
만들 수 있을까?'라는 호기심이 생겼더랬습니다.
물론 키보드 입력 속도를 많이 빠르게 만들면 이길수야 있겠죠.
하지만 제가 원하는건 잘하는 사람과 비슷한(혹은 조금 더 빠른) 속도로 쌓으면서 사람처럼 플레이를
하는 것이었습니다.
그래서 예전에 짰던 소스코드를 참고하여 한게임 테트리스에 동작하도록 만들기 위해 얼마 간의 시간을
투자했었는데요...
한게임 테트리스와 같은 대전 테트리스는 상황에 따른 전략적인 요소(3줄 비우고 쌓기 등)라던가,
컴퓨터 프로그램으로 구현하기 까다로운 컨트롤(T스핀에 의한 공격, 끼워넣기) 등으로 인하여
역시나 이번에도 '정말 잘하는 사람에게는 이기기가 어렵다'라는 생각을 하였습니다.
하지만 그럼에도 불구하고 실제로 사람들이랑 대전을 해보니
'일반적인 사람들, 혹은 테트리스 계급중의 초보(?)들은 이길 수 있겠다' 라는 생각을 하게 되네요.

약간의 꼼수를 써서 노가다적인 이미지 프로세싱을 막아 제 프로그램이
잘 동작할 수 있도록 하였구요.(그래서 저에게 보이는 블록이 단순합니다. 어떻게 했는지는 묻지 마세요..ㅜㅜ;)
위에 적은 것과 같이, 호기심 해결을 위한, 개인적인 만족(?)을 목적으로 만든 지라 프로그램은 저 혼자만 가지고 있고, 프로그램 사용으로 인한 부적절한 계급 상승을 막기 위해 자유서버에서 사용하였습니다. 하지만 테스트하면서 프로그램 동작 속도를 올린상태에서 생각 없이 싱글모드에서 돌렸다가 40라인을 30초에 없앴던 적이 있어서  40라인 점수는 제 실력과 상관없이 높아져 있는 상태네요ㅜㅜ
(제 실제 계급은 고수와 영웅을 왔다 갔다 하고 있다는..;)

아래는 캡쳐한 동영상입니다.
방에 계시는 분들이 실제 계급은 다들 높으신것 같습니다.
속도를 적절히 조절하고 쌓는 방식이 사람이랑 비슷해서 그런지 별로 이상하게 보시진 않더라구요.
그리고 이 방에 있던 분들도 몸풀기 삼아 자유채널에 입장하신듯 하여 미안한 마음이 조금은 줄어들었더랬습니다.
이긴 게임 중 몇가지만 올립니다ㅎㅎ;






비교적 잘하는 편이죠?
그럼에도 불구하고 아래 동영상과 같이 플레이 하는 사람이 있기에 진짜 고수에게 이기기엔 한계가 있습니다.



이 분은 좀 잘하시는 분이네요^^ (기존 동영상 링크가 깨져서 다른 분 것으로 바꾸었습니다. 기존 동영상이 훨씬 잘하시는 분이었는데 아쉽...ㅜㅜ/2009-10-16)

돈이 없어서 '홀드 무제한' 아이템을 살 수 없어서 최대 5번까지만 홀드를 사용하도록 프로그래밍 해 놓았는데요. 홀드 무제한 아이템이 있으면 제 것도 지금보다 더 잘하게 될 것 같군요(그래도 여전히 초고수들에게는 못당하겠지만^^;) /2009-10-16


이번 학기에 '문제해결기법'이라는.. 학부 2학년생을 대상으로 하는 과목에 조교를 맡았습니다.
이 과목 마지막 프로젝트로는 특정 보드게임에 대해서 인공지능을 구현하여 대전하는 것이 있는데요,
지금까지 몇 번 조교를 맡으면서 마지막 프로젝트에 많이 아쉬움이 있었습니다.
그것은 바로 학생들이 한자리에 모여 다른 학생들이 만든 인공지능과 대전을 하는데 musical, visual적인 부분에 있어서 별로 흥이 안났기 때문인데요.
이번 학기가 조교가 끝나면 더이상 조교를 안해도 되고 더이상 할 수도 없기에 이번에는 좀 제대로 흥이 나는 게임으로 해보고 싶어서 제대로 서버와 클라이언트를 만들고 '한게임 테트리스'의 룰과 똑같이 하여(T스핀은 빼고; 홀드/콤보등은 넣어서) 대전 테트리스 인공지능을 구현 하도록 해보려고 합니다.
물론 대장조교(?)와 다른 조교들의 동의가 있어야 합니다.
그래서 대장조교에게는 건의를 해 놓은 상태이고,
인공지능 대결에 사용할 서버와 클라이언트를 조금씩 틈나는데로 만들고 있습니다.
보여지는 부분은 DirectX를 사용해서 최대한 실제 한게임 테트리스랑 가깝게 만드려 하고 있습니다.

계획했던대로 된다면 이번 학기는 상당히 흥미로울 것 같네요^^