GameplayKit Namespace

O namespace gameplaykit fornece classes para mecânicas de jogo de alto nível, como definição de caminho, mecanismos de regras e oponentes de IA.

Classes

GKAgent

Um GKComponent que pode se mover e tem metas.

GKAgent2D

Um GKAgent cujo movimento é restrito a duas dimensões.

GKAgent3D

Um agente 3D que responde a metas.

GKAgentDelegate

Objeto delegate que fornece métodos relacionados à sincronização do estado de um GKAgent com restrições externas, metas e representações.

GKAgentDelegate_Extensions

Métodos de extensão para a IGKAgentDelegate interface para dar suporte a todos os métodos do GKAgentDelegate protocolo.

GKARC4RandomSource

Gerador aleatório com base no algoritmo ARC4. Muitas vezes uma boa escolha.

GKBehavior

Uma coleção de GKGoal objetos e pesos, juntos definindo um comportamento coeso do jogo.

GKBillowNoiseSource

Um GKCoherentNoiseSource cuja saída é semelhante ao ruído de Perlin, mas com recursos mais arredondados.

GKCheckerboardNoiseSource

Um GKNoiseSource cuja saída consiste em quadrados alternados em preto e branco.

GKCircleObstacle

Um GKObstacle definido por um local e um raio.

GKCoherentNoiseSource

Um GKNoiseSource cuja saída varia sem problemas e continuamente.

GKComponent

Superclasse abstrata para componentes, incluindo GKAgent objetos, em uma arquitetura de Entity-Component (consulte comentários).

GKComponentSystem<TComponent>

Mantém GKComponent objetos de um subtipo específico e os atualiza periodicamente.

GKCompositeBehavior

Um GKBehavior que combina outros GKBehavior objetos.

GKConstantNoiseSource

Um GKNoiseSource cuja saída é um único valor.

GKCylindersNoiseSource

Um GKNoiseSource cuja saída consiste em shells cilíndricos concêntricos. Apropriado para texturas de grãos de madeira.

GKDecisionNode

Um elemento em um GKDecisionTree.

GKDecisionTree

Uma árvore de perguntas, respostas e ações.

GKEntity

Um tipo composto por vários GKComponent objetos em uma arquitetura Entity-Component.

GKGameModel

Descreve a jogabilidade de uma maneira que pode ser otimizada com um GKMinMaxStrategist.

GKGameModel_Extensions

Métodos de extensão para a IGKGameModel interface para dar suporte a todos os métodos do GKGameModel protocolo.

GKGameModelPlayer_Extensions

Métodos de extensão para a IGKGameModelPlayer interface para dar suporte a todos os métodos do IGKGameModelPlayer protocolo.

GKGaussianDistribution

Um GKRandomDistribution que produz uma distribuição gaussiana (normal).

GKGoal

Influencia o movimento de um ou mais GKAgent objetos.

GKGraph

Um grafo matemático usado para navegação e definição de caminho.

GKGraphNode

A classe base para nós em um GKGraph.

GKGraphNode2D

Um GKGraphNode que contém uma posição de ponto flutuante 2D.

GKGraphNode3D

Um GKGraphNode que existe no espaço tridimensional.

GKGridGraph

Um GKGraph em que o movimento é restrito a uma grade de inteiros

GKGridGraphNode

Um GKGraphNode que contém uma posição de inteiro 2D.

GKHybridStrategist

Um IGKStrategist que combina a Pesquisa de Árvore de Monte Carlo e a pesquisa local via MinMax.

GKLinearCongruentialRandomSource

Um rápido GKRandomSource. Os bits de baixa ordem são um pouco menos aleatórios do que em GKARC4RandomSource.

GKMersenneTwisterRandomSource

Um lento GKRandomSource com aleatoriedade muito boa.

GKMeshGraph<NodeType>

O namespace gameplaykit fornece classes para mecânicas de jogo de alto nível, como definição de caminho, mecanismos de regras e oponentes de IA.

GKMinMaxStrategist

