일단 적을 생성해주고 캐릭터가 적과 충돌 했을 때 print문으로 "충돌했어요"라고 나오고
게임이 종료되도록 코딩을 해보겠다.
그러기 위해선 먼저 적을 게임의 중앙에 배치 시키고 rect를 설정하는 코드가 필요하다
# 충돌 처리를 위한 rect 정보 업데이트
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
캐릭터도 rect 를 해줘야하는데 그 이유는 캐릭터를 기준으로 사각형의 정보를 가지고 적의 사각형과 충돌 했을 때
메시지가 나오도록 설정하기 위해서이다. 그러기 위해선 캐릭터의 사각형을 기준으로 왼쪽과 위쪽의 즉 x와 y의 정보를 left 와 top에
넣어 줬다. 적도 마찬가지로 해주면 된다.
그리고 이 구문을 이벤트 루프 안에 넣어서 계속해서 변수를 업데이트 해주고 만약에 충돌이 일어났을 때
print문이 실행되고 게임을 멈춰주면 된다.
# 충돌설정
if character_rect.colliderect(enemy_rect): # 만약 캐릭터가 적과 충돌 했을 때
print("충돌했어요")
running = False
완성된 코드는 아래와 같다
import pygame
pygame.init() # 초기화(반드시 필요)
# 게임 화면 크기 설정
screen_width = 480
screen_height = 640
screen = pygame.display.set_mode((screen_width, screen_height))
# 화면 타이틀 설정
pygame.display.set_caption("Nado Game")
# FPS 설정
clock = pygame.time.Clock()
# 배경 이미지 불러오기
background = pygame.image.load("/Users/choewonjun/PycharmProjects/game_/pygame_basic/background.jpeg")
# 캐릭터(스프라이트) 불러오기
character = pygame.image.load("/Users/choewonjun/PycharmProjects/game_/pygame_basic/character.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 = pygame.image.load("/Users/choewonjun/PycharmProjects/game_/pygame_basic/enemy.png")
enemy_size = enemy.get_rect().size # 이미지 크기를 구해옴
enemy_width = enemy_size[0] # 적의 가로크기
enemy_height = enemy_size[1] # 적의 세로크기
enemy_x_pos = (screen_width / 2) - (enemy_width / 2)# 화면 가로의 절반 크기에 해당하는 곳에 위치 (가로)
enemy_y_pos = (screen_height / 2) - (enemy_height / 2) # 화면 가장 아래에 위치 (세로)
# 이동할 좌표
x_to = 0
y_to = 0
# 이동속도
character_speed = 0.6
# 이벤트 루프
running = True # 게임이 진행중인가?
while running:
df = clock.tick(60) # 게임 프레임 설정
# 게임에서 이벤트가 발생할 때
for event in pygame.event.get():
if event.type == pygame.QUIT: # 창 닫기 버튼을 눌렀을 떄
running = False
if event.type == pygame.KEYDOWN: # 키를 눌렀을 때
if event.key == pygame.K_LEFT:
x_to -= character_speed
elif event.key == pygame.K_RIGHT:
x_to += character_speed
elif event.key == pygame.K_UP:
y_to -= character_speed
elif event.key == pygame.K_DOWN:
y_to += character_speed
if event.type == pygame.KEYUP: # 키를 눌렀다가 뗐을 때
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
x_to = 0
if event.key == pygame.K_DOWN or event.key == pygame.K_UP:
y_to = 0
character_x_pos += x_to * df
character_y_pos += y_to * df
# 가로 경계값 처리
if character_x_pos < 0 :
character_x_pos = 0
elif character_x_pos > screen_width - character_width:
character_x_pos = screen_width - character_width
# 새로 경계값 처리 (아래로 갈수록 y값은 커짐)
if character_y_pos < 0 :
character_y_pos = 0
elif character_y_pos > screen_height - character_height:
character_y_pos = screen_height - character_height
# 충돌 처리를 위한 rect 정보 업데이트
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
# 배경 이미지 설정
# screen.fill((0,0,255)) rgb값으로 배경을 설정할 수 있음
screen.blit(background, (0, 0))
# 캐릭터 그리기
screen.blit(character, (character_x_pos, character_y_pos))
# 적 그리기
screen.blit(enemy, (enemy_x_pos, enemy_y_pos))
# 게임 화면을 다시 그리기
pygame.display.update()
# 게임 종료
pygame.quit()
'풍선 터트리기 게임' 카테고리의 다른 글
게임 만들기 (4) - FPS 설정 (0) | 2021.05.12 |
---|---|
게임 만들기 (2) - FPS 설정 (0) | 2021.05.09 |
게임 만들기 (1) - 기본설정 (0) | 2021.05.09 |