태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

티스토리 툴바

BLOG main image
gigony@지메일.com
분류 전체보기 (39)
생활 (29)
프로그램 (8)
연구 (1)
프로그래밍 (1)
SpringWidgets
Gigony\'s Buzz
??? ??
17,018 Visitors up to today!
Today 6 hit, Yesterday 18 hit
2009/09/08 00:33
저랑 비슷한걸 해보신 분이 있어서 관심있게 보다가 저도 포스팅 해봅니다^^

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

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

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

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

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






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



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

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


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

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



저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback Address :: http://gigony.tistory.com/trackback/43 관련글 쓰기
| 2009/09/24 02:50 | PERMALINK | EDIT/DEL | REPLY
비밀댓글입니다
기고니 | 2009/09/24 10:24 | PERMALINK | EDIT/DEL
구현과 관련된 질문은 사양하겠습니다.
죄송합니다.
| 2009/11/18 05:30 | PERMALINK | EDIT/DEL | REPLY
비밀댓글입니다
기고니 | 2009/11/18 14:17 | PERMALINK | EDIT/DEL
사정은 잘 알겠지만.
지금까지 계속 이야기 해 왔듯이 드릴 생각이 없습니다.
무엇보다 이 프로그램을 가지시려는 이유가 별로 납득이 안되네요.
테트리스를 잘 하고 싶으면 노력해서 잘 할 생각을 해야 하는것 아닌가요?
제가 프로그램 드린다고 실력이 느는것도 아니지 않습니까?
단지 다른 사람이 자동 프로그램 써서 잘 하는게 부러워서 그러는건 아니신지요?
그럼 그 자동 프로그램이 시중에 떠돌아 다닌다면 그걸 사시는게 더 빠를 것 같다는 생각이 듭니다.
제 마음에는 변함이 없으니 괜한 수고 하지 않으셨으면 좋겠습니다.
naggingmachine | 2009/11/18 22:40 | PERMALINK | EDIT/DEL | REPLY
기고니는 흥이나고 학생들은 죽어나고.. ㅋㅋ
기고니 | 2009/11/18 23:00 | PERMALINK | EDIT/DEL
ㅎㅎ 학생들도 재미있을거예요
| 2009/11/21 16:50 | PERMALINK | EDIT/DEL | REPLY
비밀댓글입니다
기고니 | 2009/11/22 00:04 | PERMALINK | EDIT/DEL
이번에 테트리스가 업데이트 되면서 현재 제 프로그램은 동작하지 않네요. 현재 업데이트된 프로그램에 맞게 고치는데 쏟을 시간도 없구요.
| 2009/11/23 11:53 | PERMALINK | EDIT/DEL | REPLY
비밀댓글입니다
기고니 | 2009/11/23 12:43 | PERMALINK | EDIT/DEL
현재에 맞게 고칠 수 있지만 안고치고 있는 것이고, 드릴 생각이 없습니다.
글을 길게 적으셔서 자꾸 미안한 마음 들게 하시네요.
죄송하지만 자꾸 저에게 그렇게 부탁하셔도 소용이 없으실테니 다른 방법을 찾아보시는게 좋을거란 생각이 듭니다.
그럼 안녕히 계세요.
| 2009/11/24 05:15 | PERMALINK | EDIT/DEL | REPLY
비밀댓글입니다
Agi | 2009/11/25 22:16 | PERMALINK | EDIT/DEL | REPLY
후배가 PS플젝을 하길래 검색해봤는데 바로 뜨네요ㅋ

다음학기에도 이거 할까요??ㅋㅋ
기고니 | 2009/11/26 02:08 | PERMALINK | EDIT/DEL
전 이번 학기를 끝으로 PS과목 조교를 마치는지라 다음 학기에는 어떻게 될 지 잘 모르겠네요^^
다음 PS수업할 때 조교장과 조교들이 알아서 결정 하겠죠. 제가 서버 소스코드를 가지고 있으니 필요하면 요청하지 않을까요?(아니면 이번학기 끝나고 소스코드도 넘길 수도 있구요)
루시엘 | 2010/08/01 17:42 | PERMALINK | EDIT/DEL | REPLY
저도 호기심에 여쭈어 볼게 있는데,

캡쳐방식 이미지 프로세싱으로 하셨는지 아니면 메모리 덤프로 데이터 가져오셔서 하셨는지 궁금하네요 ^^
속도에 대한 호기심이 생겨서요..

전자는 상당히 느릴텐데 저런 속도가 구현이 될까 하는 궁금증이 생기네요 ^^
기고니 | 2010/08/11 10:07 | PERMALINK | EDIT/DEL
답변이 늦었네요ㅜㅜ
캡쳐방식으로 구현하였습니다.
이미지 프로세싱을 줄이기 위한 꼼수를 써서(블록색깔을 단색으로 만들어버리기^^; ) 캡춰한 뒤에 특정 픽셀의 색깔정보만 가져왔기 때문에
시간이 거의 걸리지 않았어요.
메모리 덤프하려면 해킹 차단기도 우회해야하고 쉽진 않아보이네요^^
답변이 되었나요?
루시엘 | 2010/08/11 20:09 | PERMALINK | EDIT/DEL | REPLY
저도 심심해서 인공지능을 만들고 있는데요, 이미지 프로세싱일거라 짐작은 했지만
정말 잘만드셧네요;;

그런데 현재 작동안하신다니.. 저도 고민에 빠져있답니다.

이미지 프로세싱으로 보드 맵 구성하고 스크립트 내장해서 넘겨서 인공지능 구현하려는데..

키보드가 =_= 드라이버를 써도 안먹네요 먹긴하는데 잘 안먹어요

키보드 레이아웃을 다르게 하는건지 =_= 아 삽질중에 있답니다 ㅋ;

