디아블로의 맵 기반 인공지능 요소는 주로 적의 이동 경로 탐색, 전투 행동, 거리 기반 반응 등을 포함합니다. 게임 내 적들이 플레이어 위치와 거리에 따라 반응하고, 장애물을 피하며 이동하는 방식으로 AI가 작동합니다. 여기서는 이러한 AI 요소를 간단한 예제로 설명해 보겠습니다.

디아블로 AI 요소의 특징

  1. 경로 탐색(Pathfinding):

    • 적은 플레이어의 위치를 추적하면서 최단 경로로 이동합니다.
    • 장애물이나 벽을 피하면서 이동하며, 대표적인 알고리즘으로 A* (A-star) 경로 탐색 알고리즘을 사용할 수 있습니다.
  2. 거리 기반 반응:

    • 적은 일정 거리 내에 플레이어가 있을 때 공격 모드로 전환하거나 접근합니다.
    • 일정 범위 밖으로 플레이어가 나가면 경로 탐색을 멈추고 원래 위치로 돌아가거나 경계 모드로 전환합니다.
  3. 행동 패턴:

    • 적들은 플레이어가 가까이 있을 때 근거리 공격, 멀리 있을 때 원거리 공격 등의 다양한 패턴을 가질 수 있습니다.
    • 특정 체력 이하가 되면 도망가거나 방어 자세로 전환하는 등 다양한 상태 변화가 가능합니다.

파이썬 예제 코드

아래 예제는 간단한 AI 캐릭터가 플레이어를 추적하고, 일정 거리에 도달하면 공격 모드로 전환하는 예제입니다. A* 알고리즘을 사용하여 장애물을 피하면서 이동합니다.

import math
import heapq

class Position:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def distance_to(self, other):
        return math.sqrt((self.x - other.x) ** 2 + (self.y - other.y) ** 2)

    def __repr__(self):
        return f"({self.x}, {self.y})"


class Enemy:
    def __init__(self, position, attack_range):
        self.position = position
        self.attack_range = attack_range

    def move_towards(self, target_position, map_grid):
        """A* 알고리즘을 사용해 목표 위치로 이동"""
        path = a_star_search(self.position, target_position, map_grid)
        if path:
            self.position = path[1]  # 다음 위치로 이동
            print(f"Enemy moves to {self.position}")
        else:
            print("No path found.")

    def is_in_attack_range(self, player_position):
        return self.position.distance_to(player_position) <= self.attack_range

    def __repr__(self):
        return f"Enemy at {self.position}"


def a_star_search(start, goal, grid):
    """간단한 A* 알고리즘 구현"""
    def heuristic(pos1, pos2):
        return abs(pos1.x - pos2.x) + abs(pos1.y - pos2.y)

    open_list = []
    heapq.heappush(open_list, (0, start))
    came_from = {}
    cost_so_far = {start: 0}

    while open_list:
        _, current = heapq.heappop(open_list)

        if current == goal:
            path = []
            while current in came_from:
                path.append(current)
                current = came_from[current]
            path.append(start)
            path.reverse()
            return path

        neighbors = [
            Position(current.x + dx, current.y + dy)
            for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]
        ]

        for next_pos in neighbors:
            if 0 <= next_pos.x < len(grid) and 0 <= next_pos.y < len(grid[0]) and grid[next_pos.x][next_pos.y] == 0:
                new_cost = cost_so_far[current] + 1
                if next_pos not in cost_so_far or new_cost < cost_so_far[next_pos]:
                    cost_so_far[next_pos] = new_cost
                    priority = new_cost + heuristic(goal, next_pos)
                    heapq.heappush(open_list, (priority, next_pos))
                    came_from[next_pos] = current
    return None


# 지도와 캐릭터 설정
map_grid = [
    [0, 0, 0, 1, 0],
    [0, 1, 0, 1, 0],
    [0, 1, 0, 0, 0],
    [0, 0, 0, 1, 0],
    [0, 0, 0, 0, 0]
]

enemy = Enemy(Position(0, 0), attack_range=1.5)
player_position = Position(4, 4)

# AI 동작 예시
while not enemy.is_in_attack_range(player_position):
    enemy.move_towards(player_position, map_grid)

print("Enemy is in attack range and starts attacking!")

코드 설명

  1. Position 클래스: xy 좌표를 가진 위치를 나타내며, 다른 위치까지의 거리를 계산하는 distance_to 메서드를 포함합니다.

  2. Enemy 클래스:

    • position: 적의 현재 위치.
    • attack_range: 적이 공격할 수 있는 거리.
    • move_towards: A* 알고리즘을 사용하여 목표 위치(플레이어)로 이동.
    • is_in_attack_range: 적이 플레이어와의 거리를 계산하여 공격 범위 내에 있는지 확인합니다.
  3. A* 알고리즘:

    • a_star_search 함수는 시작 위치에서 목표 위치까지의 최적 경로를 찾기 위해 A* 알고리즘을 구현한 것입니다.
    • 이 알고리즘은 heuristic 함수를 사용하여 목표 위치에 대한 추정 거리를 계산하고, open_list 우선순위 큐를 이용해 최단 경로를 탐색합니다.
  4. AI 동작 예시:

    • 적은 플레이어 위치에 접근할 수 있는 경로가 있는 경우 계속 움직이며, 공격 범위에 들어오면 멈추고 공격 모드로 전환합니다.

