티스토리 뷰
본격적으로 테트리스 제작을 시작해봅시다
저번 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 |