Skip to content

Latest commit

 

History

History
170 lines (144 loc) · 7.44 KB

공튀기기 게임.md

File metadata and controls

170 lines (144 loc) · 7.44 KB
공튀기기 게임
1️⃣ 플레이 장면

ballgame

2️⃣ 공튀기기 게임 설명

1. 주요 요소
1) 게임 화면: 게임은 직사각형 형태의 보드에서 진행된다. 보드에는 벽, 장애물, 목표 지점 등이 나타난다.
2) 공: 화면 내에서 자유롭게 움직이는 원형의 물체이며, 벽이나 패들에 부딪히면 튕겨 나간다.
3) 패들: 화면 아래쪽에 위치한 가로형의 물체로, 플레이어가 좌우로 움직여 공을 받아칠 수 있다.
4) 벽: 화면의 상단, 좌측, 우측에 위치한 경계선으로, 공이 벽에 부딪히면 튕겨 나온다.
2. 게임의 규칙
1) 공은 일정한 속도와 방향으로 이동한다.
2) 공이 벽에 부딪히면 반사되어 방향이 바뀐다.
3. 게임의 알고리즘
1) 사용자 입력(키보드)을 받아 공의 방향을 제어한다.

3️⃣ 조작법


키보드 입력 동작
왼쪽으로 이동
오른쪽으로 이동

4️⃣ 코드 상세 분석

