GameplayKit Espacio de nombres

El espacio de nombres GameplayKit proporciona clases para mecánicas de juego de alto nivel, como la definición de rutas, los motores de reglas y los oponentes de ia.

Clases

GKAgent

Que GKComponent puede mover y tener objetivos.

GKAgent2D

GKAgent cuyo movimiento está restringido a dos dimensiones.

GKAgent3D

Un agente 3D que responde a los objetivos.

GKAgentDelegate

Objeto delegado que proporciona métodos relacionados con la sincronización del estado de con GKAgent restricciones externas, objetivos y representaciones.

GKAgentDelegate_Extensions

Métodos de extensión a la IGKAgentDelegate interfaz para admitir todos los métodos del GKAgentDelegate protocolo.

GKARC4RandomSource

Generador aleatorio basado en el algoritmo ARC4. A menudo, una buena elección.

GKBehavior

Colección de GKGoal objetos y pesos, que definen un comportamiento cohesivo del juego.

GKBillowNoiseSource

Cuya GKCoherentNoiseSource salida es similar al ruido perlin, pero con características más redondeadas.

GKCheckerboardNoiseSource

Cuya GKNoiseSource salida consiste en alternar cuadrados negros y blancos.

GKCircleObstacle

GKObstacle Definido por una ubicación y un radio.

GKCoherentNoiseSource

cuya GKNoiseSource salida varía de forma fluida y continua.

GKComponent

Superclase abstracta para componentes, incluidos GKAgent los objetos, en una arquitectura de Entity-Component (consulte los comentarios).

GKComponentSystem<TComponent>

Contiene GKComponent objetos de un subtipo específico y los actualiza periódicamente.

GKCompositeBehavior

que GKBehavior combina otros GKBehavior objetos.

GKConstantNoiseSource

cuya GKNoiseSource salida es un valor único.

GKCylindersNoiseSource

Cuya GKNoiseSource salida consta de conchas cilíndricas concéntricas. Adecuado para texturas de grano de madera.

GKDecisionNode

Un elemento de un GKDecisionTreeobjeto .

GKDecisionTree

Árbol de preguntas, respuestas y acciones.

GKEntity

Tipo que se compone de GKComponent varios objetos en una arquitectura de Entity-Component.

GKGameModel

Describe el juego de una manera que se puede optimizar con .GKMinMaxStrategist

GKGameModel_Extensions

Métodos de extensión a la IGKGameModel interfaz para admitir todos los métodos del GKGameModel protocolo.

GKGameModelPlayer_Extensions

Métodos de extensión a la IGKGameModelPlayer interfaz para admitir todos los métodos del IGKGameModelPlayer protocolo.

GKGaussianDistribution

que GKRandomDistribution produce una distribución gaussiana (normal).

GKGoal

Influye en el movimiento de uno o varios GKAgent objetos.

GKGraph

Gráfico matemático que se usa para la navegabilidad y el trazado.

GKGraphNode

La clase base para los nodos de un GKGraphobjeto .

GKGraphNode2D

que GKGraphNode contiene una posición de punto flotante 2D.

GKGraphNode3D

que GKGraphNode existe en un espacio tridimensional.

GKGridGraph

Un GKGraph objeto en el que el movimiento está restringido a una cuadrícula de enteros

GKGridGraphNode

que GKGraphNode contiene una posición entera 2D.

GKHybridStrategist

que IGKStrategist combina la búsqueda de árboles de Monte Carlo y la búsqueda local a través de MinMax.

GKLinearCongruentialRandomSource

Un rápido GKRandomSource. Los bits de orden bajo son algo menos aleatorios que en GKARC4RandomSource.

GKMersenneTwisterRandomSource

Una lentitud GKRandomSource con muy buena aleatoriedad.

GKMeshGraph<NodeType>

El espacio de nombres GameplayKit proporciona clases para mecánicas de juego de alto nivel, como la definición de rutas, los motores de reglas y los oponentes de ia.

GKMinMaxStrategist

