GameplayKit 네임스페이스
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
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 |
GKRule 를 NSPredicate 사용하여 동작을 호출해야 하는지 여부를 결정하는 입니다. |
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 , 첫 번째 IsWin 및 IsLoss를 호출하여 각 잠재적인 이동을 평가합니다. 이러한 메서드 중 하나가 를 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을 반환할 수 있습니다.true
MaxLookAheadDepth 그러나 이는 매우 쉬운 게임의 경우일 가능성이 높으며, 일반적으로 잘 수행되는 M:GameplayKit.GKGameModel_Updates.Score* 함수를 만들려면 게임 플레이와 프로그래밍 전문 지식이 모두 필요합니다. 프로그래밍 측면에서 GameplayKit.GKGameModel_Updates.Score* 메서드는 게임 트리를 검색하는 동안 여러 번 호출되며 효율적이고 정확해야 합니다.
개발자는 에서 GKMinMaxStrategist 및 IGKGameModel 의 많은 복사본과 많은 IGKGameModelUpdate 개체를 할당할 수 있다는 점에 유의 IGKGameModelPlayer 해야 합니다. 개발자는 참조, 같음이 아닌 값에 의존해야 하며 전역 또는 정적 상태를 조작하는 이러한 개체와 관련하여 주의해야 합니다.