IA do jogo que avalia estados potenciais do jogo, pontua-os e tenta maximizar sua própria pontuação, minimizando seus adversários.

GKMonteCarloStrategist

Um estrategista que atinge uma solução que provavelmente está perto do ideal em um período determinístico de tempo.

GKNoise

Usa um GKNoiseSource para gerar processualmente um campo de ruído tridimensional infinito.

GKNoiseMap

Corta um retângulo finito bidimensional do campo de ruído infinito e tridimensional de um GKNoise objeto.

GKNoiseSource

Classe base abstrata para geradores de ruído de procedimento.

GKNSPredicateRule

Um GKRule que usa um NSPredicate para determinar se a ação deve ser chamada.

GKObstacle

Classe abstrata que representa áreas que GKAgent os objetos não podem percorrer.

GKObstacleGraph

Um GKGraph que gera uma rede de preenchimento de espaço para representação, permitindo caminhos suaves, mas ineficientes.

GKObstacleGraph<NodeType>

O namespace gameplaykit fornece classes para mecânicas de jogo de alto nível, como definição de caminho, mecanismos de regras e oponentes de IA.

GKOctree<ElementType>

Uma estrutura de dados que organiza com eficiência elementos tridimensionais.

GKOctreeNode

Um nó em um GKOctree<ElementType>. Gerenciados automaticamente pelo GKOctree<ElementType> como objetos são adicionados e removidos.

GKPath

Contém um caminho poligonal 2D que pode ser seguido por um GKAgent.

GKPerlinNoiseSource

Um GKCoherentNoiseSource que gera ruído Perlin aprimorado.

GKPolygonObstacle

Um GKObstacle com uma forma arbitrariamente complexa.

GKQuadTree

Uma estrutura de dados que organiza objetos com eficiência no espaço bidimensional.

GKQuadTreeNode

Um nó em um quadtree.

GKRandomDistribution

Define uma distribuição de probabilidade. Essa classe define uma distribuição uniforme (todos os valores igualmente prováveis), enquanto subclasses GKGaussianDistribution e GKShuffledDistribution fornecem probabilidades diferentes.

GKRandomSource

Classe base para geradores de números pseudo-aleatórios apropriados para o jogo. Não use para fins criptográficos ou de segurança.

GKRidgedNoiseSource

Um GKCoherentNoiseSource cuja saída é semelhante ao ruído de Perlin, mas com limites nítidos.

GKRTree<ElementType>

Uma estrutura de dados para pesquisar objetos organizados com eficiência no espaço bidimensional.

GKRule

Um único elemento, que inclui um predicado e uma ação, que representa uma regra discreta em um GKRuleSystem.

GKRuleSystem

Mantém uma coleção de GKRule objetos, ativando-os conforme apropriado.

GKScene

Associa objetos GameplayKit a um SpriteKit SKScene.

GKSCNNodeComponent

Um GKComponent que opera em um SCNNode.

GKShuffledDistribution

Um GKRandomDistribution que embaralha uma coleção de uma maneira que torna as sequências de valores semelhantes improváveis (sequências mínimas quentes/frias).

GKSKNodeComponent

O namespace gameplaykit fornece classes para mecânicas de jogo de alto nível, como definição de caminho, mecanismos de regras e oponentes de IA.

GKSphereObstacle

Um GKObstacle que é um volume esférico intransponível.

GKSpheresNoiseSource

Um GKNoiseSource cuja saída consiste em shells concêntricos. Apropriado para texturas de grãos de madeira.

GKState

Uma classe abstrata que representa um estado discreto em um GKStateMachine.

GKStateMachine

Mantém GKState objetos e gerencia as transições entre eles.

GKVoronoiNoiseSource

Um GKNoiseSource cuja saída divide espaço em células ao redor de pontos de semente. Apropriado para texturas cristalinas.

NSArray_GameplayKit

O namespace gameplaykit fornece classes para mecânicas de jogo de alto nível, como definição de caminho, mecanismos de regras e oponentes de IA.