이 코드는 디아블로의 기본 AI 요소를 모델링한 간단한 예시로, 실제 게임에서는 더욱 정교한 장애물 회피 및 다양한 행동 패턴이 추가됩니다.

마인크래프트에 적용된 인공지능(AI) 요소는 게임의 몹(생물)과 NPC의 행동, 그리고 환경 상호작용에서 핵심적인 역할을 합니다. 이러한 AI는 비교적 단순하면서도 실시간으로 동작해 게임 내 다양한 상호작용을 가능하게 합니다. 특히 몹의 행동 패턴, 경로 탐색, 군집 행동, 의사결정, 적대적/우호적 상호작용 등이 AI 요소에 포함됩니다. 여기서는 마인크래프트에서 활용되는 주요 AI 기술과 그 구현 방식을 살펴보겠습니다.

1. 경로 탐색(Pathfinding)

1.1 A* 알고리즘

마인크래프트에서 대부분의 몹은 A* 알고리즘을 기반으로 경로 탐색을 수행합니다. 이 알고리즘은 몹이 목표 지점까지 가는 최적의 경로를 계산하는 데 사용됩니다. 몹은 장애물이나 다양한 지형을 피해 목적지까지 갈 수 있는 최단 경로를 찾기 위해 이 알고리즘을 활용합니다.

  • 계산 과정: A* 알고리즘은 현재 위치에서 목표 지점까지 가는 비용(거리)과 주변 블록의 이동 가능성을 평가합니다. 몹이 이동할 수 없는 블록(예: 벽, 물)이나 위험한 지역(예: 용암)을 피하며, 가능한 경로 중 가장 효율적인 길을 선택합니다.
  • 적용 예시: 적대적 몹(좀비, 스켈레톤 등)은 플레이어를 목표로 삼아 경로를 계산하고, 이를 따라 추적합니다. 특히 좀비는 복잡한 지형에서도 플레이어를 따라오며, 물을 피하거나 계단을 타고 오르는 등 복잡한 행동을 수행할 수 있습니다.

1.2 유사 길찾기 알고리즘

  • 일부 몹은 단순한 경로 탐색 알고리즘을 사용해 특정 장애물만 피하거나, 간단한 직선 경로를 찾습니다. 예를 들어, 스파이더는 벽을 타고 오를 수 있어 기존 경로 탐색 대신 벽을 수직으로 올라가는 독특한 방식의 경로 탐색이 적용됩니다.

2. 상황 인식 및 행동 트리(Behavior Tree)

2.1 행동 트리 구조

몹의 행동을 결정하는 기본적인 논리는 행동 트리(Behavior Tree)로 구성됩니다. 행동 트리는 몹이 주변 상황을 평가하고, 이에 따라 어떤 행동을 수행할지 결정하는 데 사용됩니다.

  • 조건 기반 의사결정: 몹은 다양한 조건에 따라 행동을 결정합니다. 예를 들어, 플레이어가 가까이 있으면 공격하고, 그렇지 않으면 자리를 지키거나 탐색하는 식으로 동작합니다. 이 조건들은 상태 변화에 따라 동적으로 평가됩니다.
  • 행동 트리 예시:
    • 좀비는 평상시에는 주변을 돌아다니거나 다른 몹과 상호작용하지 않지만, 플레이어를 감지하면 행동 트리가 전환되어 플레이어를 추격합니다.
    • 스켈레톤은 플레이어가 일정 범위 내에 있으면 공격 상태로 전환하여 원거리에서 화살을 쏩니다. 플레이어가 너무 가까워지면 뒤로 물러나는 회피 행동을 취합니다.

2.2 상태 기반 AI(State Machine)

일부 몹은 상태 기반 AI로 동작합니다. 몹은 특정 상태에 따라 다른 행동을 하며, 상태 전환은 트리거 이벤트에 의해 발생합니다.

  • 상태 예시:
    • 엔더맨은 플레이어가 그를 직접 쳐다보면 적대 상태로 전환하여 공격을 시작합니다. 그러나 플레이어가 시선을 돌리거나 멀리 떨어지면 다시 중립 상태로 돌아옵니다.
    • 늑대는 기본적으로 중립 상태이지만, 플레이어가 공격하면 적대 상태로 전환하여 플레이어를 공격합니다.

3. 군집 행동과 AI 상호작용