Inteligencia artificial del juego que evalúa los posibles estados del juego, los puntúa e intenta maximizar su propia puntuación mientras minimiza sus oponentes.

GKMonteCarloStrategist

Estratega que llega a una solución que probablemente esté cerca de la óptima en una cantidad de tiempo determinista.

GKNoise

Usa para GKNoiseSource generar de forma procesal un campo de ruido tridimensional infinito.

GKNoiseMap

Segmenta un rectángulo finito bidimensional del campo de ruido infinito y tridimensional de un GKNoise objeto.

GKNoiseSource

Clase base abstracta para generadores de ruido de procedimientos.

GKNSPredicateRule

que GKRule usa un NSPredicate objeto para determinar si se debe llamar a la acción.

GKObstacle

Clase abstracta que representa áreas que GKAgent los objetos no pueden atravesar.

GKObstacleGraph

que GKGraph genera una red de relleno de espacio para su representación, lo que permite rutas de acceso fluidas, pero ineficaces.

GKObstacleGraph<NodeType>

El espacio de nombres GameplayKit proporciona clases para mecánicas de juego de alto nivel, como la definición de rutas, los motores de reglas y los oponentes de ia.

GKOctree<ElementType>

Estructura de datos que organiza eficazmente los elementos tridimensionales.

GKOctreeNode

Un nodo de .GKOctree<ElementType> Administrado automáticamente por como GKOctree<ElementType> objetos se agregan y quitan.

GKPath

Contiene una ruta de acceso poligonal 2D que puede ir seguida de .GKAgent

GKPerlinNoiseSource

que GKCoherentNoiseSource genera un ruido perlin mejorado.

GKPolygonObstacle

un GKObstacle objeto con una forma arbitrariamente compleja.

GKQuadTree

Estructura de datos que organiza eficazmente los objetos en un espacio bidimensional.

GKQuadTreeNode

Un nodo en un quadtree.

GKRandomDistribution

Define una distribución de probabilidad. Esta clase define una distribución uniforme (todos los valores igualmente probables), mientras que las subclases y GKShuffledDistribution proporcionan diferentes probabilidadesGKGaussianDistribution.

GKRandomSource

Clase base para generadores de números pseudoaleatorios adecuados para juegos. No use para fines criptográficos o de seguridad.

GKRidgedNoiseSource

Cuya GKCoherentNoiseSource salida es similar al ruido de Perlin, pero con límites agudos.

GKRTree<ElementType>

Estructura de datos para la búsqueda eficaz de objetos organizados en un espacio bidimensional.

GKRule

Un único elemento, que consta de un predicado y una acción, que representa una regla discreta en un GKRuleSystem.

GKRuleSystem

Mantiene una colección de GKRule objetos, activandolos según corresponda.

GKScene

Asocia objetos GameplayKit a un SpriteKit SKScene.

GKSCNNodeComponent

que GKComponent funciona en un SCNNodeobjeto .

GKShuffledDistribution

Que GKRandomDistribution ordena aleatoriamente una colección de una manera que hace que las secuencias de valores similares poco probables (rachas activas/frías mínimas).

GKSKNodeComponent

El espacio de nombres GameplayKit proporciona clases para mecánicas de juego de alto nivel, como la definición de rutas, los motores de reglas y los oponentes de ia.

GKSphereObstacle

que GKObstacle es un volumen esférico impasable.

GKSpheresNoiseSource

Cuya GKNoiseSource salida consta de shells concéntricos. Adecuado para texturas de grano de madera.

GKState

Una clase abstracta que representa un estado discreto en un GKStateMachine.

GKStateMachine

Contiene GKState objetos y administra las transiciones entre ellos.

GKVoronoiNoiseSource

Cuya GKNoiseSource salida divide el espacio en celdas que rodean los puntos de inicialización. Adecuado para texturas cristalinas.

NSArray_GameplayKit

El espacio de nombres GameplayKit proporciona clases para mecánicas de juego de alto nivel, como la definición de rutas, los motores de reglas y los oponentes de ia.

