다음을 통해 공유


GameplayKit 네임스페이스

GameplayKit 네임스페이스는 경로 찾기, 규칙 엔진 및 AI 상대와 같은 고급 게임 플레이 메커니즘에 대한 클래스를 제공합니다.

클래스

GKAgent

GKComponent 이동할 수 있고 목표가 있는 입니다.

GKAgent2D

GKAgent 이동이 2차원으로 제한되는 입니다.

GKAgent3D

목표에 응답하는 3D 에이전트입니다.

GKAgentDelegate

의 상태를 GKAgent 외부 제약 조건, 목표 및 표현과 동기화하는 것과 관련된 메서드를 제공하는 대리자 개체입니다.

GKAgentDelegate_Extensions

프로토콜의 모든 메서드를 IGKAgentDelegate 지원하기 위해 인터페이스에 대한 확장 메서드입니다 GKAgentDelegate .

GKARC4RandomSource

ARC4 알고리즘을 기반으로 하는 임의 생성기입니다. 종종 좋은 선택.

GKBehavior

결합된 게임 동작을 정의하는 개체 및 가중치 컬렉션 GKGoal 입니다.

GKBillowNoiseSource

GKCoherentNoiseSource 출력이 Perlin 노이즈와 비슷하지만 더 둥근 기능이 있는 입니다.

GKCheckerboardNoiseSource

GKNoiseSource 출력이 흑백 사각형을 번갈아 가며 구성하는 입니다.

GKCircleObstacle

GKObstacle 위치 및 반경으로 정의된 입니다.

GKCoherentNoiseSource

GKNoiseSource 출력이 원활하고 지속적으로 달라지는 입니다.

GKComponent

Entity-Component 아키텍처에서 개체를 포함한 GKAgent 구성 요소에 대한 추상 슈퍼클래스입니다(설명 참조).

GKComponentSystem<TComponent>

특정 하위 형식의 개체를 보관 GKComponent 하고 주기적으로 업데이트합니다.

GKCompositeBehavior

GKBehavior 다른 GKBehavior 개체를 결합하는 입니다.

GKConstantNoiseSource

GKNoiseSource 출력이 단일 값인 입니다.

GKCylindersNoiseSource

GKNoiseSource 출력이 동심 원통형 셸로 구성된 입니다. 목제 질감에 적합합니다.

GKDecisionNode

의 요소입니다 GKDecisionTree.

GKDecisionTree

질문, 답변 및 작업의 트리입니다.

GKEntity

Entity-Component 아키텍처의 GKComponent 여러 개체로 구성된 형식입니다.

GKGameModel

을 사용하여 최적화할 수 있는 방식으로 게임 플레이를 설명합니다 GKMinMaxStrategist.

GKGameModel_Extensions

프로토콜의 모든 메서드를 IGKGameModel 지원하기 위해 인터페이스에 대한 확장 메서드입니다 GKGameModel .

GKGameModelPlayer_Extensions

프로토콜의 모든 메서드를 IGKGameModelPlayer 지원하기 위해 인터페이스에 대한 확장 메서드입니다 IGKGameModelPlayer .

GKGaussianDistribution

GKRandomDistribution 가우시안(일반) 분포를 생성하는 입니다.

GKGoal

하나 이상의 GKAgent 개체의 이동에 영향을 줍니다.

GKGraph

탐색 및 경로 정의에 사용되는 수학 그래프입니다.

GKGraphNode

의 노드에 대한 기본 클래스입니다 GKGraph.

GKGraphNode2D

GKGraphNode 2D 부동 소수점 위치를 포함하는 입니다.

GKGraphNode3D

GKGraphNode 3차원 공간에 있는 입니다.

GKGridGraph

GKGraph 이동이 정수 그리드로 제한되는 입니다.

GKGridGraphNode

GKGraphNode 2D 정수 위치가 들어 있는 입니다.

GKHybridStrategist

IGKStrategist MinMax를 통해 몬테카를로 트리 검색 및 로컬 검색을 결합하는 입니다.

GKLinearCongruentialRandomSource

빠른 GKRandomSource입니다. 낮은 순서의 비트는 보다 다소 덜 임의입니다 GKARC4RandomSource.

GKMersenneTwisterRandomSource

아주 좋은 임의성과 느린 GKRandomSource .

GKMeshGraph<NodeType>

GameplayKit 네임스페이스는 경로 찾기, 규칙 엔진 및 AI 상대와 같은 고급 게임 플레이 메커니즘에 대한 클래스를 제공합니다.

GKMinMaxStrategist

