똥피하기 게임

jurin·2020년 9월 15일
0

##################################################################
나도 코딩 강의를 듣고 정리한 내용입니다.
출처 : 나도코딩 https://www.youtube.com/channel/UC7iAOLiALt2rtMVAWWl4pnw
##################################################################




Quiz

Quiz) 하늘에서 떨어지는 똥 피하기 게임을 만드시오

[게임 조건]
1. 캐릭터는 화면 가장 아래에 위치, 좌우로만 이동 가능
2. 똥은 화면 가장 위에서 떨어짐. x 좌표는 매번 랜덤으로 설정
3. 캐릭터가 똥을 피하면 다음 똥이 다시 떨어짐
4. 캐릭터가 똥과 충돌하면 게임 종료
5. FPS는 30으로 고정

[게임 이미지]
1. 배경 : 640 * 480 (세로 가로) - background.png
2. 캐릭터 : 70 * 70 - character.png
3. 똥 : 70 * 70 - enemy.png

코드

import pygame
from random import *
##############################################
# 기본 초기화 (반드시 해야 하는 것들)

pygame.init()  # 초기화 (반드시 필요)

# 화면 크기 설정
screen_width = 480  # 가로
screen_height = 640  # 세로
screen = pygame.display.set_mode((screen_width, screen_height))

# 화면 타이틀 설정
pygame.display.set_caption("Ju Game")  # 게임 이름

# FPS
clock = pygame.time.Clock()
##############################################


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

# 배경 만들기
background = pygame.image.load(
    "D:\\바탕화면\\개인 공부\\game\\game.py\\background.png")

# 캐릭터
character = pygame.image.load("D:\\바탕화면\\개인 공부\\game\\game.py\\char.png")

character_size = character.get_rect().size
character_width = character_size[0]
character_height = character_size[1]

character_x_pos = (screen_width / 2) - (character_width/2)
character_y_pos = (screen_height) - (character_height)

# 똥
enemy_1 = pygame.image.load("D:\\바탕화면\\개인 공부\\game\\game.py\\enemy.png")

enemy_1_size = enemy_1.get_rect().size
enemy_1_width = enemy_1_size[0]
enemy_1_height = enemy_1_size[1]

enemy_1_x_pos = randint(0, (screen_width) - (character_width))
enemy_1_y_pos = 0
enemy_1_speed = randint(10, 20)

enemy_2 = pygame.image.load("D:\\바탕화면\\개인 공부\\game\\game.py\\enemy.png")

enemy_2_size = enemy_2.get_rect().size
enemy_2_width = enemy_2_size[0]
enemy_2_height = enemy_2_size[1]

enemy_2_x_pos = randint(0, (screen_width) - (character_width))
enemy_2_y_pos = 0
enemy_2_speed = randint(10, 20)

enemy_3 = pygame.image.load("D:\\바탕화면\\개인 공부\\game\\game.py\\enemy.png")

enemy_3_size = enemy_3.get_rect().size
enemy_3_width = enemy_3_size[0]
enemy_3_height = enemy_3_size[1]

enemy_3_x_pos = randint(0, (screen_width) - (character_width))
enemy_3_y_pos = 0
enemy_3_speed = randint(10, 20)

# 폰트
game_font = pygame.font.Font(None, 40)

# 시작 시간
start_ticks = pygame.time.get_ticks()

# 이동
to_x = 0
to_y = 0

character_speed = 1.1

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 -= character_speed
            if event.key == pygame.K_RIGHT:
                to_x += character_speed
            if event.key == pygame.K_UP:
                to_y = 0
            if event.key == pygame.K_DOWN:
                to_y = 0

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

    # 타이머 집어넣기
    # 경과 시간 계산
    elapsed_time = (pygame.time.get_ticks() - start_ticks) / 1000

    timer = game_font.render(str(int(elapsed_time)), True, (255, 255, 255))

    # 3. 게임 캐릭터 위치 정의
    character_x_pos += to_x * dt

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

    enemy_1_y_pos += enemy_1_speed

    if enemy_1_y_pos > screen_height:
        enemy_1_y_pos = 0
        enemy_1_x_pos = randint(0, (screen_width) - (character_width))

    enemy_2_y_pos += enemy_2_speed

    if enemy_2_y_pos > screen_height:
        enemy_2_y_pos = 0
        enemy_2_x_pos = randint(0, (screen_width) - (character_width))

    enemy_3_y_pos += enemy_3_speed

    if enemy_3_y_pos > screen_height:
        enemy_3_y_pos = 0
        enemy_3_x_pos = randint(0, (screen_width) - (character_width))

    # 4. 충돌 처리

    character_rect = character.get_rect()
    character_rect.left = character_x_pos
    character_rect.top = character_y_pos

    enemy_1_rect = enemy_1.get_rect()
    enemy_1_rect.left = enemy_1_x_pos
    enemy_1_rect.top = enemy_1_y_pos

    enemy_2_rect = enemy_2.get_rect()
    enemy_2_rect.left = enemy_2_x_pos
    enemy_2_rect.top = enemy_2_y_pos

    # enemy_3_rect = enemy_3.get_rect()
    # enemy_3_rect.left = enemy_3_x_pos
    # enemy_3_rect.top = enemy_3_y_pos

    if character_rect.colliderect(enemy_1_rect):
        print("충돌 발생")
        running = False
    elif character_rect.colliderect(enemy_2_rect):
        print("충돌 발생")
        running = False
    # elif character_rect.colliderect(enemy_3_rect):
    #     print("충돌 발생")
    #     running = False

    # 5. 화면에 그리기

    screen.blit(background, (0, 0))
    screen.blit(character, (character_x_pos, character_y_pos))
    screen.blit(enemy_1, (enemy_1_x_pos, enemy_1_y_pos))
    screen.blit(enemy_2, (enemy_2_x_pos, enemy_2_y_pos))
    screen.blit(timer, (10, 10))

    # if elapsed_time > 20:
    #     screen.blit(enemy_3, (enemy_3_x_pos, enemy_3_y_pos))

    pygame.display.update()  # 게임화면을 다시 그리기!


pygame.time.delay(2000)
pygame.quit()
profile
anaooauc1236@naver.com

0개의 댓글