■ Termial에 "pip install pygame"해서 설치 후 실행
import pygame
import sys
import로 필요한 라이브러리를 가져온다.
pygame: 게임 개발 라이브러리
sys: 프로그램 종료와 같은 시스템 작업에 사용
■ 초기 설정
pygame.init()
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Bounce Ball Game")
pygame.init()로 Pygame을 초기화한다.
화면 크기 설정
• WIDTH와 HEIGHT는 게임 창의 가로와 세로 크기를 픽셀 단위로 지정한다.
• screen은 게임 화면 객체로, pygame.display.set_mode()를 통해 생성된다.
• pygame.display.set_caption()은 게임 창의 제목을 설정한다.
■ 색상
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
WHITE, BLACK, RED는 RGB 색상값으로 정의되어 게임에서 사용된다.
• (255, 255, 255)는 흰색이다.
• (0, 0, 0)는 검은색이다.
• (255, 0, 0)는 빨간색이다.
■ 공과 패들
ball = pygame.Rect(WIDTH//2, HEIGHT//2, 20, 20)
paddle = pygame.Rect(WIDTH//2 - 60, HEIGHT - 30, 120, 20)
ball_speed = [5, 5]
paddle_speed = 10

clock = pygame.time.Clock()
➀ 공(ball)
pygame.Rect(WIDTH//2, HEIGHT//2, 20, 20)은 공의 위치와 크기를 정의한다.
공은 화면 중앙(WIDTH//2, HEIGHT//2)에서 시작하며, 크기는 20x20 픽셀이다.
➁ 패들(paddle)
pygame.Rect(WIDTH//2 - 60, HEIGHT - 30, 120, 20)은 패들의 위치와 크기를 정의한다.
패들은 화면 하단(HEIGHT - 30)에 위치하며, 가로 120픽셀, 세로 20픽셀이다.
➂ 속도
ball_speed는 공의 초기 속도를 [X축, Y축] 방향으로 정의한다.
paddle_speed는 패들의 이동 속도를 나타낸다.
➃ clock: pygame.time.Clock()은 게임의 FPS(초당 프레임)를 관리한다.

■ 게임 루프

while True:
    screen.fill(BLACK)
True를 조건으로 사용하여 게임이 종료될 때까지 무한히 반복된다.
screen.fill(BLACK)은 매 프레임마다 화면을 검은색으로 덮어줌으로써 이전 프레임의 내용이 남지 않도록 하고, 새롭게 그릴 화면을 준비한다.
- 이벤트 처리
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
pygame.event.get()은 발생한 모든 이벤트를 가져온다.
이 이벤트 루프에서는 게임 창을 닫으려고 하는 이벤트(pygame.QUIT)가 발생한 경우, 게임을 종료하도록 처리한다.
pygame.quit()은 Pygame 라이브러리의 종료를, sys.exit()은 프로그램 자체의 종료를 처리한다.
- 키 입력
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and paddle.left > 0:
        paddle.move_ip(-paddle_speed, 0)
    if keys[pygame.K_RIGHT] and paddle.right < WIDTH:
        paddle.move_ip(paddle_speed, 0)
pygame.key.get_pressed()는 현재 눌려져 있는 모든 키의 상태를 반환한다. 이를 통해 사용자가 어떤 키를 눌렀는지를 알 수 있다.
pygame.K_LEFT와 pygame.K_RIGHT는 각각 왼쪽 화살표와 오른쪽 화살표 키를 나타낸다.
왼쪽 화살표 키가 눌리면 paddle 객체를 왼쪽으로 이동시키고, 오른쪽 화살표 키가 눌리면 paddle 객체를 오른쪽으로 이동시킨다. 이동 범위는 paddle.left > 0 (왼쪽 끝)과 paddle.right < WIDTH (오른쪽 끝) 조건을 통해 화면 밖으로 나가지 않도록 제한한다.
- 공 이동
    ball.x += ball_speed[0]
    ball.y += ball_speed[1]
ball.x와 ball.y는 공의 현재 위치이다.
ball_speed는 공의 속도를 나타내는 리스트로, ball_speed[0]은 x축 속도, ball_speed[1]은 y축 속도를 의미한다.
매 프레임마다 공의 위치를 속도에 맞춰 업데이트하여 공을 이동시킨다.
- 벽에 튕기기
    if ball.left <= 0 or ball.right >= WIDTH:
        ball_speed[0] = -ball_speed[0]
    if ball.top <= 0:
        ball_speed[1] = -ball_speed[1]
    if ball.colliderect(paddle):
        ball_speed[1] = -ball_speed[1]
좌우 벽과 충돌: 공이 화면의 왼쪽 (ball.left <= 0) 또는 오른쪽 (ball.right >= WIDTH) 벽에 부딪히면 x축 속도(ball_speed[0])를 반전시킨다. 이를 통해 공이 벽에 튕기는 효과를 만든다.
상단 벽과 충돌: 공이 화면의 상단 (ball.top <= 0) 벽에 부딪히면 y축 속도(ball_speed[1])를 반전시킨다.
패들과 충돌: 공이 패들 (ball.colliderect(paddle))과 충돌하면, 공이 패들 위에서 튕겨 올라가도록 y축 속도를 반전시킨다.
- 게임 오버 조건 : 공이 화면 아래로 떨어졌을 때
   if ball.bottom >= HEIGHT:
       print("Game Over")
       pygame.quit()
       sys.exit()
공이 화면의 하단을 넘어가면(ball.bottom >= HEIGHT), 게임이 종료된 것으로 간주하고 "Game Over" 메시지를 출력한다.
그 후 pygame.quit()과 sys.exit()을 호출하여 게임을 종료한다.
- 그리기
    pygame.draw.ellipse(screen, WHITE, ball)
    pygame.draw.rect(screen, RED, paddle)
pygame.draw.ellipse(screen, WHITE, ball)는 공을 그린다. 공은 원 모양이므로 ellipse를 사용하며, ball 객체에 정의된 위치와 크기를 사용하여 그린다.
pygame.draw.rect(screen, RED, paddle)는 패들을 그린다. 패들은 직사각형 모양이므로 rect를 사용하여 paddle 객체에 정의된 위치와 크기를 바탕으로 그린다.
- 화면 업데이트 및 프레임 속도 설정
    pygame.display.flip()
    clock.tick(60)
pygame.display.flip()은 그린 내용을 실제로 화면에 반영한다. 이 함수는 화면을 업데이트하여 사용자에게 새로운 화면을 표시한다.
clock.tick(60)은 게임의 프레임 속도를 설정한다. 60은 초당 60프레임을 의미하며, 이를 통해 게임이 일정한 속도로 실행되도록 한다.