조종 다음은 개발

일단 적을 생성해주고 캐릭터가 적과 충돌 했을 때 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
profile

조종 다음은 개발

@타칸

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!