1학년 2학기, 텀프로젝트도 끝나가고 기말고사도 끝나갈 무렵,백준과 프로그래머스만 풀고 있다가 1학년을 대상으로 하는(21학번) 파이썬 공모전을 연다는 안내를 받고 참여했다.
파이썬 기능을 많이 한정한데다가, 수업과 교재에서 알려주는 테크닉만으로 만들어야 하기 때문에, 이걸로 뭘 만들까 고민하다가 아무래도 처음 쓴 turtle보다는 몇번 써보고 했던 tkinter로 만들기로 했다.
모듈은 정했고, 이제 주제를 정해야 했는데, 사실 주제 정하는데 시간을 정말 많이 쓴 것 같다. 주변에서도 아이디어를 계속 받으면서, 결국 2048! 게임을 만들어 보기로 했다. 이 게임은 고등학교때 핸드폰 바뀌고(왜 남아있는지는 모르지만 갤럭시 S1) 그나마 멀쩡하게 돌아가는 게임이었다. 고등학생때, 통학하면서 버스에서 음악들으면서 엄청나게 하던 게임이라, 나한테도 의미가 깊은 게임이기 때문이기도 한 것 같다.
꽤 유명한 게임이라 다들 아는 게임이겠지만, 설명해보자면, 처음에 2와 4라는 블럭이 랜덤한 확률로 랜덤한 위치에 생성된다. 상하좌우로 블럭을 이동하면서 같은 블럭을 합치며, 최종적으로 2048이라는 블럭을 만들어내는 것이 목표인 게임이다. 물론 만든 이후에도 게임은 계속할 수 있다.
정말 만들면서 알고리즘보다 디자인에 신경을 더 쓴 것 같다. 디자인이야 원래 게임을 어찌저찌 비슷하게 만들어 내었다. 원작자의 소스에 백그라운드 사진도 있었지만, 사진으로 표현하면 제대로 표시가 안되는 오류가 있어서 하는 수 없이 그냥 직접 배치했다.
그리고 pc게임인 만큼 wasd키와 방향키를 통해 움직이게 하고 싶었지만, 이러한 테크닉은 학교에서 가르친 범위 바깥이었기 때문에 키보드로 진행하게 하는 방식을 중간에 버리고, 키보드가 아닌 상하좌우 키를 표시한 또다른 tkinter 창을 띄워서 움직이게 했다. 하지만 키보드로 하는게 훨씬 좋은 것 같긴 하다.
알고리즘의 경우, 블럭들을 위로 올려서 합치고, 이동시키는 함수를 만든 후에, 버튼이 눌리면, 보드를 회전시킨 후에, 블럭을 위로 올려서 합치고, 다시 원상태로 회전시키는 방식을 통해, 중복되는 코드를 최대한 제거하였다.
깃허브 링크:
https://github.com/Jin3811/21_winter_python_contest