Search
Duplicate

Pygame

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
복사