티스토리 뷰

Game with Python

테트리스 제작 - (2)

Conkara 2017. 6. 26. 03:56

본격적으로 테트리스 제작을 시작해봅시다



저번 16퍼즐의 코드는 무척 구렸지만 이번 코드는 더 구립니다.


물론 구린 부분중 일부분은 수정할거지만 나머지는 할 생각도 능력도 없습니다.(응?)



자 우선 16퍼즐 만들기 할때 필자가 말했던 게임의 흐름(?) 이 생각나시나요


입력 -> (데이터) 처리및 갱신 -> 그리기 -> 입력



물론 입력은 버퍼에 받아서 따로 처리하고....(이래야 키가 씹히는 일이 줄어듭니다. 없다고는 말 못하고)


처리와 그리기는 따로 작성해야합니다. 처리를 함과 동시에 그린다던가 하면 나중에 다른 기기로 이식하거나 할때


고생좀 할걸요 ㅎㅎ 필자의 계획에는 라즈베리파이로 이동식 게임 만들기도 들어있습니다. 그때까지 보시는 분은 이 계시면 좋겠네요 물론 언제 필자가 그걸 만들지는 모르겠어요 테트리스 블로그 초안 잡은것만 해도 설명할거랑 합치니까 한달분량이 나와서요 한달동안 날로 먹겠다... 는 아니고 본업 하면서 다른게임도 만들어 놔야죠...


우선 이번에도 저번 16퍼즐처럼 클래스 하나로 할려고 하니까 꽤 복잡하더라구요



그래서 클래스 두개를 만들었습니다. 설계하기 나름이니까 클래스를 더 나누어서 그리기 클래스나 뭐 기타등등... 정말 많이 나누셔도 되요. 저는 이 구조가 가장 짜기 쉬워서 일단 날림으로 짠다고 이렇게 짰어요. 실무에서 이딴식으로 짜면 엄청 혼납니다.



필요한 라이브러리들을 임포트합시다. 임포트 한 코드는 16퍼즐때와 마찬가지에요.






더 설명할 것이 없는 간결한 코드... 라고 약을 팔려고 했으나 copy 라이브러리를 임포트 했네요? 이건 뭘까요....



발코딩의 흔적... 이 아니고 객체의 깊은 복사를 시켜주는데 파이썬은 기본적으로 사용자 정의 객체에 대해서       얕은 복사 즉 주소값 복사를 합니다 깊은 복사와 얕은 복사는 저 코드가 다시 나오게 될 때 설명해드릴게요 일단은 필요하다는것만 알고 계세요. 물론 C계열 언어를 하신 분이라면 아시겠지만


파이썬을 먼저 하신 분들중 중 고급자 분들은 물론 아시겠지만 초심자분들은 모르실 수도 있습니다. 모르실 수도 있는거니까 C를 해야지! 라고 생각하지는 마세요 아무 쓸데 없습니다.  농담이고 쓸데는 많죠. 하지만 언어는 수단이지 방법이 아닙니다. 우선 할 수 있는걸 하세요. 언어를 이것저것 건드리는것보다 무엇인가를 만들어 보면서 자극받는게 더 중요합니다. 


그리고 C로 뭔갈 하실려면 크로스 플랫폼 이슈도 해결해야해요.  맥에서 작동하게 만들려면 Swift 나 Objective-C를 하셔야하고 윈도우에서는 WinAPI 를 아셔야하고 조금만 성능받는 게임 만드시려면 맥에서는 OpenGL 은 알아야하고 윈도우는 DirectX를 알아야 쓸만할걸 만들수... 있을것같죠? 못만듭니다. 잘하시는 분들은 잘 만듦 제가 못해서 물론 Pygame 따위로 저런 기술이 필요한 게임을 만들 생각은 없습니다 잘짜도 손해보는 언어에 라이브러리니까



제가 Pygame 을 선택한건 맥 os 와 windows 에서 모두 작동하기 때문입니다. (리눅스는 안해봐서 모르겠으니까 버려요 Pygame 공식문서에 된다고 되있지만  해볼 생각 없음)



잠시 글을 의식의 흐름에 맡기고 써서 길을 잃어버렸습니다



다시 돌아와서



저 라이브러리들을 싹 임포트 해주시고


게임을 설계해봅시다.




우선 게임 판이 필요하겠죠? 게임 진행 및 게임 판을 가지고 있는 클래스를 만듭시다 (최소 기능의 원칙따위는 가져다 버린지 오래) 아 좀 봐줘요 그런것까지 지켜가면서 만들... 어야죠.... 하...






어이쿠 갑자기 이상하게 짜놨는데 여기에 대한 설명을 드려야겠네요



1은 벽이고 0은 빈 공간 입니다. 이번엔 게임 판을 단일 배열로 써봤습니다.

가로줄은 총 12줄에 벽 제외하고 플레이 공간은 10칸


세로는 16줄에 벽 제외하고 플레이공간은 15칸이지만 최상단의 줄에는 블럭이 쌓이는 순간 게임 오버가 되므로 실질적 플레이 공간은 14칸입니다.



우선 가로와 세로를 상수로 정의해놓아야겠네요.





깔끔합니다.



그 다음 게임판을 출력하는 함수도 짜볼까요?





네 저번과 똑같습니다. 물론 게임판을 blit 하는 코드 뿐만 아니라 버퍼에서 옮겨담는 코드도 이 함수에 들어있어야 합니다 왜 안넣었을까요...?



블럭 크기는 30*30 픽셀로 정했고 img배

열 안에 0~n 까지 블럭의 리소스가 저장되어 있습니다. 이제 각각의 숫자에 맞춰서 블럭을 표시해주는 일만 남은거죠





수정한 코드는 이렇게 됩니다 가장 아랫줄에 저 코드가 추가되었습니다




자 다음 단계로 넘어가기 전에 한번 쉬었다 갑시다. 쉬고 다음 시간에는 테트리스를 어떻게 짤지 고민을 좀 해보죠.

'Game with Python' 카테고리의 다른 글

테트리스 제작 - (4)  (0) 2017.06.27
테트리스 제작 - (3)  (0) 2017.06.26
테트리스 제작 - (1)  (0) 2017.06.26
16퍼즐 제작 - (9)  (1) 2017.06.18
16퍼즐 제작 - (8)  (0) 2017.06.16
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함