일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 부트스트랩
- Pygame
- Game
- SMTP
- ndarray
- 쉬티
- udemy
- API플랫폼
- 웹페이지
- 최저가
- Python
- phython
- 파이썬
- Sheety
- 프로그램
- API
- 게임
- 파싱
- 프로젝트
- Endpoint
- 계산기
- twilio
- 웹크롤링
- Tequila
- class
- HTML
- HTTP
- 오류
- 상태코드
- 유데미
Archives
- Today
- Total
데이터 분석가
파이썬 breakout game 프로젝트(Udemy Final Project 5) 본문
안녕하세요 !
이번 시간에는 스티븐 잡스가 만들었던 breakout 이라는 게임을 파이썬 버전으로 만들어 보겠습니다
breakout 게임이란 이미 제 블로그에 있던 게임이기도 한데요, 이번에는 1:1 게임이 아닌
모든 벽돌을 제거해나가는 방식의 게임을 만들어 보겠습니다 !
import pygame
import sys
# 게임 상수
SCREEN_WIDTH, SCREEN_HEIGHT = 800, 600 # 화면 너비, 화면 높이
BALL_RADIUS = 10 # 공의 반지름
PADDLE_WIDTH, PADDLE_HEIGHT = 75, 15 # 패들의 너비, 패들의 높이
BRICK_WIDTH, BRICK_HEIGHT = 60, 15 # 벽돌의 너비, 벽돌의 높이
NUM_BRICKS_PER_ROW = 14 # 한 행당 벽돌 수
NUM_BRICK_ROWS = 6 # 벽돌 행 수
BALL_SPEED = 1 # 공의 속도
PADDLE_SPEED = 2 # 패들의 속도
# 색상
WHITE = (255, 255, 255) # 흰색
BLUE = (0, 0, 255) # 파란색
# Pygame 초기화
pygame.init()
# 디스플레이 설정
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
# 애셋 설정
ball = pygame.Rect(SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2, BALL_RADIUS, BALL_RADIUS) # 공
paddle = pygame.Rect((SCREEN_WIDTH - PADDLE_WIDTH) // 2, SCREEN_HEIGHT - PADDLE_HEIGHT - 10, PADDLE_WIDTH, PADDLE_HEIGHT) # 패들
bricks = [] # 벽돌
for i in range(NUM_BRICK_ROWS):
for j in range(NUM_BRICKS_PER_ROW):
brick = pygame.Rect(j * (BRICK_WIDTH + 5), i * (BRICK_HEIGHT + 5), BRICK_WIDTH, BRICK_HEIGHT)
bricks.append(brick)
# 공의 방향
ball_dx = BALL_SPEED
ball_dy = -BALL_SPEED
# 게임 루프
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT: # 게임 종료
pygame.quit()
sys.exit()
# 공의 움직임
ball.left += ball_dx
ball.top += ball_dy
# 공이 벽에 부딪힘
if ball.left <= 0 or ball.right >= SCREEN_WIDTH:
ball_dx *= -1
if ball.top <= 0:
ball_dy *= -1
if ball.bottom >= SCREEN_HEIGHT: # 게임 오버
print("게임 오버!")
pygame.quit()
sys.exit()
# 공이 패들에 부딪힘
if ball.colliderect(paddle):
ball_dy *= -1
# 공이 벽돌에 부딪힘
for brick in bricks:
if ball.colliderect(brick):
ball_dy *= -1
bricks.remove(brick)
break
# 패들의 움직임
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and paddle.left > 0: # 패들이 왼쪽으로 움직임
paddle.left -= PADDLE_SPEED
if keys[pygame.K_RIGHT] and paddle.right < SCREEN_WIDTH:
paddle.left += PADDLE_SPEED
# 스크린
screen.fill((0, 0, 0))
# 볼 그리기
pygame.draw.ellipse(screen, WHITE, ball)
# 패들 그리기
pygame.draw.rect(screen, WHITE, paddle)
# Draw bricks
for brick in bricks:
pygame.draw.rect(screen, BLUE, brick)
pygame.display.flip()
다음과 같이 코드를 짤 수 있습니다 !
이전 days 22에서 만들었던 1:1 대전으로 만들었던 ball, paddle 방식과는 다르게
쌓여있는 블록들을 제거해나가는 게임입니다 !
와 잘 됩니다 !
잡스가 만들었던 breackout 게임을 저도 만들어볼 수 있는 시간이었습니다 !
'유데미 부트캠프 프로젝트(Final)' 카테고리의 다른 글
ToDoList 웹 페이지 구축 (Udemy Project 7) (0) | 2023.06.28 |
---|---|
노트북 하기 좋은 카페 찾기 프로젝트(Udemy Final Project 6) (0) | 2023.06.27 |
파이썬 타이핑 테스트 프로젝트(Udemy Final Project 4) (0) | 2023.06.25 |
파이썬 이미지 워터마크 프로젝트(Udemy Final Project 3) (0) | 2023.06.01 |
파이썬 틱택토 프로젝트(Udemy Final Project 2) (0) | 2023.05.31 |
Comments