pygame 은 파이썬 자체 게임관련 개발에 집중되어있는 라이브러리이다.
기본적으로 창 구성
사이즈 설정을 넣어두고
후에 이미지 출력과 이벤트처리등을 활용하여 게임 제작이 가능하다
게임 플레이어 및 맵 생성
import pygame as pg
from settings import *
vec = pg.math.Vector2
class Player(pg.sprite.Sprite):
def __init__(self, game):
pg.sprite.Sprite.__init__(self)
self.game = game
self.image = pg.Surface((30, 40))
self.image.fill(YELLOW)
self.rect = self.image.get_rect()
self.rect.center = (WIDTH/2, HEIGHT/2)
self.pos = vec(WIDTH/2, HEIGHT/2)
self.vel = vec(0, 0)
self.acc = vec(0, 0)
def jump(self):
# jump only if standing on a platform
self.rect.y += 0.1
hits = pg.sprite.spritecollide(self, self.game.platforms, False)
self.rect.y -= 0.1
if hits:
self.vel.y = -PLAYER_JUMP
def update(self):
self.acc = vec(0, PLAYER_GRAVITY)
keys = pg.key.get_pressed()
if keys[pg.K_LEFT]:
self.acc.x = -PLAYER_ACC
if keys[pg.K_RIGHT]:
self.acc.x = PLAYER_ACC
self.acc.x += self.vel.x*PLAYER_FRICTION
self.vel += self.acc
self.pos += self.vel + 0.5*self.acc
if self.pos.x > WIDTH:
self.pos.x = WIDTH
if self.pos.x < 0:
self.pos.x = 0
self.rect.midbottom = self.pos
class Platform(pg.sprite.Sprite):
def __init__(self, x, y, w, h):
pg.sprite.Sprite.__init__(self)
self.image = pg.Surface((w, h))
self.image.fill(GREEN)
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
Python
복사
파이게임은 한번의 실행으로 지속되는게 아닌 update를 while문을 이용하여 반복 출력하는 형식의 라이브러리이다.
예시
def update(self):
# Game Loop - Update
self.all_sprites.update()
# check if player hits a platfrom
if self.player.vel.y > 0:
hits = pg.sprite.spritecollide(self.player, self.platforms, False)
if hits:
self.player.pos.y = hits[0].rect.top + 0.1
self.player.vel.y = 0
# If player reached top 1/4 of screen
if self.player.rect.top <= HEIGHT/4 :
self.player.pos.y += abs(self.player.vel.y)
for plat in self.platforms:
plat.rect.y += abs(self.player.vel.y)
if plat.rect.top >= HEIGHT:
plat.kill()
self.score += 10
#Die
if self.player.rect.bottom > HEIGHT:
for sprite in self.all_sprites:
sprite.rect.y -= max(self.player.vel.y, 10)
if sprite.rect.bottom < 0:
sprite.kill()
if len(self.platforms) == 0:
self.playing = False
# Spawn new platforms
while len(self.platforms) < 6:
width = random.randrange(50, 100)
p = Platform(random.randrange(0, WIDTH - width),
random.randrange(-75, -30),
width, 20)
self.platforms.add(p)
self.all_sprites.add(p)
Python
복사
만약 키입력 대기시 명령어
def wait_for_key(self):
waiting = True
while waiting: #반복문으로 입력될떄까지 화면 반복출력
self.clock.tick(FPS)
for event in pg.event.get():
if event.type == pg.QUIT:
waiting = False
self.running = False
if event.type == pg.KEYUP:
waiting = False
Python
복사