잠재적인 게임 상태를 평가하고 점수를 매기며 상대의 점수를 최소화하면서 자체 점수를 최대화하려는 게임 AI.

GKMonteCarloStrategist

결정적 시간 안에 최적에 가까운 솔루션에 도달하는 전략가입니다.

GKNoise

GKNoiseSource 사용하여 무한 3차원 노이즈 필드를 절차적으로 생성합니다.

GKNoiseMap

개체의 무한 3차원 노이즈 필드에서 유한한 2차원 사각형 GKNoise 을 조각화합니다.

GKNoiseSource

절차 노이즈 생성기의 추상 기본 클래스입니다.

GKNSPredicateRule

GKRuleNSPredicate 사용하여 동작을 호출해야 하는지 여부를 결정하는 입니다.

GKObstacle

개체가 GKAgent 트래버스할 수 없는 영역을 나타내는 추상 클래스입니다.

GKObstacleGraph

GKGraph 표현을 위한 공간 채우기 네트워크를 생성하여 원활하지만 비효율적인 경로를 허용하는 입니다.

GKObstacleGraph<NodeType>

GameplayKit 네임스페이스는 경로 찾기, 규칙 엔진 및 AI 상대와 같은 고급 게임 플레이 메커니즘에 대한 클래스를 제공합니다.

GKOctree<ElementType>

3차원 요소를 효율적으로 구성하는 데이터 구조입니다.

GKOctreeNode

의 노드입니다 GKOctree<ElementType>. 개체가 추가되고 제거될 때 에서 GKOctree<ElementType> 자동으로 관리됩니다.

GKPath

다음에 을(를) 따를 수 있는 2D 다각형 경로를 보유합니다 GKAgent.

GKPerlinNoiseSource

GKCoherentNoiseSource 향상된 Perlin 노이즈를 생성하는 입니다.

GKPolygonObstacle

GKObstacle 임의로 복잡한 셰이프가 있는 입니다.

GKQuadTree

개체를 2차원 공간에서 효율적으로 구성하는 데이터 구조입니다.

GKQuadTreeNode

쿼드트리의 노드입니다.

GKRandomDistribution

확률 분포를 정의합니다. 이 클래스는 균일한 분포(모든 값은 동일하게)를 정의하지만 하위 클래스 GKGaussianDistribution 는 서로 GKShuffledDistribution 다른 가능성을 제공합니다.

GKRandomSource

게임에 적합한 의사 난수 생성기의 기본 클래스입니다. 암호화 또는 보안 용도로 사용하지 마세요.

GKRidgedNoiseSource

GKCoherentNoiseSource 출력이 Perlin 노이즈와 비슷하지만 경계가 날카로운 입니다.

GKRTree<ElementType>

2차원 공간에 정렬된 개체를 효율적으로 검색하기 위한 데이터 구조입니다.

GKRule

의 불연속 규칙을 나타내는 조건자와 작업으로 구성된 단일 요소입니다 GKRuleSystem.

GKRuleSystem

개체 컬렉션을 GKRule 유지 관리하여 적절하게 활성화합니다.

GKScene

GameplayKit 개체를 SpriteKit SKScene와 연결합니다.

GKSCNNodeComponent

GKComponent 에서 작동하는 입니다SCNNode.

GKShuffledDistribution

GKRandomDistribution 비슷한 값의 시퀀스를 가능성이 낮게 만드는 방식으로 컬렉션을 섞는 입니다(최소 핫/콜드 줄무늬).

GKSKNodeComponent

GameplayKit 네임스페이스는 경로 찾기, 규칙 엔진 및 AI 상대와 같은 고급 게임 플레이 메커니즘에 대한 클래스를 제공합니다.

GKSphereObstacle

GKObstacle 통과 불가능한 구형 볼륨인 입니다.

GKSpheresNoiseSource

GKNoiseSource 출력이 동심 셸로 구성된 입니다. 목제 질감에 적합합니다.

GKState

의 불연속 상태를 나타내는 추상 클래스입니다 GKStateMachine.

GKStateMachine

개체를 보관 GKState 하고 개체 간의 전환을 관리합니다.

GKVoronoiNoiseSource

GKNoiseSource 출력이 시드 지점을 둘러싼 셀로 공간을 나누는 입니다. 결정 질감에 적합합니다.

NSArray_GameplayKit

GameplayKit 네임스페이스는 경로 찾기, 규칙 엔진 및 AI 상대와 같은 고급 게임 플레이 메커니즘에 대한 클래스를 제공합니다.

SCNNode_GameplayKit

