본문 바로가기

Python/Python 초등 교육

8. 장애물 넘기 게임 - 1부

반응형

이제 본격적으로 파이썬으로 게임을 만들어 보면서 여러분이 앞에서 배웠던 내용들을 사용하면서 익히도록 해요.

 

간단하게 장애물이 앞에서 오고 장애물을 뛰어 넘는 게임을 만들어 보아요.

 

항상 개발을 시작할때 최종 결과물이 어떤 모습일지 생각을 하고 그모습에 어떤 순서로 하나씩 만들어 갈지를 

고민하고 생각을 하는것이 중요해요. 

 

그럼 우리의 최종 게임 완성의 모습이 어떤 모습인지 아래 그림을 보도록 합시다.

 

위 이미지 처럼 간단하게 장애물을 넘는 공룡 게임을 만들어 보도록 해요.

 

그럼 먼저 어떤 순서로 코딩을 해야 할지 생각을 해봐야 해요. 모든일에는 순서가 있죠? 코딩도 마찬가지에요. 

아니 코딩은 오히려 순서가 굉장히 중요합니다.

 

기본적으로 큰틀을 먼저 만들고 안을 채워 간다고 생각을 해 보면 아래와 같은 순서가 될것같아요.

이 순서가 꼭 맞지는 않을수 있어요. 여러분들이 생각하는 순서를 먼저 정해 생각해 보도록 합시다.

  1. 게임 창을 뜨게 만든다. ( 윈도우 창이라고 하죠? 게임 윈도우 창을 뜨게 만드는것입니다.)
  2. 공룡 캐릭터를 나오게 한다.
  3. 장애물을 나오게 한다.
  4. 공룡이 점프 하게 한다.
  5. 장애물이 움직이게 한다.

그게 위에 5번까지 순서로 생각을 해 볼수 있을것 같아요.

그럼 이제 본격적으로 코딩을 해 봅시다.


1. 게임 창을 뜨게 만든다.

아래 코드를 참고해 주세요.

import sys
import pygame
#pygame 초기화
pygame.init()
#게임 창의 이름 설정
pygame.display.set_caption("데브라쿤 파이썬게임 연습1")
#창의 가로 길이
MAX_WIDTH = 800
#창의 세로 길이
MAX_HEIGHT = 400

def main():
    # 게임 화면의 사이즈 설정
    screen = pygame.display.set_mode((MAX_WIDTH, MAX_HEIGHT))
    
    while True:
        screen.fill((255, 255, 255))
        #게임 내의 이벤트를 지속적으로 체크하여 이벤트에 대한 처리를 하는 부분.
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    print("점프 키")
        pygame.display.update()
if __name__ == '__main__':
    main()

 

 

위 코드를 한줄씩 볼까요?

import sys , impory pygame 이라고 되어 있습니다. import 라는 키워드는 파이썬의 라이브러리를 가져다 쓴다라는 의미에요.

import라는 영어의 사전적 의미는 불러오다. 가져오다. 라는 뜻이에요.

 

이말을 그대로 적용해 보면 sys라는 라이브러리를 가져오다 . pygame이라는 라이브러리를 가져오다. 라는 뜻입니다.

그럼 라이브러리는 무슨말이에요? 라고 생각하게 될거에요. 

 

프로그램에서 libray(라이브러리) 는 여러가지 사용이 편리하게 만들어진 코드들의 그룹 또는 집합 이라고 생각하면 됩니다.

이런 라이브러리는  파이썬을 설치하면 기본적으로 같이 설치되어서 import 만 하면 사용가능한것들이 있고 

필요한 라이브러리를 내가 직접 설치를 해야만 import 가능한 라이브러리가 있어요.

 

우리가 이제 굉장히 많이 사용해야 하는 pygame이라는 라이브러리는 직접 설치를 해야 하는 라이브러리 입니다 

그럼 파이썬 라이브러리는 어떻게 설치 해야 하는지 볼까요?

 

간단합니다. 파이썬을  설치 했다면 앞에서 설치 했던 vscode에 새 터미널 메뉴를 클릭해서 터미널 창을 나오게 해보세요.

그럼 아래 처럼 

터미널 창이 vscode 프로그램 아래쪽에 나오게 되는데요. 요기서 python이라는 명령어를 입력해 봅시다.

그럼 설치 했던 파이썬의 버전이 보입니다. 이게 보인다는것은 파이썬이 잘 설치 되었다는 뜻이에요. 안보인다면 

https://dev-racoon.tistory.com/54 요기 글을 다시 보고 파이썬을 설치 하도록 합시다.

 

