파이썬 게임 (1) - 똥피하기

IngCoding·2022년 6월 28일
1

파이썬 #3 프로젝트

목록 보기
18/20

코드참고 : 나도코딩

1. 설명

  • pygame 라이브러리 활용하여 만든 게임입니다.
  • 랜덤으로 떨어지는 똥을 제한시간동안 피하면 클리어합니다.

2. 코드

import pygame
import random

# 기본 초기화(화면크기, 타이틀, FPS)
pygame.init()
screen_width = 480
screen_height = 640
screen = pygame.display.set_mode((screen_width, screen_height))

pygame.display.set_caption("똥피하기")

clock = pygame.time.Clock()

# 1. 사용자 게임 초기화 (배경화면, 이미지, 좌표, 속도, 폰트 등)

# 배경만들기
background = pygame.image.load(
    r"D:\python\practice\_project\pygame\avoid\background.jpg")

# 캐릭터만들기
character = pygame.image.load(
    r"D:\python\practice\_project\pygame\avoid\character.png")
character_size = character.get_rect().size
character_width = character_size[0]
character_height = character_size[1]
character_x_pos = (screen_width - character_width) / 2
character_y_pos = screen_height - character_height

to_x = 0  # 이동위치 변수 생성

speed = 0.3

# 피해야할 적(똥) 만들기
enemy = pygame.image.load( 
    r"D:\python\practice\_project\pygame\avoid\enemy.png")
enemy_size = enemy.get_rect().size
enemy_width = enemy_size[0]
enemy_height = enemy_size[1]
enemy_x_pos = random.randint(0, screen_width - enemy_width)
enemy_y_pos = 0
enemy_speed = 20

game_font = pygame.font.Font(None, 40)

total_time = 50000 # 제한시간

start_ticks = pygame.time.get_ticks()

running = True
while running:
    dt = clock.tick(30)

    # 2. 이벤트 처리(키보드, 마우스 등)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                to_x -= speed
            elif event.key == pygame.K_RIGHT:
                to_x += speed

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                to_x = 0

    # 3. 게임캐릭터 위치정의
    character_x_pos += to_x * dt
    enemy_y_pos += enemy_speed  # 떨어지기 설정

    if enemy_y_pos > screen_height:
        enemy_y_pos = 0
        enemy_x_pos = random.randint(0, screen_width - enemy_width)

    if character_x_pos < 0:
        character_x_pos = 0
    elif character_x_pos > screen_width - character_width:
        character_x_pos = screen_width - character_width

    # 4. 충돌 처리
    character_rect = character.get_rect()
    character_rect.left = character_x_pos
    character_rect.top = character_y_pos

    enemy_rect = enemy.get_rect()
    enemy_rect.left = enemy_x_pos
    enemy_rect.top = enemy_y_pos

    if character_rect.colliderect(enemy_rect):
        print("충돌했어요")
        running = False

    # 5. 화면에 그리기
    screen.blit(background, (0, 0))
    screen.blit(character, (character_x_pos, character_y_pos))
    screen.blit(enemy, (enemy_x_pos, enemy_y_pos))

    elapsed_time = (pygame.time.get_ticks() - start_ticks / 1000)

    timer = game_font.render(str(int(total_time - elapsed_time)), True,
                             (255, 0, 0))
    screen.blit(timer, (10, 10))

    if total_time - elapsed_time <= 0:
        print("타임아웃")
        running = False

    pygame.display.update()

pygame.quit()
profile
Data & PM

0개의 댓글