키보드 드라이버와 스니핑으로 보면 약간 이상한 점도 있고, 레이아웃 드라이버를 먼가 따로 쓰는건지. 음.. ㅠㅠ

만약 찾아낸다면 답글을 다시 남기겠습니다. ㅋ;

아참

블럭색을 단색으로 만든신건 리소스를 수정하신건지

아니면 detour같은 걸로 다엑 후킹으로 하셨는지 ^^ 궁금해용 ;
기고니 | 2010/08/21 11:44 | PERMALINK | EDIT/DEL
테트리스가 초기 UI와 지금 UI가 다르잖아요? 그래서 좌표만 살짝 바꿔주면 동작하긴 할텐데.. 호기심이 줄어들어서 안하고 있어요ㅎ
블럭을 단색으로 만드는 방법은 아이디어만 알려드릴께요. 테트리스 프로그램이 실행될 때, 리소스(파일) 무결성 검사 후와 리소스를 불러들여서 테트리스 창을 띄우기 전에 리소스를 바꿔치기하는 것이구요. 님께선 잘 하시는 것 같으니, 구체적으로 어떻게 할지는 고민해보셨으면 합니다.
재미로만 하는거 맞으시죠? 만드신 프로그램을 퍼트리거나 돈을 목적으로 이용하거나, 대놓고 프로그램으로 나쁜 행동하면 안되는거 아시죠? 그럼 수고하세용~:)
머떨이 | 2010/08/14 17:09 | PERMALINK | EDIT/DEL | REPLY
당신은 진정한 고수 ㅎㅎ 멋져용. 잘보고 갑니다.
테트리스 c언어로 만드는데 머리 뽀개지겠삼 ㅎㅎ
저런 고지는 언제 가남 ㅜ.ㅜ

근데 저 위의 테트리스를 왜 인공지능이라고 부르죠?
단지 오토 프로그램이라고 해야 맞잖아요?
기고니 | 2010/08/21 11:46 | PERMALINK | EDIT/DEL
어쨌거나 결국은 사람대신 자동으로 해주는거니 '오토 프로그램'의 범주에 들어간다고 할 수 있겠네요:) 하지만 인공지능이라고 부를 수 있는 요소도 있다고 봐요. 자동으로 동작하도록 하려면 화면상에 보여지는 테트리스 블록을 '인식'할 수 있어야 하고,현재 상황에서 가능한 수많은 선택들 중에서 최선의 방법을 '탐색'하여야 합니다. 특히 이 프로그램에서는 '탐색'하는 과정에서 효과적이고 효율적인 알고리즘이 필요하고요. 패턴을 인식하거나 상태공간을 탐색하는 방법들이 인공지능 분야에서 사용되는 기법들을 이용하기 때문에( http://www.aistudy.co.kr/heuristic/state_space.htm ) 인공지능이라고도 불릴 수 있다고 봅니다. 단순하게 생각해서, 이 테트리스 프로그램이 사람을 흉내내서 비슷하게 행동하도록 한것이니 인공지능이라 할 수 있지않을까요?ㅎ
루시엘 | 2010/08/14 20:48 | PERMALINK | EDIT/DEL | REPLY
휴 키보드 입력을 해결했답니다.

다이렉트인풋 후킹하니 되네요 한게임은 getdevicestate를 사용해서 폴링방식으로 하는가봐요..

키보드 속도 때문이겠지만 너무 빨리 입력하면 썡하도록 만든듯 해요 ㅋㅋ 그래도 다이렉트인풋 후킹을 통해서 해서 키보드 입력이먹거나 하진 않을 듯 해요 정확도는 굿일 듯 합니다. ^^

혹시 키보드 모듈 필요하시면 말씀하세용 ^^ 허접하지만 보내드릴게용
기고니 | 2010/08/21 11:32 | PERMALINK | EDIT/DEL
예~ 말씀하신대로 키보드가 눌러진 상태를 알아내서 동작하는 방식이예요. 게임이 다들 그런거 같죠?ㅎ 그래서 메시지를 통한 키보드 입력이 동작하질 않아요. 다이렉트인풋 후킹까지 하셨다니 대단하시네요:) 필요한 상황이 생기면 연락드릴께요ㅋ. 후킹까지 필요없이 간단히 구현하는 방법으로는 창을 활성화 상태로 만든다음에 SendInput 함수를 이용해서 키보드 입력을 시뮬레이션 해주면 됩니다.(키보드 누르기-살짝 딜레이(게임이 키보드 상태를 알아낼수있도록)-키보드 떼기). 인공지능 구현되면 구경시켜주세요^^
루시엘 | 2010/08/21 18:15 | PERMALINK | EDIT/DEL | REPLY
넵 지금은 테트리스 실행 할때가 아니라 최초 방 입장시에 블럭 이미지를 읽어들이네요
CreateFileW 후킹해서 저도 바꿔보았답니다.;

SendInput도 제가 못해서 그러는지 몰라도 지금 이상하게도 안먹네요, 다른 창은 다 먹는데 =_=

그래서 다엑인풋을 후킹했답니다;

만들어지면 보여드릴게요 ^^
기고니 | 2010/08/22 03:14 | PERMALINK | EDIT/DEL
저보다 더 나으신걸요?^^ 만들면 구경시켜주세요ㅎㅎ
루시엘 | 2010/08/24 02:29 | PERMALINK | EDIT/DEL | REPLY
낫기는요 ;; 허접하지요

인공지능 대전 보니까 와우 소리밖에 안나와요 대단하세용!~

화이팅입니다 ~!
기고니 | 2010/08/25 03:00 | PERMALINK | EDIT/DEL
감사해요^^ 루시엘 님도 화이팅!
Name
Password
Homepage
Secret