GameplayKit Espacio de nombres
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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:
Clase | Propó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.