AI 제작에 새로운-어디서부터 시작해야합니까? [닫은]


58

나는 게임 프로그래밍에 익숙하지 않고 서로 싸우는 2 우주선으로 기본 2D 하향식 우주 게임을 만들려고합니다. 사용자 제어 우주선과 잘 지내고 있지만 AI 프로그래밍을 시작하는 방법조차 모릅니다. 이 상황에서 특정 방법 / 패턴이 더 좋습니까? 어디서부터 시작할까요?


1
다음은 제가 만든 과정에서 AI에 관한 슬라이드입니다 : sol.gfxile.net/gpc/05ai.pdf
Jari Komppa

4
if 문. 그들 중 많은.
감속

답변:



27

AI를 처음 개발하는 경우, 상태 패턴, 행동 수학과 같은 것에 대해 걱정하거나 주제에 관한 책을 얻을 필요가 없습니다.

말 그대로 다음과 같은 것을 피할 수 있습니다.

if( targetInRange == true )  
{
    FireAtTarget();
}
else if( bulletComingTowardsMe == true )
{
    MoveAwayFromBullet();
}
else
{
    WanderAroundAimlessly();
}

인공 지능을 올바르게 만드는 주요 측면은 캐릭터가 원하는 행동과 현실적으로 달성 할 수있는 방법을 생각하는 것입니다. 기본 우주선의 적에게 가능한 행동은 다음과 같습니다.

  • 이동
  • 도망 치다

이러한 행동은 언제 일어날 수 있습니까?

  • 주위를 이동-할 일이 없습니다
  • 불-내가 적을 발견했을 때
  • 도망 치다-건강이 나쁠 때 / 화재를 할 때 등

캐릭터가 가질 수있는 "상태"수가 적기 때문에이 작업을 수행 한 후 위와 같은 간단한 if 문을 사용할 수 있습니다. 그런 다음 Steering Behaviors를 살펴 보는 것이 좋습니다. 이는 구현하기위한 매우 간단한 동작이며 실제로보기 좋은 움직임을 가져올 수 있습니다.

더 많은 것을 여기에서 찾을 수 있습니다 : http://www.red3d.com/cwr/steer/
그리고 나는 특히 당신이 시작할 때 Mat Buckland의 책 Programming Game AI By Example을 추천 합니다.

당신이 이것에 정말로 익숙 할 때, 나는 국가와 전략 패턴을 살펴볼 것을 제안합니다.

요점은 작고 간단하게 시작하는 것입니다. 모든 사람들이 FSM과 디자인 패턴 및 그 밖의 것들에 대해 계속 뛰고 있다는 이러한 모든 용어에 대해 걱정하지 마십시오. 우선 설계 및 구축 한 다음 기존 방법 또는 표준을 사용하여 개선 할 수있는 방법에 대해 걱정하십시오.

희망이 도움이됩니다!


@Fuu 건배 편집자 :)
Ray Dey

9

당신은보고 할 수 있습니다 OpenSteer운영 비헤이비어 함께 간다 설명서를 참조하십시오. 소스 코드는 초보자 수준이 아니지만 그 개념은 좋은 아이디어를 제공합니다.


사람들이 게임에서 opensteer를 사용합니까, 아니면 시뮬레이션에 더 적합합니까?
jle

적어도 개발중인 게임에서 사용하려고합니다. 지금까지 잘 작동합니다. 필자는 저자가 Sony의 Playstation 그룹에서 일하면서 많은 부분을 개발했다고 생각합니다. 일부 게임으로 만들었을 것입니다. MobyGames는 JohnMadden Football과 Leisure Suit Larry 게임 중 하나의 크레딧에 그를 등재했습니다.
AShelly

FreeOrion은 전술 전투 엔진에서 OpenSteer를 사용하고 있습니다.
Mike Strobel

1
+1 오픈 스티어 ​​언급. 매우 간단한 행동을 합성하여 매우 복잡하고 복잡해 보이는 것을 형성하는 훌륭한 예를보고 싶다면 체크 아웃 조향 동작! 구글, "보이드"와 멋진 사용법을 살펴보십시오. 당신이 원하는 것을 조용히 아니에요,하지만 단순에서 복잡 오는 방법을 보여줍니다
onedayitwillmake

9

전략 디자인 패턴 을보고 싶을 수도 있습니다 . 본질적으로 선박의 행동 방식에 대한 동일한 기본 전략을 작성하십시오.

  • 목표에 더 가까이 이동
  • 공격 대상
  • 대상에서 도망
  • 파워 업으로 이동
  • 파워 업 사용

그런 다음 논리 (상태 머신)를 사용하여 이러한 전략 중에서 선택합니다. 예를 들어, 선박 보호막이 50 % 아래로 떨어 졌다면 목표물에서 도망쳐 파워 업 / 힐링 아이템 등으로 이동하십시오.


1
그래서 매번 게임 루프를 통해 어떤 '전략'이 우선 순위를 결정하고 그것을 실행합니까?
jle

@jle 거의. 따라서 각 전략은 코드를 체계적으로 유지하면서 자체 클래스로 분류됩니다.
Bryan Denny

