반응형

pygame 은 이름대로 파이썬으로 게임제작을 할 수 있도록 만들어진 라이브러리 입니다.

 

아무래도 사용법을 익히려면 간단한거 하나 만들어 보는게 좋을꺼 같아 뭘 할까 하다가 벽돌깨기 게임을 만들어 보기로 했습니다.

딱히 강좌도 아니고....제대로 된 게임을 만드는것 자체도 목적이 아니라, 어디까지나 pygame 을 익히고 기록을 남겨두는게 목적이기 때문에 소스의 깔끔함이라던가 정돈이라던가 그딴거 없이 대충 갑니다.(파이썬도 사실 아직 잘 모릅니다)

pygame 의 문서만 보고 하는거라 잘못 아는것도 있을 수 있고, 더 좋은 방법이 있는데 어렵게 하는 것도 있을 수 있음을 미리 알려드립니다.

파이썬은 당연히 python 3.x 버전을 사용할 것 입니다.

 

>

 

첫번째는 그냥 기본적인 라이브러리 사용방법에 대한것이라 화면에 블럭을 한줄 표시하는 소스입니다.

import pygame
from block import *

SCREEN_X = 1024
SCREEN_Y = 768

pygame.init()   #pygame 라이브러리 초기화
screen = pygame.display.set_mode((SCREEN_X,SCREEN_Y))   #특정크기의 스크린 생성
background = pygame.Surface(screen.get_size())#스크린과 동일크기의 surface 생성. 
                                              #이곳에 실제 그림을 그린후 원래 스크린에 복사함

#소스코드 위치 아래 images 폴더에 그림파일을 보관함. 
#convert 는 좀 더 빠른속도를 낼수 있게 이미지를 변환한다고 함.
pic = pygame.image.load("images/bb.png").convert()
#pic = pygame.transform.scale(pic,(nx,ny))    #이미지 크기를 바꾸고 싶을때 사용함
block_list = pygame.sprite.Group()

#스프라이트를 생성하여 SpriteGroup 에 추가함. 스프라이트의 위치 좌표도 만들어 넣어준다
for i in range(1,9):    
    block = Block(pic)      #블럭객체 생성. 파라미터는 그림파일
    block.rect.x = i * 91   #화면상에 표시될 x 좌표
    block.rect.y = 100      #화면상에 표시될 y 좌표 
    block_list.add(block)   #객체를 sprite.group 에 추가

done = True

#게임의 메인루프. 루프에서 빠져나오면 게임은 종료됨
while done:        
    ev = pygame.event.get()
    for event in ev:
        if event.type ==pygame.QUIT:     #창의 종료버튼이 눌렸을때 게임종료
            done = False                 #false 값을 줌으로서 루프를 빠져나와 게임종료
        if event.type == pygame.MOUSEBUTTONDOWN:    #마우스가 눌렸을때 마우스의 위치 얻음
            pos = pygame.mouse.get_pos()            #현재 마우스 포인트의 위치좌표
        break

    block_list.draw(background)   #SpriteGroup 에 있는 스프라이트를 
                                  #background surface 에 모두 그림
    screen.blit(background,(0,0)) #background 를 screen 에 복사해 줌
    pygame.display.flip()          #화면 갱신 

대략적 설명은 소스에 주석으로 달려있으니 길게 설명할 건 없겠고요.

 

화면에 이미지(스프라이트)를 표시하는 방법은 sprite class 를 상속받은 block 클래스를 만들고 이 block 클래스의 객체를 생성해서 Sprite.Group 클래스에 추가합니다. 추가할때 각 이미지가 표시될 화면상 좌표를 block.rect.x 와 block.rect.y 에 넣어줍니다.

sprite.group 클래스의 draw 를 이용하면 sprite.group 에 추가된 스프라이트들을 모두 화면에 그려줍니다.

 

 

다음은 block 스프라이트 클래스 입니다.

import pygame

class Block(pygame.sprite.Sprite):
    def __init__(self,img):
        super().__init__()
        self.image = img
        self.rect = img.get_rect()
       

별건 없습니다. sprite 객체를 상속해서 block 클래스를 만듭니다. 사용할 이미지와 크기와 위치를 지정할 rect 변수를 지정해 줍니다.

 

 

실행화면

화면에 block 이미지를 8개 출력했습니다. 아래로 몇줄 더 출력하고 벽돌을 깰 공과 공을 튕겨낼 캐릭터 정도까지만 할 계획입니다. 공이 튕길 벽도 만들긴 해야 겠네요. ^^;

 

시험적으로 이것저것 해 볼 것이라 소스는 점점 엉망이 될것이고 짜투리 시간에 천천히 하는 거라 언제 끝날지 모릅니다. 1년이 될지 2년이 될지....

 

pygame 의 공식 홈페이지는 https://www.pygame.org 입니다.

 

+ Recent posts