次の方法で共有


GameplayKit 名前空間

GameplayKit 名前空間は、パスファインディング、ルール エンジン、AI の相手など、ゲームをプレイする高度なメカニズムのクラスを提供します。

クラス

GKAgent

GKComponent移動でき、目標を持つ 。

GKAgent2D

GKAgent移動が 2 つのディメンションに制限されている 。

GKAgent3D

目標に対応する 3D エージェント。

GKAgentDelegate

の状態と外部制約、目標、および表現の同期に関連するメソッドを GKAgent 提供するデリゲート オブジェクト。

GKAgentDelegate_Extensions

プロトコルからGKAgentDelegateのすべてのメソッドをIGKAgentDelegateサポートする インターフェイスへの拡張メソッド。

GKARC4RandomSource

ARC4 アルゴリズムに基づくランダム ジェネレーター。 多くの場合、良い選択です。

GKBehavior

オブジェクトと重みの GKGoal コレクション。一緒に、まとまりのあるゲームの動作を定義します。

GKBillowNoiseSource

GKCoherentNoiseSource出力が Perlin ノイズに似ていますが、より丸みのある特徴を持つ 。

GKCheckerboardNoiseSource

GKNoiseSource出力が黒と白の四角形を交互に構成する 。

GKCircleObstacle

GKObstacle場所と半径によって定義される 。

GKCoherentNoiseSource

GKNoiseSource出力がスムーズかつ継続的に変化する 。

GKComponent

Entity-Component アーキテクチャ内のオブジェクトを含む GKAgent コンポーネントの抽象スーパークラス (解説を参照)。

GKComponentSystem<TComponent>

特定の GKComponent サブタイプのオブジェクトを保持し、それらを定期的に更新します。

GKCompositeBehavior

GKBehaviorGKBehaviorオブジェクトを結合する 。

GKConstantNoiseSource

GKNoiseSource出力が 1 つの値である 。

GKCylindersNoiseSource

GKNoiseSource出力が同心円状の円柱シェルで構成される 。 木目のテクスチャに適しています。

GKDecisionNode

内の GKDecisionTree要素。

GKDecisionTree

質問、回答、アクションのツリー。

GKEntity

Entity-Component アーキテクチャ内の多数の GKComponent オブジェクトで構成される型。

GKGameModel

を使用して最適化できる方法でゲームプレイについて GKMinMaxStrategist説明します。

GKGameModel_Extensions

プロトコルからGKGameModelのすべてのメソッドをIGKGameModelサポートする インターフェイスへの拡張メソッド。

GKGameModelPlayer_Extensions

プロトコルからIGKGameModelPlayerのすべてのメソッドをIGKGameModelPlayerサポートする インターフェイスへの拡張メソッド。

GKGaussianDistribution

GKRandomDistributionガウス (正規) 分布を生成する 。

GKGoal

1 つ以上 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 次元ノイズ フィールドから GKNoise 、有限の 2 次元の四角形をスライスします。

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

確率分布を定義します。 このクラスは、サブクラス化してGKShuffledDistribution異なる可能性を提供する一方GKGaussianDistributionで、均一な分布 (すべての値が等しい可能性が高い) を定義します。

GKRandomSource

ゲームに適した擬似乱数ジェネレーターの基底クラス。 暗号化またはセキュリティ上の目的には使用しないでください。

GKRidgedNoiseSource

GKCoherentNoiseSource出力が Perlin ノイズに似ていますが、境界が鋭い 。

GKRTree<ElementType>

2 次元空間に配置されたオブジェクトを効率的に検索するためのデータ構造。

GKRule

内の不連続ルール GKRuleSystemを表す述語とアクションを構成する 1 つの要素。

GKRuleSystem

オブジェクトの GKRule コレクションを保持し、必要に応じてアクティブ化します。

GKScene

GameplayKit オブジェクトを SpriteKit SKSceneに関連付けます。

GKSCNNodeComponent

GKComponentSCNNode動作する 。

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年にジョン・フォン・ノイマンによって最初に述べられたミニマックス定理は、有限の戦略を持つ2人のゼロサムゲームに、現在のプレーヤーの期待値を同時に最大化し、相手プレーヤーの期待値を最小限に抑える最適なプレイ(またはプレイ)があることを保持しています。 言い換えると、このようなゲームでは、"ベストムーブ"があります(もちろん、最良の動きであっても、ゲームの状態によっては損失や同点につながる可能性があります)。