GameplayKit 네임스페이스는 경로 찾기, 규칙 엔진 및 AI 상대와 같은 고급 게임 플레이 메커니즘에 대한 클래스를 제공합니다.

SKNode_GameplayKit

GameplayKit 네임스페이스는 경로 찾기, 규칙 엔진 및 AI 상대와 같은 고급 게임 플레이 메커니즘에 대한 클래스를 제공합니다.

구조체

GKBox

축 맞춤 사각형 3차원 상자입니다.

GKQuad

GameplayKit 네임스페이스는 경로 찾기, 규칙 엔진 및 AI 상대와 같은 고급 게임 플레이 메커니즘에 대한 클래스를 제공합니다.

GKTriangle

GameplayKit 네임스페이스는 경로 찾기, 규칙 엔진 및 AI 상대와 같은 고급 게임 플레이 메커니즘에 대한 클래스를 제공합니다.

인터페이스

IGKAgentDelegate

프로토콜 GKAgentDelegate의 필수 메서드(있는 경우)를 나타내는 인터페이스입니다.

IGKGameModel

현재 게임 상태입니다. 와 함께 GKMinMaxStrategist특히 유용합니다.

IGKGameModelPlayer

고유하게 식별된 게임 플레이어입니다. 개발자는 를 구현 GetPlayerId(IGKGameModelPlayer)해야 합니다.

IGKGameModelUpdate

유효한 게임 이동입니다. 유효한 IGKGameModel 후속 상태로 전환하는 데 필요한 최소 데이터입니다.

IGKRandom

GameplayKit 의사 난수 생성기의 인터페이스입니다.

IGKSceneRootNodeType

GameplayKit 네임스페이스는 경로 찾기, 규칙 엔진 및 AI 상대와 같은 고급 게임 플레이 메커니즘에 대한 클래스를 제공합니다.

IGKStrategist

AI(게임 전략가)를 위한 인터페이스입니다.

열거형

GKMeshGraphTriangulationMode

에서 노드를 생성하는 방법에 대한 옵션을 보유 GKMeshGraph<NodeType>합니다.

GKRTreeSplitStrategy

GameplayKit 네임스페이스는 경로 찾기, 규칙 엔진 및 AI 상대와 같은 고급 게임 플레이 메커니즘에 대한 클래스를 제공합니다.

설명

iOS 9에서 도입된 GameplayKit은 경로 찾기, 규칙 엔진(유사 항목 및 클래식 모두) 및 미리 빌드된 AI 상대와 같은 고급 게임 플레이 메커니즘에 GKMinMaxStrategist대한 클래스를 제공합니다.

AI 상대

1928년 John von Neumann이 처음 언급한 미니맥스 정리는 유한한 전략을 가진 2인칭 제로섬 게임에서 현재 플레이어의 예상 가치를 동시에 극대화하고 상대 플레이어의 예상 값을 최소화하는 최적의 플레이(또는 플레이)가 존재한다는 것을 유지합니다. 즉, 이러한 게임에서는 "최고의 움직임"이 있습니다 (물론 최선의 움직임조차도 게임의 상태에 따라 패배 또는 동점으로 이어질 수 있지만).

GameplayKit은 클래스 및 관련 클래스(특히 GKGameModel)에서 GKMinMaxStrategist minimax 알고리즘을 구현합니다. 는 GKMinMaxStrategist 메모리를 효율적으로 사용하고 터미널 노드에서 검색 트리를 구문 분석하는 미니맥스 알고리즘의 최적화된 버전이지만 개발자는 알고리즘에 비용이 많이 들 수 있음을 알고 있어야 합니다. 미니맥스 알고리즘의 시간 효율성은 O(b^m)b 단일 미리 보기 "ply"의 상태 수이며 m 검색된 plies의 수입니다( P:MonoTouch>GameplayKit.GKMinMaxStrategist.MaxLookAheadDepth). 알고리즘의 공간 효율성은 입니다 O(m).

미니맥스 정리는 Nim 및 Tic-Tac-Toe와 같은 사소한 게임부터 체스와 Go와 같은 복잡한 게임에 이르기까지 매우 많은 수의 게임에 적용됩니다. 그러나, 체스와 이동 같은 게임은 너무 많은 가능한 게임 상태와 플리를 가지고 최적의 움직임을 계산하는 비용은 신속하게 천문학이된다. 이러한 경우에도 은 GKMinMaxStrategist 수백 또는 수천 개의 움직임을 평가하는 데 사용될 수 있으며, 개발자가 지정된 게임 상태의 강도 또는 약점에 대한 추정치를 정확하게 프로그래밍할 수 있는 경우 강력한 상대를 생성합니다.

