카테고리 없음

챗GPT & 파이썬 활용해서, 플래피버드 점핑 게임 1분만에 만들기 (Chat gpt & Python, Flappy bird Jumping game programming)

낌준희 Kkimjunhee 2023. 7. 16. 20:36
반응형

안녕하세요. 낌준희 (Youtube & Instagram : kkimjunhee)입니다.

챗GPT 열풍이 시작한지 꽤 됐는데, 오늘은 gpt와 파이썬만을 활용해서, 1분만에 게임 만드는 방법을 보여드리겠습니다.

 

★실제 제가 만드는데는, 파이썬의 이해도가 거의 없는 상태에서 진행하는거였어서, 10분 정도 소요된거 같은데, 제가 알려드리는 가이드에 따라서 그냥 하시기만 한다면, 정말 1분만에 가능합니다.. (*에러만 안 난다면 10초도 가능할듯..)

 

★대신 GPT 계정이 있고, 파이썬이 설치돼있다는 가정하에 입니다!

 


1. 먼저, GPT에 로그인해서, 바로 "플래피 버드 게임 코드 만들어줘"라는 입력을 합니다.

그럼 위와 같이 GPT가 알아서, 코딩을 해주고요.

 

 

 

 

2. 해당 코드를, 파이썬에 복사해서 넣어주기만 하면되는데요, 우선 "pygame"이라는 폴더명으로 새 파일을 만들어서 파이썬 코딩 입력창을 활성화시키고, 코드를 복사해서, "F5"를 실행하면 pygame 모듈이 없다는 에러가 뜰겁니다.

 

 

 

 

 

3. 그러면, pygame 모듈만 설치를 해주면 되는데, 제 Visual studio code 버전은, 상단에 빨간 네모 정지를 눌렀더니, 터미널이 알아서 실행되면서 모듈을 설치해주네요.

 

자동 설치가 안되시는 분들은, 하단 "TERMINAL"에서, "pip install pygame' 명령어를 넣어줘 직접 실행시켜주시면 모듈이 다운로드 될겁니다.

 

 

 

 

4. 오류가 발생한게, 저같은 경우는 "bird.png"를 따로 넣어줘야만 코드가 실행되게끔 지정이 됐는데, 저는 그럼 아무 png 그림 파일을 "pygame" 폴더 경로에 업로드해서 실행시켜보겠습니다.

 

 

 

 

 

 

5. 이전 실행 때는 바로 됐는데, gpt가 이번엔 좀 다르게 코딩을 해줘서 인지, "name 'GREEN' is not defined" 에러가 발생해서, 해당 에러에 대해서 해결 방법을 물어본 뒤, "전체 코딩"을 다시 해달라고 해서, 다시 받아, 파이썬에 복사했습니다.

 

 

Space 키로 점프가 활성화되는, 플래피버드 게임 만들기 끄읕~!

 

제가 지정한 풀 코드를 참고로 하단에 넣어두겠습니다. 참고해서 코딩해보시길 바랍니다~!

 

 

 

 

 

 

 

import pygame
import sys
import random

# Constants
SCREEN_WIDTH = 400
SCREEN_HEIGHT = 600
GRAVITY = 0.25
FLAP_SPEED = -4
PIPE_GAP = 150
PIPE_WIDTH = 60
PIPE_VELOCITY = -2
BIRD_WIDTH = 40
BIRD_HEIGHT = 30
FPS = 60

# Colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)

class Bird:
    def __init__(self):
        self.x = 50
        self.y = SCREEN_HEIGHT // 2
        self.velocity = 0
        self.alive = True
        self.image = pygame.image.load('bird.png').convert_alpha()

    def flap(self):
        self.velocity = FLAP_SPEED

    def update(self):
        self.velocity += GRAVITY
        self.y += self.velocity

    def draw(self, screen):
        screen.blit(self.image, (self.x, self.y))

    def check_collision(self, pipes):
        if self.y < 0 or self.y + BIRD_HEIGHT > SCREEN_HEIGHT:
            self.alive = False
        for pipe in pipes:
            if (self.x + BIRD_WIDTH > pipe.x and self.x < pipe.x + PIPE_WIDTH) and (
                self.y < pipe.gap_top or self.y + BIRD_HEIGHT > pipe.gap_bottom
            ):
                self.alive = False

class Pipe:
    def __init__(self, x):
        self.x = x
        self.gap_top = random.randint(50, SCREEN_HEIGHT - PIPE_GAP - 50)
        self.gap_bottom = self.gap_top + PIPE_GAP

    def update(self):
        self.x += PIPE_VELOCITY

    def draw(self, screen):
        pygame.draw.rect(screen, GREEN, (self.x, 0, PIPE_WIDTH, self.gap_top))
        pygame.draw.rect(screen, GREEN, (self.x, self.gap_bottom, PIPE_WIDTH, SCREEN_HEIGHT - self.gap_bottom))

def main():
    pygame.init()
    screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
    pygame.display.set_caption('Flappy Bird')

    clock = pygame.time.Clock()

    bird = Bird()
    pipes = []

    score = 0
    font = pygame.font.Font(None, 36)

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE and bird.alive:
                    bird.flap()

        if bird.alive:
            bird.update()

            # Create new pipes
            if len(pipes) == 0 or pipes[-1].x < SCREEN_WIDTH - 200:
                pipes.append(Pipe(SCREEN_WIDTH))

            # Remove off-screen pipes
            if pipes[0].x + PIPE_WIDTH < 0:
                pipes.pop(0)

            for pipe in pipes:
                pipe.update()

            # Check for collisions
            bird.check_collision(pipes)

            # Check for score
            if pipes and bird.x > pipes[0].x + PIPE_WIDTH:
                score += 1
                pipes.pop(0)

        screen.fill(BLACK)

        # Draw pipes
        for pipe in pipes:
            pipe.draw(screen)

        # Draw bird
        bird.draw(screen)

        # Draw score
        score_text = font.render(f'Score: {score}', True, WHITE)
        screen.blit(score_text, (10, 10))

        pygame.display.update()
        clock.tick(FPS)

if __name__ == '__main__':
    main()
반응형