3.1 군집 행동(Flocking Behavior)

우호적인 동물이나 적대적인 몹 일부는 군집 행동을 보입니다. 이는 여러 개체가 한데 모여 행동하는 방식으로, AI 개체들이 일정한 규칙을 따르며 집단적으로 움직이는 방식입니다.

  • 가축류 몹: 양, 소, 돼지와 같은 동물들은 자연스럽게 군집을 이루어 움직이며, 특정 조건(예: 먹이 제공)에 따라 행동을 변화시킵니다. 이들은 플레이어가 아이템을 들고 있을 때 따라오거나, 이동 방향을 결정할 때 서로의 위치를 참고하여 군집을 유지합니다.
  • 적대적 몹: 좀비는 단체로 플레이어를 추격하며, 주변의 다른 좀비들도 플레이어의 위치를 공유해 함께 공격하는 군집 행동을 보일 수 있습니다.

3.2 AI 상호작용

몹은 서로 간의 상호작용을 통해 행동을 조정하기도 합니다. 예를 들어, 좀비 피그맨은 플레이어가 하나의 피그맨을 공격할 때 주변에 있는 다른 피그맨들도 적대적으로 전환되며, 무리를 지어 공격합니다.

  • AI 협동: 몹들은 혼자서만 움직이는 것이 아니라, 다른 몹들과 협동하거나, 특정 조건에서 동시에 반응하는 방식을 취할 수 있습니다. 예를 들어, 일부 레이드 상황에서 적대적 몹들은 협동하여 플레이어의 기지를 공격합니다.

4. 우호적 몹 및 번식 시스템

4.1 우호적 AI 행동

우호적인 몹(양, 소, 돼지 등)은 단순한 행동 패턴을 가집니다. 이 몹들은 주로 먹이를 먹거나, 주위를 탐색하며, 플레이어의 명령에 따라 행동합니다.

  • 먹이 반응: 우호적인 동물들은 특정 아이템을 보이면 이를 따라오거나, 먹이를 제공받았을 때 번식 모드로 전환됩니다. 이는 간단한 조건 기반 시스템으로 작동하며, 플레이어가 원하는 대로 가축을 관리할 수 있습니다.

4.2 번식 및 새끼 AI

  • 번식 시스템: 번식 가능한 몹들은 특정 조건(예: 음식 제공)이 충족되면 번식 상태로 전환되어 새끼를 낳습니다. 새끼는 성체와 동일한 행동 패턴을 따르지만, 특정 시간 이후에 성체로 성장하는 주기를 가집니다.

5. 적대적 몹의 AI

5.1 추적 및 공격 행동

  • 적대적 몹은 플레이어를 감지하면 즉시 공격 모드로 전환되며, 플레이어를 쫓아가거나 원거리에서 공격을 시도합니다.
    • 좀비: 좀비는 일정 범위 내에서 플레이어를 감지하고, 장애물을 피해 다가가 공격합니다.
    • 스켈레톤: 스켈레톤은 원거리에서 활로 공격하며, 일정 범위 내에 있을 때 공격을 시도합니다. 스켈레톤은 플레이어가 가까워지면 물러나며 회피 행동을 합니다.

5.2 전투 AI

  • 고급 전투 AI: 일부 몹은 전투에서 고급 AI를 보여줍니다. 예를 들어, 플레이어가 가까이 있을 때는 물리적 공격을 하고, 멀리 있을 때는 원거리 무기로 전환하여 공격하는 방식입니다.
    • 이터널 드래곤: 이터널 드래곤은 고유한 전투 패턴을 가지고 있으며, 플레이어의 위치와 행동에 반응하여 다양한 공격 방식을 사용합니다.

6. 특수한 AI 몹

6.1 엔더맨

  • 엔더맨은 독특한 AI 패턴을 가지고 있습니다. 엔더맨은 플레이어가 그를 직접 쳐다볼 때만 공격을 시도하며, 순간 이동 능력을 가지고 있어 빠르게 플레이어의 공격을 피하거나 추적합니다. 이는 고유한 상태 기반 AI 시스템을 통해 구현됩니다.

6.2 마녀

  • 마녀는 일정 조건에서 포션을 사용해 공격하거나 스스로를 치유합니다. 이는 전투 상황에서 상태 변화에 따라 행동이 달라지는 AI 시스템입니다.

7. 명령 블록 및 NPC AI

  • 명령 블록은 플레이어가 직접 AI 행동을 제어할 수 있도록 해주는 중요한 도구입니다. 이를 사용해 특정 NPC나 몹의 행동을 설정하고, 복잡한 상호작용을 구현할 수 있습니다. 예를 들어, 어드벤처 맵에서는 명령 블록을 사용해 NPC가 플레이어에게 퀘스트를 주거나 특정 행동을 수행하도록 설정할 수 있습니다.

+ Recent posts