별로 대단한 건 아니고 짤만 봐도 대충 짐작이 가겠지만 그냥 보드게임임. c++로 만든거고 현재 여기에 올라가 있음.
https://github.com/attltb/NimTetris
해보려면 그냥 릴리즈 다운받아서 해보면 된다. 문제는 윈도우밖에 지원안함.
나중엔 달라질수도 있는데 지금은 내가 GUI를 윈도우밖에 다룰 줄 몰라서 어쩔 수 없음.
간단히 설명하자면 그냥 두 플레이어가 번갈아가면서 10x10사이즈의 보드에다가 테트리스 블록을 하나씩 놓는 게임임.
더 이상 블록 놓을 자리가 없으면 게임이 끝나고 이 때 마지막 블록을 놓은 사람이 지는거.
왜 마지막 블록을 놓은 사람이 지는 거로 했냐면 여기에는 스프라그-그런디 정리(Sprague-Grundy Theorem)라는 심오한 이유가 있다.
https://en.wikipedia.org/wiki/Sprague–Grundy_theorem
대충 요약하자면 플레이어가 승리조건을 공유하는 이런 류의 2인 게임은
마지막에 플레이한 사람이 이기면 다 간단한 한 줄짜리 Nim(https://en.wikipedia.org/wiki/Nim) 게임으로 환원시킬 수 있다는 정리다.
이 경우 게임이 너무 간단해지기 때문에 대부분 이런 류의 게임은 마지막에 플레이한 사람이 지는 룰로 정하는 게 거의 국룰이라고 보면 됨.
원본인 Nim도 그래서 마지막에 플레이한 사람이 지는 룰이 표준.
하여튼 컨셉이 특이할 뿐이지 딱히 만들기 힘들 이유도 없고 포트폴리오가 될지 말지도 애매한 물건인데
그래도 이게 나한테는 프로그래밍을 시작하게 한 직접적인 계기였음.
내가 이 게임을 생각해낸게 고딩때인데 사실상 이거 만들어보려고 독학으로 코딩 배운거나 다름없거든.
신기한건 그 당시 나는 스프라그-그런디고 나발이고 아무것도 모르는 상태였는데
왠지 마지막에 플레이한 사람이 이기게 하면 게임이 너무 단순해질 것 같아서 룰을 지금처럼 정함. 뭐 이런건 몇 판만 스스로 해보면 감이 오니까.
이 게임이 생각보다 깊이가 있다.
바둑에서 축장문 모르는 사람이 이길 수가 없듯이 이 게임도 나름의 전술이 있어서 그걸 모르는 사람이 거의 이길 수가 없는 구조임.
https://github.com/attltb/NimTetris/blob/main/Strategy.kor.md
이거 읽어보면 생각보다 신박하고 재미진 게임이라는 걸 알 수 있을 거다.
혼자만 승리공식 알 때 모르는 사람 능욕하는 재미가 꽤나 쏠쏠하며 만약 둘 다 승리공식을 알게 되면 그때부터는 아주 치열한 능지게임이 됨.
그러나 이 게임의 최대 포인트는 바로 내장된 AI라고 할 수 있겠다.
https://github.com/attltb/NimTetris/blob/main/AI.kor.md
마지막에 플레이한 사람이 이기는 룰이면 그냥 스프라그-그런디 정리 쓰면 되지만 이 게임은 그렇지 않기 때문에 다른 방법이 필요한데,
여기서는 최적화 정보 집합이라는 걸 이용해서 구현함.
그냥 내가 만든 단어고 뭘 어떻게 했는지는 들어가 보면 알거.
성능이 엄청나서 굳이 AI 레벨을 최고난이도까지 안올리고 Lv 5정도까지만 올려도 내가 쉽게 이기지 못할 정도의 실력을 보여줌.
사실 이 게임에서 다른 부분이야 아무나 만들 수 있는 거고 이 AI 구현한게 자랑.
내가 논문쓴 알고리즘도 이 게임의 AI 최적화하던 중 생각해낸 거였고 해서 여러모로 내 입장에서는 애착이 가는 프로젝트일 수밖에 없는데,
하도 오래 전에 시작한거다 보니 코드보여주기 쪽팔려서 지금까지 깃헙에 못 올렸다는 슬픈 사연이 있다.
최대한 리팩토링해서 지금 올리는 거.
물론 지금 코드도 조잡하긴 한데 그건 그냥 내가 좆밥이라 그렇다고 보고 넘겨라.
그리고 이걸 공개하지 못했던 가장 큰 이유중 하나인 조잡하기 짝이 없는 디자인도 산뜻한 투명룩으로 바꿈.
블록들 전부 내가 디자인한 거고 어디서 가져온거 아님.
역대 테트리스류 게임에 나오는 블록치고 내꺼만큼 이쁜거 아직 못봤다. 디자인 센스 ㅇㅈ?
하여간 열심히 만들었고 특히 디자인 저거는 거의 내가 2달이 넘는 시간을 꼬라박고 나온 결과물임. 들어와서 별좀 많이 눌러줬으면 함.
https://github.com/attltb/NimTetris
ㅎㅎ
다인용이면 서버도 있는거? 서버는 소켓이야?
그냥 컴퓨터에서 두 사람이 같이 앉아서 하거나 AI랑 붙는거임. 나 서버는 하나도 다룰줄 모름;
보노보노 배경은 뭐
워터마크 안 박힌 이쁜 배경 찾는거 쉽지 않더라... 그래도 나름 배경 8종 있고 그중에 바꿀 수 있음.
이쁘다
에휴 유니티로 만드는게 훨씬 낫겠다~
맞말이네. 근데 어차피 이거 거의 8년도 더 전에 C++로 만든거 리팩토링만 한거라...
함수형언어로 포팅해주세요ㅎㅎ
안그래도 할일 넘모 많아서 ㅗ
이런거 말고 모나드 강의좀 올려주셈 - dc App
대단해
대단해요
와 디자인 진짜.. 80년전 개발자가 만든거같이 생겄노
C++로 게임 만들면 이런 원시적인 느낌의 정겨운 게임들이 많이 나오는듯 ㅋㅋㅋㅋ - dc App
이 갤러리 완벽하게 내 취향이노
개추
00년대 게임 느낌나고 좋네요 개추!
공유해주셔서 감사합니다
좋은 게임이네, 근데 작정하고 진짜 테트리스처럼 빈공간 없이 블럭을 채워넣으면 어떻게 되는거지
그럼 무조건 후공이 이기지. 보드에 블록 25개 꽉꽉 채워넣으면 마지막 블록은 무조건 선공이 놓게 되니까.