게임에서 타이머를 잘 만들어야한다. 시간을 측정하면서 경기를 진행하거나 점수를 주는 게임들이 많기 때문이다. 게임을 만들 때 시간을 어떻게 구하는가? 보통은 기준 시간대에서 현재시간을 빼는 방식으로 구하게 된다. 게임에서의 기준 시간은 1970년대를 기준으로 맞춰져있다. (처음 개발한 사람이 그렇게 했나보다) 그리고 보통 time 함수를 많이 쓰는데, 파이게임에서는 시간과 관련된 함수를 제공해주기 때문에, 여기서는 그것을 사용해보도록 하자.
대략 타이머를 만드는 것에 관련된 코드들만 한번 모아두었다. 나는 사용자에게 100초의 시간적 여유를 주고 싶기 때문에, total_time을 100으로 설정했다. 그리고 여기서 흐른 시간 elapsed_time을 뺀 값을 나타냄으로서 타이머를 구현하였다. 또, 여기서 게임화면은 계속 업데이트를 해줘야한다.
# 폰트 정의
# 폰트 객체 생성 (폰트, 크기)
# 디폴트 폰트 사용할 예정이라 그냥 None으로 적었음
game_font = pygame.font.Font(None, 40)
# 총 시간
total_time = 100
# 시작시간 정보
# 시작 tick을 받아옴
start_ticks = pygame.time.get_ticks()
# 타이머 집어넣기
# 경과 시간 계산
# 이 값이 ms (밀리세컨드)이기 때문에 초(s)로 바꾸려고 1000으로 나눈 것
elapsed_time = (pygame.time.get_ticks() - start_ticks)/1000
# 출력할 글자, True, 글자 색상 넣기
timer = game_font.render(str(int(total_time - elapsed_time)), True, (255,255,255))
# 출력할 글자, 위치
screen.blit(timer, (10,10))
# 만약 시간이 0 이하이면 게임종료
if total_time - elapsed_time <= 0:
print("Time out")
running = False
# 게임화면 업데이트 하기
pygame.display.update()
▷ 시연 영상
▷ 전체 코드
더보기
#10 타이머 만들기
import pygame
import time
pygame.init()
screen_width = 480
screen_height = 640
screen = pygame.display.set_mode((screen_width, screen_height))
clock = pygame.time.Clock()
pygame.display.set_caption("Let's make game")
background = pygame.image.load("C:/Users/Soyoung/Desktop/pygame/background.png")
character = pygame.image.load("C:/Users/Soyoung/Desktop/pygame/pika2.jpg")
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
ball = pygame.image.load("C:/Users/Soyoung/Desktop/pygame/ball.jpg")
ball_size = ball.get_rect().size
ball_width = ball_size[0]
ball_height = ball_size[1]
ball_x_pos = (screen_width/2) - (ball_width/2)
ball_y_pos = (screen_height/2) - (ball_height/2)
to_x =0
to_y = 0
character_speed = 0.5
# 폰트 정의
# 폰트 객체 생성 (폰트, 크기)
# 디폴트 폰트 사용할 예정이라 그냥 None으로 적었음
game_font = pygame.font.Font(None, 40)
# 총 시간
total_time = 100
# 시작시간 정보
# 시작 tick을 받아옴
start_ticks = pygame.time.get_ticks()
running = True
while running:
FPS = 60
dt = clock.tick(FPS)
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
elif event.key == pygame.K_RIGHT:
to_x += character_speed
elif event.key == pygame.K_UP:
to_y -= character_speed
elif event.key == pygame.K_DOWN:
to_y += character_speed
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
to_x = 0
elif event.key == pygame.K_UP or event.key == pygame.K_DOWN:
to_y = 0
character_x_pos += to_x * dt
character_y_pos += to_y * 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
if character_y_pos < 0:
character_y_pos = 0
elif character_y_pos > screen_height - character_height:
character_y_pos = screen_height - character_height
character_rect = character.get_rect()
character_rect.left = character_x_pos
character_rect.top = character_y_pos
ball_rect = ball.get_rect()
ball_rect.left = ball_x_pos
ball_rect.top = ball_y_pos
if character_rect.colliderect(ball_rect):
# 출력할 글자, 위치
ball_message = game_font.render("I caught Pikachu", True, (255,255,255))
screen.blit(ball_message, (150,200))
pygame.display.update()
time.sleep(5)
running = False
screen.blit(background, (0,0))
screen.blit(character,(character_x_pos, character_y_pos))
screen.blit(ball,(ball_x_pos, ball_y_pos))
pygame.display.update()
# 타이머 집어넣기
# 경과 시간 계산
# 이 값이 ms (밀리세컨드)이기 때문에 초(s)로 바꾸려고 1000으로 나눈 것
elapsed_time = (pygame.time.get_ticks() - start_ticks)/1000
# 출력할 글자, True, 글자 색상 넣기
timer = game_font.render(str(int(total_time - elapsed_time)), True, (255,255,255))
# 출력할 글자, 위치
screen.blit(timer, (10,10))
# 만약 시간이 0 이하이면 게임종료
if total_time - elapsed_time <= 0:
print("Time out")
running = False
# 게임화면 업데이트 하기
pygame.display.update()
screen.blit(background, (0,0))
pygame.display.update()
end_message = game_font.render("Game Finished !", True, (102,0,153))
screen.blit(end_message, (130,200))
pygame.display.update()
# 게임이 꺼지기 전에 3초정도 대기하기
pygame.time.delay(3000)
pygame.quit()
발걸음 : https://www.youtube.com/watch?v=lz1q-rZD-E8&list=PLyrrhz0LjbCKn82y_sDTywdIsbVmqCb4K&index=45
'python으로 게임 만들기 > pygame' 카테고리의 다른 글
[pygame] 11. 2D 게임의 기본 코드 흐름 (0) | 2024.02.24 |
---|---|
[pygame] 9. 텍스트 글자 삽입 (0) | 2024.02.24 |
[pygame] 8. 간단한 충돌처리 (0) | 2024.02.24 |
[pygame] 7. 충돌 처리를 위한 준비 (0) | 2024.02.24 |
[pygame] 6. FPS 설정2 (0) | 2024.02.24 |