GKMinMaxStrategist 는 개발자가 서브클래스할 필요가 없습니다. 대신 개발자는 세 가지 인터페이스를 구현하고 이를 GKMinMaxStrategist에 전달합니다.

클래스목적
IGKGameModel 개발자는 게임을 모델링하기 위해 이 인터페이스를 구현하며 현재 상태입니다. 보드 게임에서, instance, 이것은 일반적으로 보드와 모든 조각과 활성 플레이어에 대한 참조가 될 것입니다. 또한 와 함께 GKMinMaxStrategist사용할 경우 이 클래스는 잠재적인 이동(M:GameplayKit.GKGameModule.GetGameModelUpdates*)을 설명하는 함수를 구현하고 바람직성(IsWin, IsLoss, GetScore)으로 평가해야 합니다.
IGKGameModelUpdate 이 클래스는 게임 "이동"을 설명하고 현재 상태와 유효한 새 상태 간에 전환 IGKGameModel 하기에 충분한 정보를 포함합니다. 이 클래스의 수천 인스턴스는 에서 필요할 GKMinMaxStrategist수 있으므로 개발자는 경량화에 주의해야 합니다.
IGKGameModelPlayer GKMinMaxStrategistM:GameplayKit.IGKGameModelPlayer.GetPlayerID*) 값을 사용하여 플레이어를 구분합니다.

GKMinMaxStrategist 키 메서드는 입니다 GetBestMove. 이 메서드가 호출되면 다음 일련의 호출이 발생합니다.

먼저 개체가 IGKGameModelPlayer 검색됩니다. 그런 다음 현재 게임 상태에서 시작하여 ply 깊이가 보다 MaxLookAheadDepth작지만 현재 상태에서의 법적 가능한 이동 집합은 M:GameplayKit.GKMinMaxStrategist.GetGameModelUpdates*에 의해 반환됩니다. 그런 다음 이러한 각 이동에 대해 가 GKMinMaxStrategist 새 메모리를 할당해야 할 수 있습니다. 이 경우 M:GameplayKit.GKMinMaxStrategist.Copy* 가 호출됩니다. 그런 다음 에서 관리GKMinMaxStrategist되는 많은 GKGameModel 개체 중 하나에서 에 대한 호출 SetGameModel 을 사용하여 잠재적인 이동이 실행됩니다.

그런 다음, 은 GKMinMaxStrategist , 첫 번째 IsWinIsLoss를 호출하여 각 잠재적인 이동을 평가합니다. 이러한 메서드 중 하나가 를 GKMinMaxStrategist 반환true하는 경우 는 해당 게임 상태를 터미널 노드로 표시하고 이후 plies에서 더 이상 조사하려고 시도하지 않습니다. 그러나 두 메서드가 를 반환 true하지 않으면 M:GameplayKit.GKGameModel_Extensions.Score* 메서드가 호출됩니다.

개발자는 GameplayKit.GKGameModel_Extensions.Score* 메서드를 작성하여 (-16777216)와 MaxScore (+16777216) 사이의 MinScore 값을 반환해야 합니다. 값이 높을수록 에 더 적합한 GetActivePlayer게임 상태를 나타냅니다. 또는 항상 내에서 반환하기 때문에 IsWinIsLoss 전체 게임 트리를 검색할 수 있는 간단한 게임에서 M:GameplayKit.GKGameModel_Extensions.Score* 메서드는 승패 이동에 따라 최상의 이동을 계산할 수 있으므로 GKMinMaxStrategist 단순히 0을 반환할 수 있습니다.trueMaxLookAheadDepth 그러나 이는 매우 쉬운 게임의 경우일 가능성이 높으며, 일반적으로 잘 수행되는 M:GameplayKit.GKGameModel_Updates.Score* 함수를 만들려면 게임 플레이와 프로그래밍 전문 지식이 모두 필요합니다. 프로그래밍 측면에서 GameplayKit.GKGameModel_Updates.Score* 메서드는 게임 트리를 검색하는 동안 여러 번 호출되며 효율적이고 정확해야 합니다.

개발자는 에서 GKMinMaxStrategistIGKGameModel 의 많은 복사본과 많은 IGKGameModelUpdate 개체를 할당할 수 있다는 점에 유의 IGKGameModelPlayer 해야 합니다. 개발자는 참조, 같음이 아닌 값에 의존해야 하며 전역 또는 정적 상태를 조작하는 이러한 개체와 관련하여 주의해야 합니다.