SCNNode_GameplayKit

El espacio de nombres GameplayKit proporciona clases para mecánicas de juego de alto nivel, como la definición de rutas, los motores de reglas y los oponentes de ia.

SKNode_GameplayKit

El espacio de nombres GameplayKit proporciona clases para mecánicas de juego de alto nivel, como la definición de rutas, los motores de reglas y los oponentes de ia.

Estructuras

GKBox

Un cuadro tridimensional rectangular alineado con el eje.

GKQuad

El espacio de nombres GameplayKit proporciona clases para mecánicas de juego de alto nivel, como la definición de rutas, los motores de reglas y los oponentes de ia.

GKTriangle

El espacio de nombres GameplayKit proporciona clases para mecánicas de juego de alto nivel, como la definición de rutas, los motores de reglas y los oponentes de ia.

Interfaces

IGKAgentDelegate

Interfaz que representa los métodos necesarios (si los hay) del protocolo GKAgentDelegate.

IGKGameModel

Estado actual del juego. Especialmente útil junto con GKMinMaxStrategist.

IGKGameModelPlayer

Un jugador identificado de forma única de un juego. Los desarrolladores deben implementar GetPlayerId(IGKGameModelPlayer).

IGKGameModelUpdate

Un movimiento de juego válido. Los datos mínimos necesarios para realizar la transición de un valor válido IGKGameModel a un estado posterior válido.

IGKRandom

Interfaz para generadores de números pseudoaleatorios de GameplayKit.

IGKSceneRootNodeType

El espacio de nombres GameplayKit proporciona clases para mecánicas de juego de alto nivel, como la definición de rutas, los motores de reglas y los oponentes de ia.

IGKStrategist

Interfaz para un estratega de juego (IA).

Enumeraciones

GKMeshGraphTriangulationMode

Contiene opciones para cómo se deben generar los nodos en .GKMeshGraph<NodeType>

GKRTreeSplitStrategy

El espacio de nombres GameplayKit proporciona clases para mecánicas de juego de alto nivel, como la definición de rutas, los motores de reglas y los oponentes de ia.

Comentarios

Introducido en iOS 9, GameplayKit proporciona clases para mecánicas de juego de alto nivel, como la definición de rutas de acceso, los motores de reglas (tanto aproximadas como clásicas) y un oponente de IA precompilado en forma de GKMinMaxStrategist.

Oponente de IA

El teorema minimax, declarado por John von Neumann en 1928, sostiene que en un juego de dos personas, cero suma, juego con estrategias finitas, existe un juego óptimo (o jugadas) que maximiza simultáneamente el valor esperado para el jugador actual y minimiza el valor esperado para el jugador opuesto. En otras palabras, en tales juegos, hay un "mejor movimiento" (aunque, por supuesto, incluso el mejor movimiento podría conducir a una pérdida o un empate, dependiendo del estado del juego).

GameplayKit implementa el algoritmo minimax en su GKMinMaxStrategist clase y clases relacionadas (especialmente GKGameModel). GKMinMaxStrategist es una versión optimizada del algoritmo minimax que usa la memoria de forma eficaz y pares el árbol de búsqueda en los nodos terminales, pero el desarrollador debe tener en cuenta que el algoritmo puede ser costoso: la eficiencia del tiempo del algoritmo minimax es O(b^m) donde b es el número de estados en un solo vistazo "ply" y m es el número de plies buscados (consulte >GameplayKit.GKMinMaxStrategist.MaxLookAheadDepth). La eficiencia del espacio del algoritmo es O(m).

El teorema minimax se aplica a un gran número de juegos, desde triviales como Nim y Tic-Tac-Toe, hasta juegos complejos como Chess y Go. Sin embargo, los juegos como Chess y Go tienen tantos estados de juego posibles y plies que el gasto de calcular el movimiento óptimo se convierte rápidamente en astronómica. Incluso en tales casos, GKMinMaxStrategist se puede usar para evaluar varios cientos o mil movimientos y, si el desarrollador puede programar con precisión una estimación de la fuerza o debilidad de un estado de juego determinado, produce un oponente fuerte.

