Condividi tramite


GameplayKit Spazio dei nomi

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:

ClasseScopo
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.