GameplayKit Namespace
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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:
Classe | Finalidade |
---|---|
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.