개발/Python

python 첫번째 게임 만들기 - cave, python/pygame 기초 코드이해

huiyu 2020. 3. 21. 18:20

python + pygame 환경구축
https://huiyu.tistory.com/entry/Python-Pygame-환경구축-Window10-VS-code?category=767379

 

Python + Pygame 환경구축 (Window10 / VS code)

시작->cmd로 명령 프롬프트 실행, python을 입력한다. Microsoft Store에 자동으로 연결되며 최신 Python설치화면이 나온다. '무료'를 클릭해서 설치시작. 금방 설치가 완료된다. 명령프롬프트에 python --versi..

huiyu.tistory.com

pygame - cave 

 

소스코드 다운
https://github.com/huiyueun/pythongame

 

huiyueun/PythonGame

Contribute to huiyueun/PythonGame development by creating an account on GitHub.

github.com

 책따라서 하고있는 첫번째 파이썬 게임, cave.
간단하게 space 키를 이용해 추락하지 않게 하는 게임. 80라인정도로 간단하게 만들 수 있다.

차근차근 따라하려고 깃레포 만들고 코드 업로드중. 

먼저 파이썬 코드 이해하기.

import

가장 상단에 있는 코드는 파이썬 모듈을 임포트하기 위한 코드이다. 
import sys, pygame -> sys(시스템 모듈)과 pygame 모듈을 임포트하고 있다.
각 모듈엔 여러 상수를 사용하고 있는데 이를 갖고올 수도 있다.
'from pygame.locals import QUIT'와 같이 사용하면 pygame.locals 모듈의 QUIT 상수를 사용한다는 의미이다.

 

main 함수

파이썬 파일은 기본적으로 위부터 차례로 실행하지만 함수가 설정되어 있다면 그 함수는 호출되지 않으면 실행되지 않는다.

python에서 함수 설정은 위 코드와 같이 def [함수명]() : 의 형태로 설정할 수 있다.
->def main() : 은 코드에서 main()함수를 설정하고 있는 것이다.

실제 main()함수를 설정하는 부분은 코드 제일 하단에 위와같이 되어있다.
__name__이 __main__과 같을때 main()함수를 실행시킨다.

** __name__이라는 변수는 자신이 프로그램을 시작한 파일이면 __main__이란 값이 설정된다.
위 예제파일을 실행시키면, 이파일은 프로그램을 시작한 파일이기 때문에 __main__이 설정되고, main()함수를 실행하게 되는 구조이다.

** 자신이 프로그램을 시작한 파일이 아니라면?
 - 파이썬에선 import를 통해 여러 모듈을 읽어 들일 수 있다. 이땐 자신이 직접 실행되는 파일이 아니라 불리는 쪽이 되게 된다. 이 경우 __name__을 출력하게 되면 __name__에는 자신의 모듈명이 설정되어 있다.

PyGame code

 PyGame은 SDL2를 바인딩한 코드라서 기본 구조 자체가 SDL2와 비슷하다. SDL2의 경우 코드를 많이 봐와서 기본 구조자체는 간단하게 이해할 수 있었다.

PyGame 초기화

pygame.init() - pygame 모듈 초기화 함수, pygame 사용시 가장 먼저 호출해줘야 한다.
pygame.key.set_reapeat(5, 5) - 키의 반복 기능을 설정을 위해 사용.
set_repeat(delay, interval) 

SURFACE = pygame.display.set_mode((800,600)) - 800x600 윈도우 생성

타이머 설정

 SDL의 게임 구조는 메인루프를 돌리면서 이 메인루프에서 화면을 갱신하는 구조이다. 하지만 휴식없이 매 루프에서 화면을 업데이트하게 되면 CPU가 부하를 받게 되면서 성능이 크게 저하된다.
 사실 사람의 눈은 이렇게 빠르게는 쫓아갈 수 없어서 빠른 속도의 루프는 불필요하다. 그렇기 때문에 게임 구현시 매 프레임 휴식시간을 주도록 구현하게 되는데 PyGame엔 이러한 함수가 준비되어 있다.

pygame.time.Clock()으로 clock 객체를 생성, 메인루프에서 FPSCLOCK.tick(15)라고 호출한다. 이렇게 되면 1초에 15회 루프가 돌게 되면서 1초에 15프레임을 그리게 된다.

-->메인루프 내에서 호출

키입력

샘플코드 while문 내에 아래와 같은 코드를 볼 수 있다. key event를 받아오는 코드로, pygame.event.get()을 통해 키가 입력이 들어오면 키 이벤트를 받게 된다. 키이벤트를 받아오면 event.type 분기문을 통해 키 종류에 따라 하는 일을 구현하게 한다.

위 샘플의 구조는 아래 코드와 같은데, 기본적인 pygame의 모든 구조는 아래와 같다고 보면 된다.

 

여기까지가 게임알고리즘을 제외한 python과 pygame 기본구조.

 

 

책 게임으로 배우는 파이썬으로 공부중입니다 ->
http://www.yes24.com/Product/Goods/70916900?scode=032&OzSrank=1

 

게임으로 배우는 파이썬

파이썬은 머신러닝과 AI 등 최첨단의 분야에서 주목받고 있으며, 프로그래밍의 원리를 배우기 위한 기본 언어로도 적합하다. 『게임으로 배우는 파이썬』에서는 간단한 게임을 직접 만들어 보면서 쉽고 재미있게 파이썬을 배울 수 있다. 기초편에서는 파이썬 문법과 PyGame 등 기초 지식에 대해서 설명하고, 게임편에서는 9가지 예제 게임들을 통해 앞에서 배운 문법이...

www.yes24.com

 

728x90
반응형