AI
파이썬 벽돌깨기 게임 만들기
헬로우제이제이
2024. 4. 9. 14:41
728x90
반응형
전자오락실이라는 곳이 있었다. 어릴 적 나는 전자오락에 미쳐있었고 돈만 생기면 가곤 했었다. 그때에도 합법적 전자오락실이 있었고 불법 전자오락실이 있었다. 불법 전자오락실이라고 해서 나쁜 곳은 아니었고 새로운, 더 재미난 게임이 많았던 걸로 기억된다. 그 당시 주로 했었던 것 중의 하나가 벽돌깨기 였다.
챗GPT도 혹시 만들어 줄까 해서 시도해보았고 결과는 대성공, 자 한번 재미삼아 만들어보자, 아니 챗GPT에게 요구사항을 전달해보자.
- 소스
import pygame import random # 초기화 pygame.init() # 화면 설정 WIDTH, HEIGHT = 800, 600 WIN = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("벽돌깨기") # 색깔 WHITE = (255, 255, 255) BLACK = (0, 0, 0) RED = (255, 0, 0) BLUE = (0, 0, 255) # 게임 설정 PADDLE_WIDTH, PADDLE_HEIGHT = 200, 20 PADDLE_SPEED = 10 BALL_RADIUS = 10 BALL_SPEED_X = 7 BALL_SPEED_Y = -7 BRICK_WIDTH, BRICK_HEIGHT = 100, 40 BRICK_ROWS = 5 BRICK_COLS = 8 # 게임 요소 paddle = pygame.Rect((WIDTH - PADDLE_WIDTH) // 2, HEIGHT - PADDLE_HEIGHT - 10, PADDLE_WIDTH, PADDLE_HEIGHT) ball = pygame.Rect(WIDTH // 2 - BALL_RADIUS, HEIGHT // 2 - BALL_RADIUS, BALL_RADIUS * 2, BALL_RADIUS * 2) bricks = [] for row in range(BRICK_ROWS): for col in range(BRICK_COLS): brick = pygame.Rect(col * (BRICK_WIDTH + 5) + 30, row * (BRICK_HEIGHT + 5) + 50, BRICK_WIDTH, BRICK_HEIGHT) bricks.append(brick) # 공 이동 def move_ball(): global BALL_SPEED_X, BALL_SPEED_Y ball.x += BALL_SPEED_X ball.y += BALL_SPEED_Y # 벽과 충돌 체크 if ball.left <= 0 or ball.right >= WIDTH: BALL_SPEED_X *= -1 if ball.top <= 0: BALL_SPEED_Y *= -1 # 패들과 충돌 체크 if ball.colliderect(paddle): BALL_SPEED_Y *= -1 # 벽돌과 충돌 체크 for brick in bricks: if ball.colliderect(brick): bricks.remove(brick) BALL_SPEED_Y *= -1 # 패들 이동 def move_paddle(keys): if keys[pygame.K_LEFT] and paddle.left > 0: paddle.x -= PADDLE_SPEED if keys[pygame.K_RIGHT] and paddle.right < WIDTH: paddle.x += PADDLE_SPEED # 게임 루프 def main(): clock = pygame.time.Clock() run = True while run: clock.tick(60) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False keys = pygame.key.get_pressed() move_paddle(keys) move_ball() # 게임화면 그리기 WIN.fill(BLACK) pygame.draw.rect(WIN, WHITE, paddle) pygame.draw.circle(WIN, RED, ball.center, BALL_RADIUS) for brick in bricks: pygame.draw.rect(WIN, BLUE, brick) pygame.display.update() # 게임 종료 조건 if len(bricks) == 0: print("게임 클리어!") run = False pygame.quit() if __name__ == "__main__": main() |
실행) pygame을 설치해보자.
실행) 그리고 소스를 작성해보자. 우선 새파일을 연 후, 프로그램 이름을 "BlockBreak.py"로 정해보자. 그리고 위의 소스를 넣어보자.
실행) 아래와 같이 "Python파일 실행"을 클릭해보자.
실행) 아래와 같이 잘 동작하는 것을 확인할 수 있다.
단점이 있다. 공이 한번만 나온다... 공을 놓치면 또 나오게 요청해보자.
- 소스
import pygame import random # 초기화 pygame.init() # 화면 설정 WIDTH, HEIGHT = 800, 600 WIN = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("벽돌깨기") # 색깔 WHITE = (255, 255, 255) BLACK = (0, 0, 0) RED = (255, 0, 0) BLUE = (0, 0, 255) # 게임 설정 PADDLE_WIDTH, PADDLE_HEIGHT = 200, 20 PADDLE_SPEED = 10 BALL_RADIUS = 10 BALL_SPEED_X = 7 BALL_SPEED_Y = -7 BRICK_WIDTH, BRICK_HEIGHT = 100, 40 BRICK_ROWS = 5 BRICK_COLS = 8 # 게임 요소 paddle = pygame.Rect((WIDTH - PADDLE_WIDTH) // 2, HEIGHT - PADDLE_HEIGHT - 10, PADDLE_WIDTH, PADDLE_HEIGHT) ball = pygame.Rect(WIDTH // 2 - BALL_RADIUS, HEIGHT // 2 - BALL_RADIUS, BALL_RADIUS * 2, BALL_RADIUS * 2) bricks = [] for row in range(BRICK_ROWS): for col in range(BRICK_COLS): brick = pygame.Rect(col * (BRICK_WIDTH + 5) + 30, row * (BRICK_HEIGHT + 5) + 50, BRICK_WIDTH, BRICK_HEIGHT) bricks.append(brick) # 공 이동 def move_ball(): global BALL_SPEED_X, BALL_SPEED_Y ball.x += BALL_SPEED_X ball.y += BALL_SPEED_Y # 벽과 충돌 체크 if ball.left <= 0 or ball.right >= WIDTH: BALL_SPEED_X *= -1 if ball.top <= 0: BALL_SPEED_Y *= -1 # 패들과 충돌 체크 if ball.colliderect(paddle): BALL_SPEED_Y *= -1 # 벽돌과 충돌 체크 for brick in bricks: if ball.colliderect(brick): bricks.remove(brick) BALL_SPEED_Y *= -1 # 공이 화면 아래로 떨어졌을 때 초기 위치로 되돌리기 if ball.top >= HEIGHT: reset_ball() # 패들 이동 def move_paddle(keys): if keys[pygame.K_LEFT] and paddle.left > 0: paddle.x -= PADDLE_SPEED if keys[pygame.K_RIGHT] and paddle.right < WIDTH: paddle.x += PADDLE_SPEED # 공 초기 위치로 되돌리기 def reset_ball(): global BALL_SPEED_X, BALL_SPEED_Y ball.center = (WIDTH // 2, HEIGHT // 2) # 속도도 재설정 BALL_SPEED_X = 7 BALL_SPEED_Y = -7 # 게임 루프 def main(): clock = pygame.time.Clock() run = True while run: clock.tick(60) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False elif event.type == pygame.KEYDOWN and event.key == pygame.K_RETURN: reset_ball() keys = pygame.key.get_pressed() move_paddle(keys) move_ball() # 게임화면 그리기 WIN.fill(BLACK) pygame.draw.rect(WIN, WHITE, paddle) pygame.draw.circle(WIN, RED, ball.center, BALL_RADIUS) for brick in bricks: pygame.draw.rect(WIN, BLUE, brick) pygame.display.update() # 게임 종료 조건 if len(bricks) == 0: print("게임 클리어!") run = False pygame.quit() if __name__ == "__main__": main() |
어떤가? 재미있지 않은가? 챗GPT를 이용하여 더 많은 아이디어를 통해 게임 개발자가 되어보자!!!
728x90
반응형