이제 터미널 창에 아래 명령어를 입력해 보아요.

pip install pygame

이렇게 입력하게 되면 파이썬 pygame이 설치가 됩니다. pip는 파이썬 라이브러를 관리하는 명령어이고  install 은 

라이브러리를 설치 할때 사용되요 . 물론 라이브러리 삭제 명령어도 있어요. 

삭제 명령어는 여러분이 직접 검색을 통해 찾아 보도록 할까요? 개발자가 된다는것은 구글링을 얼마나 잘해서 내가 궁금한것을 잘 찾아가는가 하는 부분도 있어요.

 

여기까지 간단하게 라이브러리 설치에 대해 알아 봤어요. 

이제 다시 게임 만드는 코드로 돌아가서 보면 

#pygame 초기화
pygame.init()

pygame 게임 라이브러리 import 해서 사용할때 pygame.init()을 꼭 해줘야 하는데 . init() 은 pygame의 초기화 함수에요.

파이썬에서 함수란 어떤 작업을 수행하는 코드를 모아 이름을 붙인 것이다 라고 해요. 

 

pygame에서 init() 함수는 그럼 어떤일을 할까요? 어떤 코드들이 모여 있까요? 직접 init() 함수의 코드를 보고 분석을 해볼수 있겠지만 

여러분은 아직 초보 개발자이니 분석에 어려움이 있을거에요. 

간단하게 설명을 하자면 pygame 라이브러리는 결국 .py의 파이썬 파일들의 집합인데 그 파일들이 다 잘 있는지 와 사용가능 한 상태로 만드는 작업을 init() 에서 해준다고 생각하면 됩니다.

 

pygame.display.set_caption("데브라쿤 파이썬게임 연습1")

게임 창의 상단의 창 이름을 정하게 됩니다.

MAX_WIDTH = 800
MAX_HEIGHT = 400

는 창의 가로 세로 길이 값을 변수에 할당하는 코드 입니다. 

변수라는것은 말그대로 변할수 있는 수 라고 생각하면 됩니다. 하지만 꼭 변하는값을 저장할때만 사용하지 않아요. 

변하지 않는 값을 저장할때 사용하기도 합니다. 

위 코드에서 MAX_WIDTH 라는 이름의 변수에 800 이라는 숫자값을 할당하고 있어요.

이후에 MAX_WIDTH는 창의 가로 길이기 때문에 변하지 않는 값이겠죠? 그래서 변수의 이름을 영문 대문자로만 표현을 한것입니다.

이처럼 변수의 이름의 형태를 보고 어떤 변수인지 짐작할수도 있는데요 이것은 파이썬을 개발하는 사람들끼리의 약속 같은거에요. 

 

우리 변수이름을 정할때 아래와 같이 약속을 하자. 그러면 다른 사람이 만든 코드를 볼때 좀 더 쉽지 않겠어? 라고 말이죠

  • 영문 문자와 숫자를 사용할 수 있습니다.
  • 대소문자를 구분합니다.
  • 문자부터 시작해야 하며 숫자부터 시작하면 안 됩니다.
  • _(밑줄 문자)로 시작할 수 있습니다.
  • 특수 문자(+, -, *, /, $, @, &, % 등)는 사용할 수 없습니다.
  • 파이썬의 키워드(if, for, while, and, or 등)는 사용할 수 없습니다.
  • 변하지 않는 값을 할당할때는 대문자로만 만든다.

등의 기본적인 약속을 하고 있어요. 여러분들도 이제 파이썬 개발자라고 하면 위의 약속을 꼭 지켜서 코딩하도록해요.

def main():

파이썬에서 함수를 정의 할때 def 키워드를 사용해요. 

위코드를 예를 들어 설명을 하면 입력인자 값이 없는 main 이라는 이름의 함수를 정의하는것입니다.

함수는 언제 어떻게 만들어서 사용해야 할까요? 

 

간단하게 아래 예를 들어 볼게요

x = 0
y = 1

print(x+y)

a = 0
b = 1

print(a+b)

위 코드에서 보면 두 수의 합을 print 하고 있는데 함수를 사용하지 않고 코딩을 하게 되면 코드가 길어 질수록 복잡해 지게 됩니다.

함수를 사용해서 간단하게 변경을 해보도록할게요.

def sum_num(x , y):
	print(x+y)

sum_num(0 , 1)
sum_num(1, 2)

================== 결과 값 =========

1
3

위 처럼 x , y라 는 두 입력인자를 받는 sum_num 이라는 함수를 만들어서 코드를 간단하게 변경해 보았습니다.

