파이썬 python

파이썬 초보 프로젝트 게임 만들기 1편 - pygame 시작 하기.

studying develop 2021. 8. 14. 18:21

라이브러리의  사용

일단 가장 첫줄에 pygame을 불러옵니다.

우리가 이 라이브러리가 필요한 이유는 게임을 더 쉽게 만들기 위해서입니다.

 

게임을 만들기 위해 필요한 화면, 우리가 클릭하는 버튼의 인식등 게임에 구현할 요소는 정말 다양합니다.

모든것을 한개씩 구현하는 것은 매우 오래 걸리며 비효율적입니다.

그래서 우리는 쉽게 구현을 도와주는 pygame을 사용할 것입니다.

 


초기 화면 구성

일단 우리가 만들 게임 객체를 초기화 합니다. pygame.init()을 호출함으로서 pygame을 만들기 위해 필요한 요소들을 갖는 pygame 객체가 초기화되고 생성됩니다.

 

그리고 우리가 필요한 게임 화면을 구성하기 위해 size = [400, 900] 즉 가로 400픽셀, 세로900픽셀 사이즈의 화면을 설정합니다.

상식적으로 게임 화면을 만들때, 사이즈를 정해주는게 맞겠죠?

 

그리고 정의한 사이즈 만큼 pygame.display.set_mode(size), 즉 pygame 게임 객체에 display객체에 set_mode를 이용해 size를 설정해 줍니다.

 

이제 다음 줄도 마찬가지로 display객체에 set_caption을 이용해 타이틀, 즉 제목을 넣어줍니다.

 


그리고 시간과 관련된 객체인 clock을 생성합니다.

우리는 시간을 화면이 변경되는 것과 관련하여 사용할 것입니다. 즉 밑에서 1초에 화면을 몇번 새로고침하라라는 개념입니다.

 

그리고 shipObj를 생성합니다. 아직 spaceShip() 클래스를 설명 안했습니다.

 


spaceShip 클래스

가장 첫 줄은 클래스를 초기화하는 부분입니다. x와 y 좌표를 생성하고, 초기화 합니다.

그리고 다음줄의 put_img 함수는 imgSrc 즉 이미지 주소를 받아와 png 확장자를 갖는 파일이면 전자, 아니면 후자로서 생성된 img 객체에 이미지 객체를 설정합니다.

 

그리고 shipPositionX, Y는 화면상에서 위치를 의미합니다.

좌측상단이 0,0 이고 우측하단으로 갈수록 x,y좌표의 값이 커집니다.

파이게임의 좌표계 기준이라 숙지할 필요가 있습니다.

 

그리고 change_size 함수는 인수로 받은 사이즈로 이미지 크기를 변경합니다.

 

show는 screen에, 즉 우리가 위에서 처음에 설정한 스크린에 이미지를 해당 위치로 불러옵니다.


 

while문이 사용되었습니다. gameOnFlag를 이용해 게임의 실행과 종료를 조절합니다.

 

while문을 사용함으로서 프로그램이 죽지 않고 계속해서 명령을 수행할 수 있도록 합니다.

while문 밖에는 quit이 있죠, while문이 종료되면 파이게임은 종료됩니다.

 

clock.tick(2)는 1초에 2번 화면을 갱신한다는 뜻입니다.

 

나머지는 아직 사용하지 않습니다.

 

screen.fill(black) 즉 바탕을 검정으로 채운다.

shipObj.show()는 우리가 받은 이미지를 보여주는 메소드입니다.

 

pygame.display.flip()은 파이게임의 디스플레이를 업데이트 한다는 것 입니다.

화면에 우리가 새로운 이미지를 넣으면 갱신이 필요하므로 그렇습니다. 또는 이미지가 이동해도 화면을 새로 그려줄 필요가 있습니다.


 

import pygame

def makePygame(name):
    class spaceShip:
        def __init__(self):
            self.x = 0
            self.y = 0
        def put_img(self, imgSrc):
            if imgSrc[-3:] == "png":
                self.img = pygame.image.load(imgSrc).convert_alpha()
            else:
                self.img = pygame.image.load(imgSrc)

            self.shipPositionX, self.shipPositionY = self.img.get_size()

        def change_size(self, width, height):
            self.img = pygame.transform.scale(self.img, (width, height))
            self.width, self.height = self.img.get_size()
        def show(self):
            screen.blit(self.img, (self.x, self.y))

    #1. 게임 초기화
    pygame.init()

    #2. 게임창 옵션 설정.
    size = [400, 900]
    screen = pygame.display.set_mode(size)

    title = "name"
    pygame.display.set_caption(title)

    #3. 게임 내 필요한 설정.
    clock = pygame.time.Clock()

    shipObj = spaceShip()
    shipObj.put_img("spaceship.png")
    shipObj.change_size(60, 90)
    shipObj.x = round(size[0] / 2 - shipObj.width / 2)
    shipObj.y = round(size[1] - 10 - shipObj.height)

    black = (0, 0, 0)
    white = (255, 255, 255)
    k = 0

    color = (0, 0, 0)

    #4. 메인 이벤트.
    gameOnFlag = 0
    while gameOnFlag == 0:
        #4-1. fps setting
        # 1 초에 60번 바뀐다는 뜻.
        clock.tick(2)

        #4-2. 입력감지.
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                gameOnFlag = 1

        #4-3. 입력, 시간에 따른 변화
        k += 1

        #4-4. 그리기
        screen.fill(black)
        shipObj.show()

        #4-5.업데이트.
        pygame.display.flip()
    #5. 게임 종료.
    pygame.quit()




# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    makePygame('my pygame')

# See PyCharm help at https://www.jetbrains.com/help/pycharm/