1) 게임 화면: 게임은 직사각형 형태의 보드 위에서 진행된다. 사용자의 위치는 한 칸으로 정의되고 움직임이 가능한 영역은 공백이며 이 외의 칸은 움직임이 제한되는 장애물로 인식한다.
2) 게임 목적: 사용자가 출발점에서 미로를 풀어 도착점의 위치를 찾아내 접촉을 하는 것이 최종 목적이다.
3) 게임 주의점: 도착점에 사용자의 점이 스치는 것이 아닌 접촉이 되어야 게임이 끝난다.
사용자의 점은 움직임이 가능한 영역에선 상하좌우 자유롭게 이동가능하며, 이동 방향은 사용자 입력에 따라 바뀐다.
사용자의 점이 도착점에 도착하면 게임은 종료된다.
공백이 아닌 칸은 무시가 불가능한 장애물로 인식이 되므로 이 제한된 칸을 피하며 도착점에 도착하여야 한다.
1) 입력 처리: 사용자 입력(키보드)을 받아 사용자 위치의 방향을 제어한다.
2) 게임 상태 업데이트: 사용자의 위치를 업데이트하고, 사용자의 점이 도착점에 충돌이 발생했는지 등을 체크하여 게임 상태를 갱신한다.
키보드 입력
동작
↑
위쪽으로 이동
↓
아래쪽으로 이동
←
왼쪽으로 이동
→
오른쪽으로 이동
Termial에 "pip install pygame"해서 설치 후 실행
-pygame: 파이썬용 2D 게임 라이브러리. 화면, 입력, 오디오 등 게임 개발에 필요한 기능을 제공.
-sys: 프로그램 종료(sys.exit()) 등을 위해 사용.
pygame .init ()
WIDTH , HEIGHT = 800 , 600
screen = pygame .display .set_mode ((WIDTH , HEIGHT ))
pygame .display .set_caption ("Maze Escape" )
-pygame.init(): pygame 모듈 초기화.
-WIDTH, HEIGHT: 게임 창의 크기(800px 너비, 600px 높이).
-pygame.display.set_mode((WIDTH, HEIGHT)): 게임 창을 생성.
-pygame.display.set_caption(): 창의 제목을 "Maze Escape"로 설정.
WHITE = (255 , 255 , 255 )
BLACK = (0 , 0 , 0 )
GREEN = (0 , 255 , 0 )
RGB 색상 값을 사용해 게임에서 사용될 색상을 정의:
-WHITE: 흰색 (배경에 사용될 가능성).
-GREEN: 초록색 (목표 지점에 사용될 가능성).
player = pygame .Rect (50 , 50 , 30 , 30 )
goal = pygame .Rect (WIDTH - 80 , HEIGHT - 80 , 50 , 50 )
walls = [
pygame .Rect (200 , 100 , 400 , 20 ),
pygame .Rect (200 , 200 , 20 , 300 ),
pygame .Rect (400 , 300 , 300 , 20 )
]
clock = pygame .time .Clock ()
pygame.Rect 객체: 사각형을 나타내는 클래스. 게임의 충돌 감지나 위치 확인 등에 유용.
pygame.Rect(x, y, width, height): 사각형의 시작 좌표 (x, y)와 크기 (width, height)를 지정.
시작 위치 (50, 50)에 크기 30x30의 사각형. 이 게임에서 조작 가능한 "플레이어" 역할.
-목표 지점. 화면 오른쪽 하단 (WIDTH - 80, HEIGHT - 80)에 크기 50x50의 사각형.
-이 지점에 도달하면 게임에서 승리할 수 있음.
미로를 구성하는 벽 목록. 각 pygame.Rect 객체는 게임에서 장애물 역할을 함.
-첫 번째: (200, 100) 위치, 크기 400x20.
-두 번째: (200, 200) 위치, 크기 20x300.
-세 번째: (400, 300) 위치, 크기 300x20..
while True :
screen .fill (WHITE )
각 프레임마다 배경을 다시 그려 이전 프레임의 잔상이 남지 않도록 한다.
for event in pygame .event .get ():
if event .type == pygame .QUIT :
pygame .quit ()
sys .exit ()
게임 창을 닫을 때((QYIT) 이벤트) Pygame과 프로그램을 종료한다.
keys = pygame .key .get_pressed ()
if keys [pygame .K_UP ] and player .top > 0 :
player .move_ip (0 , - 5 )
if keys [pygame .K_DOWN ] and player .bottom < HEIGHT :
player .move_ip (0 , 5 )
if keys [pygame .K_LEFT ] and player .left > 0 :
player .move_ip (- 5 , 0 )
if keys [pygame .K_RIGHT ] and player .right < WIDTH :
player .move_ip (5 , 0 )
화살표 키(UP, DOWN, LEFT, RIGHT)로 플레이어를 이동시킨다.
각 키의 따라 플레이어의 객체 위치를 조정한다.
UP, DOWN, LEFT, RIGHT에 따라 5칸씩 움직인다.
for wall in walls :
if player .colliderect (wall ):
if keys [pygame .K_UP ]:
player .move_ip (0 , 5 )
if keys [pygame .K_DOWN ]:
player .move_ip (0 , - 5 )
if keys [pygame .K_LEFT ]:
player .move_ip (5 , 0 )
if keys [pygame .K_RIGHT ]:
player .move_ip (- 5 , 0 )
벽에 부딪히면 이전 위치로 되돌려 충돌을 방지한다. 예를 들어, UP 키로 이동했을 때 벽에 충돌하면 원래 위치로 돌아간다.
if player .colliderect (goal ):
print ("You Win!" )
pygame .quit ()
sys .exit ()
colliderect() 메서드는 두 사각형(Rect 객체)이 충돌했는지를 확인한다.
두 사각형이 겹치면 True를 반환하고, 겹치지 않으면 False를 반환한다.
플레이어가 출구와 충돌하면 "You Win!" 메시지를 출력하고 게임을 종료한다.
pygame .draw .rect (screen , GREEN , goal )
pygame .draw .rect (screen , BLACK , player )
for wall in walls :
pygame .draw .rect (screen , BLACK , wall )
draw.rect()를 사용하여 플레이어, 벽, 목표를 화면에 그린다.
pygame .display .flip ()
clock .tick (60 )
pygame.display.flip()은 모든 그림이 화면에 반영되도록 한다.
clock.tick(60)은 게임 속도를 초당 60프레임으로 제한한다.