El GKMinMaxStrategist desarrollador no necesita subclasar . En su lugar, el desarrollador implementa tres interfaces y las pasa a GKMinMaxStrategist:

ClasePropósito
IGKGameModel Los desarrolladores implementan esta interfaz para modelar el juego y su estado actual. En un juego de mesa, por ejemplo, esto suele ser el tablero y todas las piezas y una referencia al jugador activo. Además, si se va a usar con GKMinMaxStrategist, esta clase debe implementar las funciones que describen posibles movimientos (M:GameplayKit.GKGameModule.GetGameModelUpdates*) y los evalúa en términos de conveniencia (IsWin, IsLoss, GetScore).
IGKGameModelUpdate Esta clase describe un "movimiento" de juego y contiene suficiente información para realizar la transición entre IGKGameModel su estado actual y una nueva válida. Muchos miles de instancias de esta clase pueden ser requeridas por GKMinMaxStrategist, por lo que el desarrollador debe tener cuidado para que sea ligero.
IGKGameModelPlayer Se GKMinMaxStrategist basa en el valor de M:GameplayKit.IGKGameModelPlayer.GetPlayerID*) para distinguir entre jugadores.

El método de clave de GKMinMaxStrategist es GetBestMove. Cuando se llama a este método, se produce la siguiente secuencia de llamadas:

En primer lugar, se recuperan los IGKGameModelPlayer objetos . A continuación, a partir del estado actual del juego, y mientras que la profundidad ply es menor que MaxLookAheadDepth, el conjunto de posibles movimientos legales desde el estado actual se devuelve mediante M:GameplayKit.GKMinMaxStrategist.GetGameModelUpdates*. A continuación, para cada uno de estos movimientos, puede ser necesario que GKMinMaxStrategist asigne nueva memoria; si es así, M:GameplayKit.GKMinMaxStrategist.Copy* . A continuación, en uno de los muchos GKGameModel objetos que administra , GKMinMaxStrategistse ejecuta un movimiento potencial con llamadas a SetGameModel y M:GameplayKit.IGKGameModel.ApplyGameState*.

A GKMinMaxStrategist continuación, evalúa cada uno de los movimientos potenciales mediante una llamada a , primero IsWin y IsLoss. Si alguno de estos métodos devuelve true, marca el GKMinMaxStrategist estado del juego como un nodo terminal y no intentará investigarlo más adelante en plies posteriores. Sin embargo, si ninguno de los métodos devuelve true, se llama al método M:GameplayKit.GKGameModel_Extensions.Score* .

El desarrollador debe escribir un método M:GameplayKit.GKGameModel_Extensions.Score* para devolver un valor entre MinScore (-16777216) y MaxScore (+16777216). Los valores más altos representan estados de juego que son mejores para .GetActivePlayer En juegos sencillos en los que se puede buscar todo el árbol de juego porque o siempre vuelven true dentro MaxLookAheadDepthde , el método M:GameplayKit.GKGameModel_Extensions.Score* puede simplemente devolver 0, ya que GKMinMaxStrategist puede calcular el mejor movimiento en función de los movimientos ganadores y perdedores.IsLossIsWin Sin embargo, esto solo es probable que sea el caso en juegos bastante fáciles y, en general, crear una función M:GameplayKit.GKGameModel_Updates.Score* requerirá experiencia en juego y programación. En términos de programación, el método M:GameplayKit.GKGameModel_Updates.Score* se llama muchas veces durante la búsqueda del árbol del juego y debe ser eficaz, así como preciso.

Los desarrolladores deben tener en cuenta que GKMinMaxStrategist puede asignar muchas copias de IGKGameModelPlayer y IGKGameModel , así como muchos IGKGameModelUpdate objetos. Los desarrolladores deben confiar en el valor, no la referencia, la igualdad y deben tener cuidado cuando se trata de estos objetos que manipulan el estado global o estático.