GameplayKit Spazio dei nomi
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Lo spazio dei nomi GameplayKit offre classi per meccanismi di gioco di alto livello, ad esempio pathfinding, motori regole e avversari di intelligenza artificiale.
Classi
GKAgent |
Oggetto GKComponent che può muoversi e ha obiettivi. |
GKAgent2D |
Oggetto GKAgent il cui movimento è limitato a due dimensioni. |
GKAgent3D |
Agente 3D che risponde agli obiettivi. |
GKAgentDelegate |
Oggetto delegato che fornisce metodi relativi alla sincronizzazione dello stato di un GKAgent oggetto con vincoli, obiettivi e rappresentazioni esterni. |
GKAgentDelegate_Extensions |
Metodi di estensione per l'interfaccia IGKAgentDelegate per supportare tutti i metodi del GKAgentDelegate protocollo. |
GKARC4RandomSource |
Generatore casuale basato sull'algoritmo ARC4. Spesso una buona scelta. |
GKBehavior |
Insieme di GKGoal oggetti e pesi, che definiscono un comportamento di gioco coesivo. |
GKBillowNoiseSource |
Oggetto GKCoherentNoiseSource il cui output è simile al rumore Perlin, ma con caratteristiche più arrotondate. |
GKCheckerboardNoiseSource |
Oggetto GKNoiseSource il cui output è costituito da quadrati neri e bianchi alternati. |
GKCircleObstacle |
Oggetto GKObstacle definito da una posizione e da un raggio. |
GKCoherentNoiseSource |
Oggetto GKNoiseSource il cui output varia in modo uniforme e continuo. |
GKComponent |
Superclasse astratta per i componenti, inclusi GKAgent gli oggetti, in un'architettura Entity-Component (vedere le osservazioni). |
GKComponentSystem<TComponent> |
Contiene GKComponent oggetti di un sottotipo specifico e li aggiorna periodicamente. |
GKCompositeBehavior |
Oggetto GKBehavior che combina altri GKBehavior oggetti. |
GKConstantNoiseSource |
Oggetto GKNoiseSource il cui output è un singolo valore. |
GKCylindersNoiseSource |
Oggetto GKNoiseSource il cui output è costituito da shell cilindriche concentriche. Appropriato per le trame in legno. |
GKDecisionNode |
Elemento in un oggetto GKDecisionTree. |
GKDecisionTree |
Albero di domande, risposte e azioni. |
GKEntity |
Tipo composto da un numero di GKComponent oggetti in un'architettura Entity-Component. |
GKGameModel |
Descrive il gioco in modo che possa essere ottimizzato con un oggetto GKMinMaxStrategist. |
GKGameModel_Extensions |
Metodi di estensione per l'interfaccia IGKGameModel per supportare tutti i metodi del GKGameModel protocollo. |
GKGameModelPlayer_Extensions |
Metodi di estensione per l'interfaccia IGKGameModelPlayer per supportare tutti i metodi del IGKGameModelPlayer protocollo. |
GKGaussianDistribution |
Oggetto GKRandomDistribution che produce una distribuzione gaussiana (normale). |
GKGoal |
Influenza il movimento di uno o più GKAgent oggetti. |
GKGraph |
Grafico matematico usato per la navigazione e la definizione del percorso. |
GKGraphNode |
Classe di base per i nodi in un oggetto GKGraph. |
GKGraphNode2D |
Oggetto GKGraphNode contenente una posizione a virgola mobile 2D. |
GKGraphNode3D |
Oggetto GKGraphNode presente nello spazio tridimensionale. |
GKGridGraph |
Oggetto GKGraph in cui lo spostamento è vincolato a una griglia integer |
GKGridGraphNode |
Oggetto GKGraphNode contenente una posizione integer 2D. |
GKHybridStrategist |
Oggetto IGKStrategist che combina Ricerca albero Monte Carlo e ricerca locale tramite MinMax. |
GKLinearCongruentialRandomSource |
Un oggetto veloce GKRandomSource. I bit di ordine basso sono leggermente meno casuali di in GKARC4RandomSource. |
GKMersenneTwisterRandomSource |
Un lento GKRandomSource con una buona casualità. |
GKMeshGraph<NodeType> |
Lo spazio dei nomi GameplayKit offre classi per meccanismi di gioco di alto livello, ad esempio pathfinding, motori regole e avversari di intelligenza artificiale. |
GKMinMaxStrategist |
Intelligenza artificiale del gioco che valuta i potenziali stati del gioco, li assegna un punteggio e tenta di massimizzare il proprio punteggio riducendo al minimo gli avversari. |
GKMonteCarloStrategist |
Strategist che raggiunge una soluzione probabilmente vicina a ottimale in un periodo di tempo deterministico. |
GKNoise |
Usa un oggetto GKNoiseSource per generare in modo procedurale un campo di disturbo tridimensionale infinito. |
GKNoiseMap |
Seziona un rettangolo finito e bidimensionale dal campo rumore tridimensionale infinito di un GKNoise oggetto. |
GKNoiseSource |
Classe base astratta per generatori di disturbo procedurale. |
GKNSPredicateRule |
Oggetto GKRule che usa un NSPredicate oggetto per determinare se deve essere chiamata l'azione. |
GKObstacle |
Classe astratta che rappresenta le aree che GKAgent gli oggetti non possono attraversare. |
GKObstacleGraph |
Oggetto GKGraph che genera una rete di riempimento dello spazio per la rappresentazione, consentendo percorsi uniformi, ma inefficienti. |
GKObstacleGraph<NodeType> |
Lo spazio dei nomi GameplayKit offre classi per meccanismi di gioco di alto livello, ad esempio pathfinding, motori regole e avversari di intelligenza artificiale. |
GKOctree<ElementType> |
Struttura di dati che organizza in modo efficiente elementi tridimensionali. |
GKOctreeNode |
Nodo in un oggetto GKOctree<ElementType>. Vengono aggiunti e rimossi automaticamente da GKOctree<ElementType> come oggetti . |
GKPath |
Contiene un percorso poligono 2D che può essere seguito da un oggetto GKAgent. |
GKPerlinNoiseSource |
Oggetto GKCoherentNoiseSource che genera un rumore Perlin migliorato. |
GKPolygonObstacle |
Oggetto GKObstacle con una forma arbitrariamente complessa. |
GKQuadTree |
Struttura di dati che organizza in modo efficiente gli oggetti nello spazio bidimensionale. |
GKQuadTreeNode |
Nodo in un quadtree. |
GKRandomDistribution |
Definisce una distribuzione di probabilità. Questa classe definisce una distribuzione uniforme (tutti i valori ugualmente probabili), mentre le sottoclassi GKGaussianDistribution e GKShuffledDistribution forniscono probabilità diverse. |
GKRandomSource |
Classe di base per generatori di numeri pseudo-casuali appropriati per il gioco. Non usare per scopi di crittografia o sicurezza. |
GKRidgedNoiseSource |
Oggetto GKCoherentNoiseSource il cui output è simile al rumore Perlin, ma con limiti taglienti. |
GKRTree<ElementType> |
Struttura dei dati per la ricerca efficiente di oggetti disposti in uno spazio bidimensionale. |
GKRule |
Un singolo elemento, che comprende un predicato e un'azione, che rappresenta una regola discreta in un oggetto GKRuleSystem. |
GKRuleSystem |
Gestisce una raccolta di GKRule oggetti, attivandoli in base alle esigenze. |
GKScene |
Associa gli oggetti GameplayKit a uno SpriteKit SKScene. |
GKSCNNodeComponent |
Oggetto GKComponent che opera su un oggetto SCNNode. |
GKShuffledDistribution |
Oggetto GKRandomDistribution che rimette in ordine casuale una raccolta in modo da rendere improbabile sequenze di valori simili (strisce minime a caldo/freddo). |
GKSKNodeComponent |
Lo spazio dei nomi GameplayKit offre classi per meccanismi di gioco di alto livello, ad esempio pathfinding, motori regole e avversari di intelligenza artificiale. |
GKSphereObstacle |
Oggetto GKObstacle che è un volume sferico impassabile. |
GKSpheresNoiseSource |
Oggetto GKNoiseSource il cui output è costituito da shell concentriche. Appropriato per le trame in legno. |
GKState |
Classe astratta che rappresenta uno stato discreto in un oggetto GKStateMachine. |
GKStateMachine |
Contiene GKState oggetti e gestisce le transizioni tra di esse. |
GKVoronoiNoiseSource |
Oggetto GKNoiseSource il cui output divide lo spazio in celle che circondano i punti di inizializzazione. Appropriato per le trame di riempimento. |
NSArray_GameplayKit |
Lo spazio dei nomi GameplayKit offre classi per meccanismi di gioco di alto livello, ad esempio pathfinding, motori regole e avversari di intelligenza artificiale. |
SCNNode_GameplayKit |
Lo spazio dei nomi GameplayKit offre classi per meccanismi di gioco di alto livello, ad esempio pathfinding, motori regole e avversari di intelligenza artificiale. |
SKNode_GameplayKit |
Lo spazio dei nomi GameplayKit offre classi per meccanismi di gioco di alto livello, ad esempio pathfinding, motori regole e avversari di intelligenza artificiale. |
Struct
GKBox |
Casella rettangolare tridimensionale allineata all'asse. |
GKQuad |
Lo spazio dei nomi GameplayKit offre classi per meccanismi di gioco di alto livello, ad esempio pathfinding, motori regole e avversari di intelligenza artificiale. |
GKTriangle |
Lo spazio dei nomi GameplayKit offre classi per meccanismi di gioco di alto livello, ad esempio pathfinding, motori regole e avversari di intelligenza artificiale. |
Interfacce
IGKAgentDelegate |
Interfaccia che rappresenta i metodi richiesti (se presenti) del protocollo GKAgentDelegate. |
IGKGameModel |
Stato corrente del gioco. Particolarmente utile in combinazione con GKMinMaxStrategist. |
IGKGameModelPlayer |
Giocatore identificato in modo univoco di un gioco. Gli sviluppatori devono implementare GetPlayerId(IGKGameModelPlayer). |
IGKGameModelUpdate |
Una mossa di gioco valida. Dati minimi necessari per eseguire la transizione di un oggetto valido IGKGameModel in uno stato successivo valido. |
IGKRandom |
Interfaccia per generatori di numeri pseudo-casuali di GameplayKit. |
IGKSceneRootNodeType |
Lo spazio dei nomi GameplayKit offre classi per meccanismi di gioco di alto livello, ad esempio pathfinding, motori regole e avversari di intelligenza artificiale. |
IGKStrategist |
Interfaccia per uno strategist di gioco .Interface for a game strategist (AI). |
Enumerazioni
GKMeshGraphTriangulationMode |
Contiene le opzioni per la modalità di generazione dei nodi in un oggetto GKMeshGraph<NodeType>. |
GKRTreeSplitStrategy |
Lo spazio dei nomi GameplayKit offre classi per meccanismi di gioco di alto livello, ad esempio pathfinding, motori regole e avversari di intelligenza artificiale. |
Commenti
Introdotto in iOS 9, GameplayKit offre classi per meccanismi di gioco di alto livello come pathfinding, motori di regole (sia fuzzy che classici) e un avversario di intelligenza artificiale predefinito sotto forma di GKMinMaxStrategist.
Avversario dell'intelligenza artificiale
Il teorema minimax, dichiarato da John von Neumann nel 1928, sostiene che in un gioco a due persone, zero-sum, con strategie finite, esiste qualche gioco ottimale (o gioca) che ottimizza contemporaneamente il valore previsto per il giocatore corrente e riduce al minimo il valore previsto per il giocatore avversario. In altre parole, in questi giochi, c'è una "mossa migliore" (anche se, naturalmente, anche la mossa migliore potrebbe portare a una perdita o un pareggio, a seconda dello stato del gioco).
GameplayKit implementa l'algoritmo minimax nella classe GKMinMaxStrategist e nelle classi correlate (in particolare GKGameModel). GKMinMaxStrategist è una versione ottimizzata dell'algoritmo minimax che usa la memoria in modo efficiente e corrisponde all'albero di ricerca nei nodi del terminale, ma lo sviluppatore deve tenere presente che l'algoritmo può essere costoso: l'efficienza temporale dell'algoritmo minimax è O(b^m)
dove b
è il numero di stati in un singolo look-ahead "ply" ed m
è il numero di plies ricercati (vedere >GameplayKit.GKMinMaxStrategist.MaxLookAheadDepth). L'efficienza dello spazio dell'algoritmo è O(m)
.
Il teorema minimax si applica a un numero molto elevato di giochi, da quelli semplici come Nim e Tic-Tac-Toe, a giochi complessi come Scacchi e Go. Tuttavia, i giochi come Scacchi e Go hanno così tanti possibili stati di gioco e plies che la spesa per calcolare la mossa ottimale diventa rapidamente astronomica. Anche in questi casi, l'oggetto GKMinMaxStrategist può essere usato per valutare diverse centinaia o migliaia di mosse e, se lo sviluppatore può programmare con precisione una stima della forza o della debolezza di un determinato stato di gioco, produrre un avversario forte.
non GKMinMaxStrategist deve essere sottoclassato dallo sviluppatore. Invece, lo sviluppatore implementa tre interfacce e le passa a GKMinMaxStrategist:
Classe | Scopo |
---|---|
IGKGameModel | Gli sviluppatori implementano questa interfaccia per modellare il gioco ed è lo stato corrente. In un gioco da tavolo, ad esempio, questo sarà in genere il tabellone e tutti i pezzi e un riferimento al giocatore attivo. Inoltre, se deve essere usato con GKMinMaxStrategist, questa classe deve implementare le funzioni che descrivono le potenziali mosse (M:GameplayKit.GKGameModule.GetGameModelUpdates*) e le valuta in termini di desirability (IsWin, IsLoss, GetScore). |
IGKGameModelUpdate | Questa classe descrive un gioco "move" e contiene informazioni sufficienti per passare lo IGKGameModel stato corrente e uno nuovo valido. Molte migliaia di istanze di questa classe possono essere richieste da GKMinMaxStrategist, quindi lo sviluppatore deve prestare attenzione a renderlo leggero. |
IGKGameModelPlayer | Si GKMinMaxStrategist basa sul valore di ) per distinguere tra i giocatori. |
Il metodo chiave dell'oggetto GKMinMaxStrategist è GetBestMove. Quando viene chiamato questo metodo, si verifica la sequenza di chiamate seguente:
Prima di tutto, gli IGKGameModelPlayer oggetti vengono recuperati. A partire dallo stato corrente del gioco e, mentre la profondità ply è minore MaxLookAheadDepthdi , il set di possibili spostamenti legali dallo stato corrente viene restituito da *. Quindi, per ognuno di questi spostamenti, potrebbe essere necessario GKMinMaxStrategist allocare nuova memoria; in tal caso, * viene chiamato. Quindi, in uno dei molti GKGameModel oggetti gestiti dall'oggetto GKMinMaxStrategist, viene eseguito uno spostamento potenziale con chiamate a SetGameModel e .
Quindi GKMinMaxStrategist valuta ognuna delle possibili mosse chiamando, prima IsWin e IsLoss. Se uno di questi metodi restituisce true
, i segni dello GKMinMaxStrategist stato del gioco come nodo terminale e non tenteranno di esaminarlo ulteriormente nelle plies successive. Se nessun metodo restituisce true
, tuttavia, viene chiamato il metodo .
Lo sviluppatore deve scrivere un metodo * per restituire un valore tra MinScore (-16777216) e MaxScore (+16777216). I valori più elevati rappresentano gli stati del gioco migliori per .GetActivePlayer Nei giochi semplici in cui l'intero albero del gioco può essere cercato perché o restituisce true
sempre all'interno MaxLookAheadDepth, il metodo può semplicemente restituire 0, perché GKMinMaxStrategist può calcolare il movimento migliore in base alla vittoria e alla perdita di movimenti.IsLossIsWin Tuttavia, questo è probabilmente solo il caso in giochi abbastanza facili e, in generale, creare una funzione richiederà sia competenze di gioco che di programmazione. In termini di programmazione, il metodo * viene chiamato molte volte durante la ricerca dell'albero del gioco e deve essere efficiente, oltre che accurato.
Gli sviluppatori devono notare che l'oggetto GKMinMaxStrategist può allocare molte copie di IGKGameModelPlayer e IGKGameModel molti IGKGameModelUpdate oggetti. Gli sviluppatori devono basarsi su valore, non riferimento, uguaglianza e devono prestare attenzione quando si tratta di questi oggetti che modificano lo stato globale o statico.