본문 바로가기

IT/프로젝트 및 실습

python을 이용한 간단한 슈팅게임 만들기




다음 프로젝트는 서적 '초보자를 위한 파이썬 200제'를 기반으로 한 포스팅입니다.





C나 C++을 이용해서 일반적인 게임을 구현하기 위해서는 파이썬에 비해 상대적으로 고려해야 할 것이많다.


허나 파이썬에서는 pygame이란 SDL(Simple DirectMedia Layer)기반의 게임 제작을 위해 사용되는 파이썬 확장 라이브러리를 이용하여 보다 손쉽게


게임을 개발할 수 있다.



SDL은 C언어로 구현된 크로스플랫폼 멀티미디어 라이브러리이며, 비디오, 오디오, 사용자 입력 등과 같은 관련된 처리를 

편리하게 수행 할 수 있도록 해준다.



실제로 만들 게임은 비행기(플레이어)가 날아오는 적을 격추시키는 간단한 형태의 슈팅게임인데,


시간이 지날수록 적의 속도가 빨라진다.


일반적인 게임의 규칙은 적과 비행기(플레이어)가 부딪히거나 적을 제거하지 않고 화면밖으로 3명의 적이 지나치게 되면 종료되는 게임이다.







게임 구동 화면






소스 코드






고찰


파이썬을 이용하여 200줄 남짓한 코드로 괜찮은 퀄리티의 게임을 만들 수 있다는 것이 인상적이였다.

물론 책에서 제공해준 괜찮은 도트형태의 이미지를 사용하여 시각적으로 괜찮아서 그럴 수 도있지만



C나 C++에서 지속적인 게임화면 전환을 할 때 화면 깜빡임 문제를 해결하기 위해서 

더블 버퍼링 기법을 이용하는 데,

그게 생각보다 구현이 까다롭다.




허나 반면 파이썬에서는

pygame.display.update()함수를 이용하여

까다로운 더블 버퍼링 구현을 간단하게 한다는 것이 가장 인상적이였으며,




한가지 구현으로 인한 아쉬운 점이 있었는데 

게임 내에서



비행기를 지속적으로 한방향으로 이동할 때 순간적인 방향전환이 힘들다는 것이다.


예를들어 오른쪽으로 지속적으로 이동하기 위해 오른쪽 방향키를 누르고 있다가 순간적으로 왼쪽 방향키로 이동방향을 전환하려고 하면


방향전환이 원활히 되지 않는 것이다.



이 부분은 경험상


코드라인 83번 줄에서 99번째 줄에 있는

KEYDOWN과 KEYUP을 순차적으로 체크하는 방식에 있어서 문제가 생긴 것으로 판단된다.



쓰레드를 이용해 지속적으로 키 입력을 받는 쓰레드를 생성하거나 하는 방식으로 


다음과 같은 문제를 해결할 수 있으리라 생각하나


현재 파이썬을 익숙하게 다루기 위한 과정중이고, 파이썬을 이용한 머신러닝 구현이 최종적인 목표기에 


다음 시간이 넉넉할 때 다음과 같은 소스코드를 수정하여 업로드하겠다.