SCNNode_GameplayKit

O namespace gameplaykit fornece classes para mecânicas de jogo de alto nível, como definição de caminho, mecanismos de regras e oponentes de IA.

SKNode_GameplayKit

O namespace gameplaykit fornece classes para mecânicas de jogo de alto nível, como definição de caminho, mecanismos de regras e oponentes de IA.

Estruturas

GKBox

Uma caixa tridimensional retangular alinhada ao eixo.

GKQuad

O namespace gameplaykit fornece classes para mecânicas de jogo de alto nível, como definição de caminho, mecanismos de regras e oponentes de IA.

GKTriangle

O namespace gameplaykit fornece classes para mecânicas de jogo de alto nível, como definição de caminho, mecanismos de regras e oponentes de IA.

Interfaces

IGKAgentDelegate

Interface que representa os métodos necessários (se houver) do protocolo GKAgentDelegate.

IGKGameModel

O estado atual do jogo. Particularmente útil em conjunto com GKMinMaxStrategist.

IGKGameModelPlayer

Um jogador identificado exclusivamente de um jogo. Os desenvolvedores devem implementar GetPlayerId(IGKGameModelPlayer).

IGKGameModelUpdate

Uma jogada de jogo válida. Os dados mínimos necessários para fazer a transição de um válido IGKGameModel para um estado subsequente válido.

IGKRandom

Interface para geradores de números pseudo-aleatórios do GameplayKit.

IGKSceneRootNodeType

O namespace gameplaykit fornece classes para mecânicas de jogo de alto nível, como definição de caminho, mecanismos de regras e oponentes de IA.

IGKStrategist

Interface para um AI (estrategista de jogos).

Enumerações

GKMeshGraphTriangulationMode

Contém opções de como os nós devem ser gerados em um GKMeshGraph<NodeType>.

GKRTreeSplitStrategy

O namespace gameplaykit fornece classes para mecânicas de jogo de alto nível, como definição de caminho, mecanismos de regras e oponentes de IA.

Comentários

Introduzido no iOS 9, o GameplayKit fornece classes para mecânicas de jogo de alto nível, como pathfinding, mecanismos de regras (difusos e clássicos) e um oponente de IA predefinido na forma de GKMinMaxStrategist.

Oponente de IA

O teorema minimax, declarado pela primeira vez por John von Neumann em 1928, sustenta que em um jogo de duas pessoas, soma zero, com estratégias finitas, existe algum jogo ideal (ou jogadas) que maximiza simultaneamente o valor esperado para o jogador atual e minimiza o valor esperado para o jogador adversário. Em outras palavras, nesses jogos, há uma "melhor jogada" (embora, é claro, até mesmo a melhor jogada possa levar a uma derrota ou um empate, dependendo do estado do jogo).

O GameplayKit implementa o algoritmo minimax em sua GKMinMaxStrategist classe e classes relacionadas (especialmente GKGameModel). O GKMinMaxStrategist é uma versão otimizada do algoritmo minimax que usa memória com eficiência e pares a árvore de pesquisa em nós de terminal, mas os desenvolvedores devem estar cientes de que o algoritmo pode ser caro: a eficiência de tempo do algoritmo minimax é O(b^m) onde b está o número de estados em um único look-ahead "ply" e m é o número de plies pesquisados (consulte P:MonoTouch>GameplayKit.GKMinMaxStrategist.MaxLookAheadDepth). A eficiência de espaço do algoritmo é O(m).

O teorema minimax aplica-se a um número muito grande de jogos, desde os triviais como Nim e Tic-Tac-Toe, até jogos complexos como Chess e Go. No entanto, jogos como Chess e Go têm tantos estados de jogo possíveis e plies que a despesa de calcular o movimento ideal rapidamente se torna astronômica. Mesmo nesses casos, o GKMinMaxStrategist pode ser usado para avaliar várias centenas ou milhares de movimentos e, se o desenvolvedor puder programar com precisão uma estimativa da força ou fraqueza de um determinado estado de jogo, produzir um adversário forte.

