|
# 게임 개발 예제 코드 |
|
|
|
# 플레이어 1은 D 키를 누르면 앞으로 감. |
|
# 플레이어 2는 오른쪽 키를 누르면 앞으로 감. |
|
# 먼저 끝에 닿는 사람이 승리 |
|
|
|
# 이 코드에서 NanumSquareR.ttf 라는 폰트를 사용했기 때문에 없을 경우 오류가 뜰 수 있음. |
|
# http://cloud.khinenw.tk/index.php/s/m6xOCTNrkmPQ2F1에 zip 파일을 올려뒀으니 이걸 다운받아서 pyCharm으로 실행해보면 오류가 안 뜰 것임. |
|
|
|
import sys |
|
import pygame |
|
from pygame.locals import * |
|
|
|
# pygame을 초기화함 |
|
pygame.init() |
|
|
|
# 전체화면으로 실행할 경우: |
|
|
|
# 설명: 1280, 720은 해상도 |
|
# DOUBLEBUF 는 버퍼를 이용하여 화면의 깜빡임을 없애는 것을 뜻함 (https://namu.wiki/w/더블%20버퍼링) |
|
# FULLSCREEN은 전체화면을 뜻함 |
|
# HWSURFACE는 전체화면에서만 사용가능하고, 하드웨어 가속으로 속도를 더 빠르게 하는 것을 뜻함 |
|
|
|
# screen = pygame.display.set_mode((1280, 720), FULLSCREEN | DOUBLEBUF | HWSURFACE) |
|
# 전체화면에서는 화면에 글자를 띄울 필요가 없음 |
|
|
|
# ===================================================================== |
|
# 창모드로 실행할 경우: |
|
|
|
screen = pygame.display.set_mode((1280, 720), DOUBLEBUF) |
|
pygame.display.set_caption('Hello World!') # 화면 상단 창 프레임에 뜨는 제목 |
|
|
|
|
|
# FPS 맞추기 |
|
# FPS (초당 프레임 수) |
|
FPS = 30 # 1초에 30번 화면을 그림 |
|
|
|
# FPS를 맞춰줄 시계 생성하기 |
|
clock = pygame.time.Clock() |
|
|
|
|
|
# 글자 쓰기 함수를 구현해보자 |
|
def write_text(x, y, text): |
|
# 글자 색 지정 |
|
# R, G, B 가 255, 255, 255 : 흰색 |
|
color = (255, 255, 255) |
|
|
|
# 폰트 지정 |
|
# 현재 폴더의 NanumSquareR.ttf 폰트, 글자 크기: 32 |
|
font = pygame.font.Font('NanumSquareR.ttf', 32) |
|
|
|
# 텍스트 생성 |
|
# text: 쓸 글자, True: 부드럽게 나오게 만들기, color: 색상 |
|
textSurface = font.render(text, True, color) |
|
|
|
# 텍스트의 크기와 위치 가져오기 |
|
textRect = textSurface.get_rect() |
|
|
|
# 텍스트 출력 위치의 중심을 x, y로 설정하기 |
|
textRect.center = (x, y) |
|
|
|
# 화면에 글자를 출력하기 (텍스트, 텍스트 크기와 위치) |
|
screen.blit(textSurface, textRect) |
|
|
|
|
|
# 플레이어를 정의해보자 |
|
class Player: |
|
def __init__(self): |
|
# 화면 제일 왼쪽 중간에서 생성됨 |
|
self.x = 0 |
|
self.y = 360 |
|
|
|
def move(self, x, y): |
|
# x와 y만큼 이동 |
|
self.x = self.x + x |
|
self.y = self.y + y |
|
|
|
# 두 개의 플레이어를 만들기 (2인 플레이) |
|
# 각 플레이어 별로 Y 좌표를 다르게 해둠 |
|
player1 = Player() |
|
player1.y = 300 |
|
|
|
player2 = Player() |
|
player2.y = 420 |
|
|
|
# 아래의 내용을 계속 반복함 (게임의 실제 구현과 진행) |
|
while True: |
|
# 화면을 background 색으로 지워버림 |
|
# (0, 0, 0) = R: 0, G: 0, B: 0 = 검은색 |
|
background = (0, 0, 0) |
|
screen.fill(background) |
|
|
|
for event in pygame.event.get(): |
|
# 이벤트 (마우스 입력, 키보드 입력 등) 를 처리함 |
|
if event.type == QUIT: |
|
# 게임을 종료하는 이벤트 (윈도우의 닫기 버튼) |
|
# pygame을 끄고 |
|
pygame.quit() |
|
# 윈도우를 닫는다 |
|
sys.exit() |
|
|
|
if event.type == KEYDOWN: |
|
# 키보드 이벤트, 키가 눌리기 시작했을 때 |
|
|
|
if event.key == K_d: |
|
# 키보드의 D를 누르면 |
|
# 플레이어 1을 X축 방향으로 10만큼 움직이기 |
|
player1.move(10, 0) |
|
|
|
if event.key == K_RIGHT: |
|
# 키보드의 오른쪽 방향키를 누르면 |
|
# 플레이어 2를 X축 방향으로 10만큼 움직이기 |
|
player2.move(10, 0) |
|
|
|
# 나머지 구현은 숙제로 한번 해보는 것을 추천함 |
|
|
|
# =========================================== |
|
|
|
# 여기서부터는 승리 조건을 설정함 |
|
# 이 외에도 다른 게임의 진행이나 게임의 규칙 등을 처리함 |
|
if player1.x >= 1280: |
|
# 플레이어 1이 먼저 제일 왼쪽까지 이동하면 |
|
write_text(640, 320, "플레이어 1 승리!") |
|
|
|
elif player2.x >= 1280: |
|
# 플레이어 2가 먼저 제일 왼쪽까지 이동하면 |
|
write_text(640, 320, "플레이어 2 승리!") |
|
|
|
# =========================================== |
|
|
|
# 여기에서는 실제로 게임 내용을 화면에 그림 |
|
|
|
# player1 위치에 반지름이 20인 원을 그림 |
|
# (0, 0, 255): 색깔, R=0, G=0, B=255 : 파란색 |
|
# (player1.x, player1.y): 원의 중심 좌표 (x, y) |
|
# 20: 반지름 크기 20 |
|
pygame.draw.circle(screen, (0, 0, 255), (player1.x, player1.y), 20) |
|
|
|
# 똑같이 player2 위치에 빨간 원을 그림 |
|
pygame.draw.circle(screen, (255, 0, 0), (player2.x, player2.y), 20) |
|
|
|
# 그린 것을 토대로 화면을 업데이트 해주기 |
|
pygame.display.flip() |
|
|
|
# FPS를 맞춤 |
|
clock.tick(FPS) |