충돌은 많은 장르의 비디오 게임에서 게임 플레이의 기본 요소입니다. 충돌은 플레이어가 장애물을 탐색하고 적을 피하며 보상을 수집하도록 요구하여 게임에 도전과 흥미를 더합니다.

게임에서 충돌 감지 및 처리를 구현하는 것은 플레이어의 참여와 흥미를 유지하는 사실적이고 역동적인 게임플레이 메커니즘을 만드는 데 매우 중요합니다. 아케이드 라이브러리에 내장된 기능을 사용하면 충돌을 쉽게 감지할 수 있습니다.

간단한 게임 만들기

시작하기 전에 장치에 pip가 설치되어 있는지 확인하세요. 이 명령을 사용하여 아케이드 라이브러리를 설치합니다:

 pip install arcade 

그런 다음 플레이어가 적 사각형과의 충돌을 피하기 위해 좌우로 이동할 수 있는 게임을 만듭니다. 스프라이트에 내장된 그리기 기능을 사용할 수 있습니다.

전체 코드는 이 GitHub 저장소에서 찾을 수 있습니다.

게임 코드입니다:

 import arcade

SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
MOVEMENT_SPEED = 5

class MyGame(arcade.Window):
    def __init__(self, width, height):
        super().__init__(width, height, "My Game")
        arcade.set_background_color(arcade.color.WHITE)
        self.player = arcade.SpriteSolidColor(50, 50, arcade.color.BLUE)
        self.player.center_x = SCREEN_WIDTH // 3
        self.player.center_y = 50
        self.enemy = arcade.SpriteSolidColor(50, 50, arcade.color.RED)
        self.enemy.center_x = SCREEN_WIDTH // 2
        self.enemy.center_y = 50

    def on_draw(self):
        arcade.start_render()
        self.player.draw()
        self.enemy.draw()

    def on_key_press(self, key, modifiers):
        if key == arcade.key.LEFT:
            self.player.center_x -= MOVEMENT_SPEED
        elif key == arcade.key.RIGHT:
            self.player.center_x += MOVEMENT_SPEED

    def update(self, delta_time):
        if arcade.check_for_collision(self.player, self.enemy):
            print("Game Over")

def main():
    game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT)
    arcade.run()

if __name__ == "__main__":
    main()

아케이드의 충돌 감지 기능

아케이드 라이브러리는 스프라이트 간의 충돌을 감지하는 간단한 방법을 제공합니다. check_for_collision 함수는 두 개의 스프라이트를 인수로 받아 스프라이트가 충돌했는지 여부를 나타내는 부울 값을 반환합니다. 이 함수를 사용하여 게임에서 플레이어와 적 스프라이트 간의 충돌을 감지할 수 있습니다.

업데이트 방법을 변경하여 플레이어와 적 스프라이트 간의 충돌을 확인할 수 있습니다. 라이브러리가 충돌을 감지하면 콘솔에 게임 오버를 인쇄할 수 있습니다.

업데이트된 코드입니다:

 def update(self, delta_time):
    if arcade.check_for_collision(self.player, self.enemy):
        print("Game Over")
    else:
        self.player.update()

이 변경 사항을 적용하면 게임에서 충돌을 감지하고 플레이어가 적과 충돌하면 게임 오버 텍스트를 인쇄합니다.

이 글도 확인해 보세요:  JES에서 사운드를 임포트하고 재생하는 방법

추가 기능 추가

게임의 몰입도를 높이기 위해 점수, 파워업, 다수의 적과 같은 추가 기능을 추가할 수 있습니다.

예를 들어, 적 목록을 생성하고 충돌할 때마다 새로운 적을 무작위 위치에 생성하도록 게임을 업데이트할 수 있습니다. 플레이어를 좌우로 움직여 적을 피하고 점수를 획득할 수 있습니다. 다음은 이러한 기능을 구현하는 방법의 예시입니다:

 import random
class MyGame(arcade.Window):
    def __init__(self, width, height):
        super().__init__(width, height, "My Game")
        arcade.set_background_color(arcade.color.WHITE)
        self.player = arcade.SpriteSolidColor(50, 50, arcade.color.BLUE)
        self.player.center_x = SCREEN_WIDTH // 2
        self.player.center_y = 50
        self.enemies = arcade.SpriteList()
        self.score = 0
        for i in range(3):
            enemy = arcade.SpriteSolidColor(50, 50, arcade.color.RED)
            enemy.center_x = random.randint(0, SCREEN_WIDTH)
            enemy.center_y = random.randint(SCREEN_HEIGHT // 2, SCREEN_HEIGHT)
            self.enemies.append(enemy)

    def on_draw(self):
        arcade.start_render()
        self.player.draw()
        self.enemies.draw()
        arcade.draw_text(f"Score: {self.score}", 10, SCREEN_HEIGHT - 30, arcade.color.BLACK, 16)

    def update(self, delta_time):
        if arcade.check_for_collision_with_list(self.player, self.enemies):
            print("Game Over")
            arcade.close_window()
        else:
            self.player.update()
            for enemy in self.enemies:
                enemy.center_y -= MOVEMENT_SPEED / 2
                if enemy.center_y < 0:
                    enemy.center_x = random.randint(0, SCREEN_WIDTH)
                    enemy.center_y = random.randint(SCREEN_HEIGHT // 2, SCREEN_HEIGHT)
                    self.score += 1

이러한 변경으로 이제 게임에는 무작위 위치에 생성되고 아래쪽으로 이동하는 여러 명의 적이 생겼습니다. 플레이어는 적을 성공적으로 피할 때마다 점수를 획득하며, 플레이어가 적과 충돌하면 게임이 종료됩니다.

충돌로 사용자 참여도 향상

게임에 충돌 감지 및 처리 기능을 추가하면 플레이어에게 더욱 몰입감 있고 도전적인 게임플레이 경험을 제공할 수 있습니다. 단순한 피하고 수집하는 게임부터 복잡한 플랫포머와 슈팅 게임에 이르기까지, 충돌은 매력적이고 만족스러운 게임플레이 메커니즘을 만드는 데 중요한 역할을 합니다.

따라서 플레이어가 다시 찾게 만드는 더욱 매력적이고 몰입도 높은 게임을 만들고 싶다면 게임플레이 메커니즘에 충돌 감지 기능을 통합하는 것을 고려해 보세요.

By 박준영

업계에서 7년간 경력을 쌓은 숙련된 iOS 개발자인 박준영님은 원활하고 매끄러운 사용자 경험을 만드는 데 전념하고 있습니다. 애플(Apple) 생태계에 능숙한 준영님은 획기적인 솔루션을 통해 지속적으로 기술 혁신의 한계를 뛰어넘고 있습니다. 소프트웨어 엔지니어링에 대한 탄탄한 지식과 세심한 접근 방식은 독자에게 실용적이면서도 세련된 콘텐츠를 제공하는 데 기여합니다.