O GKMinMaxStrategist não precisa ser subclasse pelo desenvolvedor. Em vez disso, o desenvolvedor implementa três interfaces e as passa para o GKMinMaxStrategist:

ClasseFinalidade
IGKGameModel Os desenvolvedores implementam essa interface para modelar o jogo e seu estado atual. Em um jogo de tabuleiro, por exemplo, isso normalmente será o tabuleiro e todas as peças e uma referência ao jogador ativo. Além disso, se for para ser usada com GKMinMaxStrategist, essa classe deverá implementar as funções que descrevem possíveis movimentações (M:GameplayKit.GKGameModule.GetGameModelUpdates*) e as avaliará em termos de desejo (IsWin, IsLoss, GetScore).
IGKGameModelUpdate Essa classe descreve um jogo "move" e contém informações suficientes para fazer a transição entre o IGKGameModel estado atual e um novo válido. Muitas milhares de instâncias dessa classe podem ser exigidas pelo GKMinMaxStrategist, portanto, o desenvolvedor deve tomar cuidado para torná-la leve.
IGKGameModelPlayer O GKMinMaxStrategist depende do valor de M:GameplayKit.IGKGameModelPlayer.GetPlayerID*) para distinguir entre os jogadores.

O método de chave do GKMinMaxStrategist é GetBestMove. Quando esse método é chamado, a seguinte sequência de chamadas ocorre:

Primeiro, os IGKGameModelPlayer objetos são recuperados. Em seguida, começando com o estado atual do jogo e, embora a profundidade ply seja menor que MaxLookAheadDepth, o conjunto de possíveis movimentações legais do estado atual é retornado por M:GameplayKit.GKMinMaxStrategist.GetGameModelUpdates*. Em seguida, para cada um desses movimentos, pode ser necessário que o GKMinMaxStrategist aloque nova memória; nesse caso, M:GameplayKit.GKMinMaxStrategist.Copy* é chamado. Em seguida, em um dos muitos GKGameModel objetos que estão sendo gerenciados pelo GKMinMaxStrategist, uma possível movimentação é executada com chamadas para SetGameModel e M:GameplayKit.IGKGameModel.ApplyGameState*.

Em GKMinMaxStrategist seguida, o avalia cada um dos possíveis movimentos chamando, primeiro e IsWinIsLoss. Se um desses métodos retornar true, o marcará o GKMinMaxStrategist estado do jogo como um nó terminal e não tentará investigá-lo ainda mais em plies posteriores. Se nenhum dos métodos retornar true, porém, o método M:GameplayKit.GKGameModel_Extensions.Score* será chamado.

O desenvolvedor deve escrever um método M:GameplayKit.GKGameModel_Extensions.Score* para retornar um valor entre MinScore (-16777216) e MaxScore (+16777216). Valores mais altos representam estados de jogo que são melhores para o GetActivePlayer. Em jogos simples em que toda a árvore de jogos pode ser pesquisada porque ou sempre retorna true dentro MaxLookAheadDepthde , o método M:GameplayKit.GKGameModel_Extensions.Score* pode simplesmente retornar 0, pois o GKMinMaxStrategist pode calcular a melhor movimentação com base nas jogadas vencedoras e perdidas.IsLossIsWin No entanto, isso só é provável que seja o caso em jogos bastante fáceis e, em geral, criar uma função M:GameplayKit.GKGameModel_Updates.Score* de bom desempenho exigirá experiência em jogo e programação. Em termos de programação, o método M:GameplayKit.GKGameModel_Updates.Score* é chamado muitas vezes durante a pesquisa da árvore de jogos e precisa ser eficiente, bem como preciso.

Os desenvolvedores devem observar que o GKMinMaxStrategist pode alocar muitas cópias de IGKGameModelPlayer e IGKGameModel , bem como muitos IGKGameModelUpdate objetos. Os desenvolvedores devem contar com valor, não referência, igualdade e devem exercer cuidado quando se trata desses objetos manipulando o estado global ou estático.