아주 간단한 함수이지만  기본적인 함수의 사용법은 똑같아요. 함수란 이런것이군아 라고 이해하고 넘어가보도록 합시다.

 

mian 함수 안에 보니까 

# while 조건이 참일때 까지
while True:

라는 부분이 있어요  while문은 반복문이라고 합니다. 말그대로 while 문 앞에 코드들을 반복할때 사용되요.

언제 까지 반복을 할까요?

위에 코드에서 주석 처리 되어 있는것처럼 while 다음의 조건값이 참일때까지 즉 True 일때까지 계속 반복됩니다.

그럼 while true는 계속 반복 되나요? 네 맞아요!! 무한 반복을 하게 됩니다.

 

무한반복이라고하면 프로그램이 끝나지 않겠네요? 네 맞아요 . 특별하게 해당 프로그램을 강제 종료 시켜주지 않는 이상 이 프로그램은 컴퓨터가 고장날때까지 아니면 강제로 끌때까지 계속 실행될거에요.

 

그럼 왜 이런 코드를 만들었을까요? 프로그램은 파이썬뿐만 아니라 다 코드가 위에서 아래로 한줄씩 실행이되고 모든 코드를 다 실행하게 되면 프로그램은 자동종료 됩니다. 만약 무한 반복이 없다면 아마도 게임이 실행되자 마자 종료 될거에요.

 

이렇게 프로그램이 실행되고 바로 종료되는것을 방지 하기 위해 무한 반복 코드를 넣게 됩니다.

무한반복 코드안에 보면 

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    print("점프 키")

위 코드가 보여요 바로 for 반복문 입니다. 

위 코드를 예를 들어 설명을 하면 pygame.event.get() 을 하게 되면 pygame으로 창을 띄우고 나서 이벤트들의 정보( 키보드의 키를 눌렀을때 , 마우스를 움직이거나 클릭했을떄 등) 들을 체크해서 각각의 이벤트들을 event라는 변수에 할당해서 for 문 안에서 처리하고자 하는 코드 입니다.

 

좀 더 간단히 아래 코드로 for문을 이해해 보도록 해요.

for num in [1,2,3,4,5]
	print(num)
    
======== 결과 =======
1 
2
3
4
5

위와 같이 1~ 5까지 배열을 하나씩 반복해서 print 해보는 코드 입니다. 간단하면서 for문을 이해하기 쉽죠?

for문이 끝나고 이제 

pygame.display.update()

이런 코드가 보일거에요. 이 코드는 게임창에 보여지는 이미지나 정보들을 다시 그리는 작업을 해주게 되요.

이 코드가 없다면 우리가 캐릭터를 이동하거나 없애거나 새로 만들거나 할때 처음 게임 실행될때 그 모습 그대로 아무런 변화가 없을거에요.

 

궁금하다면 직접 테스트 해보도록 해요. 항상 개발자는 궁금한것을 테스트해보고 시도해보는것을 귀찮아 하거나 두려워하면 안되요.

 

마지막으로 

if __name__ == '__main__':
    main()

if문 이 보이네요. if는 조건문이라고 합니다.

if 조건이 참이면 아래 코드가 실행이 되요.  if문의 조건 부분은 여러가지 형태로 조건을 체크 할수 있습니다.

if 1 == 1 : 

if a == '테스트'

if 10 < 11 :

위 같이 여러 형태로 조건을 만들어서 체크 할수 있어요. 이부분은 앞으로 여러분이 많은 코드를 보고 공부하면서 자연스럽게 익히게 될거에요. 

위 코드에서 보면 if __name__ 이라는 변수의 값을 체크하고 있네요.

 

__name__ 이라는 변수는 우리가 만든 변수는 아닙니다. 이것은 파이썬의 내장변수에요. 

직접 실행된 파일의 __name__ 값은 __main__ 이라는 값을 가지게 됩니다. 

하지만 우리가 만든 파일에 보면 import pygame이라고 되어 있죠? 해당 pygame이라는 모듈의 __name__ 값은 모듈명인

pygame 이라고 값이할당 됩니다.

 

간단하죠? 이렇게 하면 기본적인 게임창을 띄우는 코드까지 설명이 된것 같아요. 

 

이제 이 기본 구조에서 하나씩 하나씩 코드를 채워 가보도록 해요.

 

여기까지 우리가 앞에 세웠던 코딩 계획의

  1. 게임 창을 뜨게 만든다. ( 윈도우 창이라고 하죠? 게임 윈도우 창을 뜨게 만드는것입니다.)

이부분이 완성 되었네요. 다음에는 2번 공룡 캐릭터를 나오게 한다. 를 해보도록 합시다.