GameplayKit は、minimax アルゴリズムをその GKMinMaxStrategist クラスと関連クラス (特に GKGameModel) に実装します。 GKMinMaxStrategistは、メモリを効率的に使用し、ターミナル ノードで検索ツリーを解析する minimax アルゴリズムの最適化されたバージョンですが、開発者はアルゴリズムにコストがかかることに注意する必要があります。minimax アルゴリズムの時間効率は、 bO(b^m)単一の先読み "ply" の状態の数であり、m検索される plies の数です (P:MonoTouch>GameplayKit.GKMinMaxStrategist.MaxLookAheadDepth)。 アルゴリズムの空間効率は です O(m)

minimax 定理は、Nim や Tic-Tac-Toe などの単純なものから、チェスや Go などの複雑なゲームまで、非常に多くのゲームに適用されます。 しかし、チェスやゴーなどのゲームは非常に多くの可能性のあるゲーム状態とプリを持っているので、最適な動きを計算する費用はすぐに天文学になります。 このような場合でも、 を GKMinMaxStrategist 使用して数百または数千の移動を評価し、開発者が特定のゲーム状態の強度または弱点の推定を正確にプログラムできる場合は、強い相手を生成します。

GKMinMaxStrategist 開発者がサブクラス化する必要はありません。 代わりに、開発者は 3 つのインターフェイスを実装し、 に GKMinMaxStrategist渡します。

クラス目的
IGKGameModel 開発者は、ゲームをモデル化するためにこのインターフェイスを実装し、それが現在の状態です。 たとえば、ボード ゲームでは、これは通常、ボードとすべての部分とアクティブなプレーヤーへの参照になります。 さらに、 と共GKMinMaxStrategistに使用する場合、このクラスは、潜在的な移動 (*) を記述する関数を実装し、必要性 (IsWin、、IsLossGetScore) の観点から評価する必要があります。
IGKGameModelUpdate このクラスは、ゲームの "移動" について説明し、現在の状態と有効な新しい状態の間を IGKGameModel 遷移するのに十分な情報を含みます。 このクラスの何千ものインスタンスが によって GKMinMaxStrategist必要になる可能性があるため、開発者はそれを軽量にするように注意する必要があります。
IGKGameModelPlayer GKMinMaxStrategist 、プレイヤーを区別するために M:GameplayKit.IGKGameModelPlayer.GetPlayerID*) の値に依存します。

GKMinMaxStrategist キー メソッドは です GetBestMove。 このメソッドが呼び出されると、次の一連の呼び出しが発生します。

最初に IGKGameModelPlayer 、オブジェクトが取得されます。 次に、現在のゲームの状態から開始し、層の深さが より MaxLookAheadDepth小さい間、現在の状態から可能な法的な移動のセットは M:GameplayKit.GKMinMaxStrategist.GetGameModelUpdates* によって返されます。 次に、これらの各移動について、 が新しいメモリを割り当てる必要 GKMinMaxStrategist がある場合があります。割り当てられる場合は、 M:GameplayKit.GKMinMaxStrategist.Copy* が呼び出されます。 次に、 によって管理されている多くのGKGameModelオブジェクトの 1 つでGKMinMaxStrategist、 と *SetGameModel呼び出しを使用して、潜在的な移動が実行されます。

GKMinMaxStrategist次に、 を呼び出し、最初に、IsWinおよび を呼び出して、潜在的な各移動を評価しますIsLoss。 これらのメソッドのいずれかが を返す true場合、ゲームの GKMinMaxStrategist 状態はターミナル ノードとしてマークされ、後でさらに調査されることはありません。 ただし、どちらのメソッドも を返 trueしていない場合は、 M:GameplayKit.GKGameModel_Extensions.Score* が呼び出されます。

開発者は、(-16777216) と (+16777216) MaxScore の間MinScoreの値を返すために、M:GameplayKit.GKGameModel_Extensions.Score* メソッドを記述する必要があります。 値が大きいほど、 に適したゲームの状態を表します GetActivePlayer。 ゲーム ツリー全体を検索IsWinIsLossMaxLookAheadDepthtrueできる単純なゲームでは、* メソッドは単に 0 を返すことができます。これは、 が勝敗の動きに基づいて最適な動きを計算できるためGKMinMaxStrategistです。 ただし、これは非常に簡単なゲームの場合にのみ当てはまる可能性が高く、一般に、パフォーマンスの高い M:GameplayKit.GKGameModel_Updates.Score* 関数を作成するには、ゲームプレイとプログラミングの両方の専門知識が必要です。 プログラミングの観点から、 M:GameplayKit.GKGameModel_Updates.Score* メソッドは、ゲーム ツリーの検索中に何度も呼び出され、効率的で正確である必要があります。

開発者は、 と GKMinMaxStrategist の多くのコピーとIGKGameModel多数IGKGameModelUpdateIGKGameModelPlayerオブジェクトを割り当てることがあることに注意する必要があります。 開発者は、参照、等値ではなく値に依存し、グローバルまたは静的な状態を操作するこれらのオブジェクトに関しては注意を払う必要があります。