본문 바로가기

개발 현황

Python - Tkinter를 이용한 2048 구현

매일매일 과제이 치여 살다보니 블로그를 운영하는 것이 쉽지 않다.

거의 방치 수준으로 치닫고 있다.

사실 방치 맞다.(;;;)

 

과제 중에 특히 팀 프로젝트가 많아서

하고는 있지만 힘든 건

사람 수 만큼 배로 늘어나는 느낌이다.


처음엔 파이 게임으로 구현하려고 했으나,

인터페이스가 똥망이라서 + 알고리즘 구현의 대실패의

환상적인 콜라보가 나의 대뇌를 강타하니

내 멘탈과 함께 프로젝트도 터져버렸다.


어찌저찌 구현 완료

아무튼 어찌저찌 성공을 하긴 하게 되었다.

그림1 - Tkinter를 이용한 2048 구현

처음에 애를 먹었던 것은 단연 알고리즘이었다.

UX자체는 매우 간단하고 명료하지만,

그것을 구현하는 데에는 좌우뇌가 서로 단교하는

그런 끔찍한 느낌이었다.

그럼 그 알고리즘은 뭔가.


충공깽의 메커니즘

처음에는 혼자서 구현해보려고 노력했다.

물논 게임 개발의 첫 경험이자, 이제 프로그래머 시작하는

그러한 시작의 마을 초보자에게는 무리였다.

 

그래서 선택한 방법은 다른 사람이 짠 코드를 해석하고

내것으로 만드는 것이었는데,

 

끔찍한 가독성과 변태같은 알고리즘은

부탁을 랄치게 만들 정도였다.

 

그리고 유튜브까지 동원하여 강의를 깔짝대다가 보였다.

빈틈의 실.

 

생각보다는 쉬웠다.

딱 3가지 함수만 있으면 됐었다.

그림 2 - 타일 합병
그림 3 - 타일 정렬
그림 4 - 매트릭스 회전

 딱, 이 3가지만 있으면 매우매우매우매우 쉽게 구현이 되었따.

  1.  방향에 따라서 왼쪽으로 정렬 할 수 있게 끔 회전시키고,
  2.  왼쪽으로 정렬 후, 같은 타일이 있다면 합병한다.
  3.  그리고 다시 한 번 더 왼쪽으로 정렬하고,
  4.  원래의 매트릭스 방향으로 회전하여 되돌려 놓으면 된다.

이때 회전은 총 4번만 실행된다.

왜냐고?

90도씩 4번 돌리면 360도다.

그럼 원래대로 돌아온다.


후기

와... 장난아니게 힘들었다.

물논 힘든 만큼 성장한 느낌이 든다.

이것만큼은 확실한 것 같다.

 

하지만 조금 아까웠던 것은, 기존의 코드를 참고하긴 했다는 것.

물론 알고리즘이나 인터페이스가 장난아니게 멋졌지만

그런 대부분의 것들을 유지 보수 및 추가하면서 완성했다.

 

이번에는 했다라는 것에 의미를 두자.