7

Ian Millington의 인공 지능 게임 책을 구입하는 것이 좋습니다. 훌륭합니다! :) http://www.ai4g.com/

소스 코드는 Github-MIT 라이센스에 있습니다.

물론 C / C ++를 사용하지 않는다면 관련성이 떨어질 수 있습니다.

그러나 실제로 인공 어리 석음 / 지능의 세계에 대한 멋진 소개.

여기에서 필요한 것은 스티어링 및 스테이트 머신입니다. 우선.


2

상태 머신을 사용하는 경우 몇 가지 실용적인 조언 : megastate를주의하십시오.

도망 할 위치 설정, 높은 목표 속도 설정, 모든 대상 지우기 등을 처리하는 "탈주"상태를 원합니다. 대신 하나 또는 몇 개의 선박 제어를 처리하는 많은 상태 머신을 사용하는 것이 좋습니다. 대상 위치 선택을 처리하는 주 기계, 총을 처리하는 주 기계 등

각 개별 시스템에 도망 상태를 추가해야하므로 이는 어리석은 것처럼 보일 수 있지만 하나 또는 두 개의 출력으로 제한되므로 상태가 매우 작아서 문제가되지 않습니다.

또한 각 컨트롤은 이제 개별 컨트롤하에 있기 때문에 공격 상태에서 총을 제어하면서 도망 목표 위치를 선택할 수 있습니다. 냉각수 누출로 인해 엔진 출력을 유지하면서 적을 물리 칠 수 있습니다. 대응책을 덤프하는 동안 충돌을 피하도록 조종 할 수 있습니다. 이 모든 것이 하나의 포괄적 인 상태 머신에서는 불가능합니다.


2

게임 AI를위한 행동 수학

AI 프로그래밍 학습을위한 시작점 목록에이 책 추가 제한된 응용 프로그램의 알고리즘이 아닌 관찰 및 행동 구현에 중점을 두어 작업에 적합하다고 생각합니다.


1

AI를 만드는 방법은 많은 부분으로 구성되어 있기 때문에 까다로운 질문입니다.

  • AI에 대한 일반적인 아키텍처 / 패러다임을 선택하십시오. 스크립트를 기반으로합니까? 계획을 사용합니까? 단순한 FSM입니까 아니면 BT를 선호합니까?
  • 그런 다음 특정 구현 / 도구 세트를 사용하여 이러한 패러다임을 적용하십시오.
  • 이제는 아키텍처에서 사용할 동작을 생각해야하므로 게임 디자인을 선택할 수 있습니다.

다른 포스터는 훌륭한 책을 제안했고 나는 jacmoe가 제안한 AI4Games를 좋아합니다. 많은 부분에서 일반적이지만 (물론 이해할 수있는 많은 책처럼).

물론 각 유형의 게임에는 특정 요구 사항이 있으며 아케이드 / 슈터 게임에는 흥미로운 게임 플레이를 지원하기 위해 복잡한 아키텍처가 필요하지 않습니다. 간단한 스티어링 라이브러리는 그 행동의 기초로 작업을 수행 한 다음 다양한 유형의 적에 대한 세부 정보를 추가합니다 (일부, 주기적으로 촬영, 플레이어의 움직임을 예측하여 촬영, 일부는 적을 향하기 위해 회전, 다른 사람은 조정할 수 있음) 그들의 공격 등).

  • 게임 (AI) 코딩에 대해 배우는 가장 좋은 방법은 코드를 잘 실행하는 것입니다. 따라서 ohloh.net 및 github을 탐색하고 기존 FOSS 프로젝트를 찾으십시오!
  • 물론 어려운 부분을 선택 하고 기존 (단순한) 게임을 할 수 있습니다 . 동작을 리버스 엔지니어링하고 "어떻게 디자인할까요?"라고 생각하십시오. 물론 힌트는 항상 도움이되므로 아마도 gamedev.SE에서 여기에 요청한 것입니다!
  • 그 사이의 무언가는 GameMaker 포럼 내의 기존 슈팅 게임을 살펴 보는 것입니다! 트릭을 수행 할 간단한 스크립트를 많이 찾을 수 있습니다! ;)

1

게임을 할 때 무엇을하는지 생각해보십시오. 몇 가지 질문을하십시오.

  • 결정을 내리려면 어떤 정보가 필요 합니까?
  • 언제 변화에 반응합니까?
  • 이 특정 플레이 세션에서 "장기"목표는 무엇입니까?

그런 다음 AI가 플레이 필드를보고 AI가 이러한 질문에 따라 수행 할 수있는 동작 또는 동작 목록을 작성하도록합니다. 나는 이러한 움직임을 "스마트 니스 팩터 (smartness factor)"로 순위를 매기고 정렬한다. 그런 다음 임의의 조합과 게임 시작시 플레이어가 선택한 난이도에 따라 이동 / 동작을 선택하고 실행하는 것만 큼 간단합니다.

그런 다음 500 밀리 초 후에 다시 수행합니다.

학습 능력이나 아무것도 없지만 충분히 조정하면 꽤 설득력이 생길 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.