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 입니다.
'프로그래밍 > python' 카테고리의 다른 글
pygame 의 스프라이트 충돌체크 방법 (0) | 2019.05.31 |
---|---|
pygame 벽돌깨기 게임 프로젝트 2 (0) | 2019.05.23 |
python 3 의 random 사용법 (0) | 2017.11.10 |
[파이썬3] 간단한 환율 계산기 (0) | 2016.01.19 |
파이썬3 의 텍스트 출력 간단정리 (0) | 2015.03.22 |