GameplayKit Пространство имен
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Пространство имен GameKit предоставляет классы для высокоуровневых игровых механик, таких как поиск путей, обработчики правил и противники ИИ.
Классы
GKAgent |
Объект , GKComponent который может двигаться и имеет цели. |
GKAgent2D |
Объект , GKAgent движение которого ограничено двумя измерениями. |
GKAgent3D |
Трехмерный агент, который реагирует на цели. |
GKAgentDelegate |
Объект делегата, предоставляющий методы, связанные с синхронизацией состояния объекта GKAgent с внешними ограничениями, целями и представлениями. |
GKAgentDelegate_Extensions |
Методы расширения интерфейса IGKAgentDelegate для поддержки всех методов из GKAgentDelegate протокола. |
GKARC4RandomSource |
Случайный генератор на основе алгоритма ARC4. Часто хороший выбор. |
GKBehavior |
Коллекция GKGoal объектов и весов, вместе определяющих согласованное поведение игры. |
GKBillowNoiseSource |
Объект , GKCoherentNoiseSource выходные данные которого похожи на шум Перлина, но с более скругленными признаками. |
GKCheckerboardNoiseSource |
Объект , GKNoiseSource выходные данные которого состоят из чередующихся черных и белых квадратов. |
GKCircleObstacle |
Объект , GKObstacle определяемый расположением и радиусом. |
GKCoherentNoiseSource |
Объект , GKNoiseSource выходные данные которого изменяются плавно и непрерывно. |
GKComponent |
Абстрактный суперкласс для компонентов, включая GKAgent объекты, в архитектуре Entity-Component (см. примечания). |
GKComponentSystem<TComponent> |
Содержит GKComponent объекты определенного подтипа и периодически обновляет их. |
GKCompositeBehavior |
Объект , GKBehavior объединяющий другие GKBehavior объекты. |
GKConstantNoiseSource |
Объект , GKNoiseSource выходные данные которого являются одним значением. |
GKCylindersNoiseSource |
Объект , GKNoiseSource выходные данные которого состоят из концентрических цилиндрических оболочек. Подходит для текстур древесины. |
GKDecisionNode |
Элемент в GKDecisionTree. |
GKDecisionTree |
Дерево вопросов, ответов и действий. |
GKEntity |
Тип, состоящий из нескольких GKComponent объектов в архитектуре Entity-Component. |
GKGameModel |
Описывает игровой процесс способом, который можно оптимизировать с помощью GKMinMaxStrategist. |
GKGameModel_Extensions |
Методы расширения интерфейса IGKGameModel для поддержки всех методов из GKGameModel протокола. |
GKGameModelPlayer_Extensions |
Методы расширения интерфейса IGKGameModelPlayer для поддержки всех методов из IGKGameModelPlayer протокола. |
GKGaussianDistribution |
Объект GKRandomDistribution , который создает гауссовское (нормальное) распределение. |
GKGoal |
Влияет на перемещение одного или нескольких GKAgent объектов. |
GKGraph |
Математический граф, используемый для навигации и определения пути. |
GKGraphNode |
Базовый класс для узлов в GKGraph. |
GKGraphNode2D |
Объект GKGraphNode , содержащий двухуровневую позицию с плавающей запятой. |
GKGraphNode3D |
Объект , GKGraphNode который существует в трехмерном пространстве. |
GKGridGraph |
Объект , GKGraph в котором перемещение ограничено целочисленной сеткой |
GKGridGraphNode |
Объект GKGraphNode , содержащий двухбайтовую целочисленную позицию. |
GKHybridStrategist |
Объект IGKStrategist , который сочетает в себе поиск монте-карло-дерева и локальный поиск через MinMax. |
GKLinearCongruentialRandomSource |
Быстрый GKRandomSource. Биты низкого порядка несколько менее случайны, чем в GKARC4RandomSource. |
GKMersenneTwisterRandomSource |
Медленный GKRandomSource с очень хорошей случайностью. |
GKMeshGraph<NodeType> |
Пространство имен GameKit предоставляет классы для высокоуровневых игровых механик, таких как поиск путей, обработчики правил и противники ИИ. |
GKMinMaxStrategist |
Игровой ИИ, который оценивает потенциальные состояния игры, оценивает их и пытается максимизировать свой собственный счет, минимизируя своих противников. |
GKMonteCarloStrategist |
Стратег, который достигает решения, которое, вероятно, близко к оптимальному за детерминированное количество времени. |
GKNoise |
Использует для GKNoiseSource процедурного создания бесконечного трехмерного поля шума. |
GKNoiseMap |
Срезает конечный двумерный прямоугольник из бесконечного GKNoise трехмерного поля шума объекта. |
GKNoiseSource |
Абстрактный базовый класс для генераторов процедурного шума. |
GKNSPredicateRule |
Объект GKRule , использующий NSPredicate для определения того, следует ли вызывать это действие. |
GKObstacle |
Абстрактный класс, представляющий области, которые GKAgent объекты не могут пройти. |
GKObstacleGraph |
Объект , GKGraph который создает сеть заполнения пространства для представления, обеспечивая плавные, но неэффективные пути. |
GKObstacleGraph<NodeType> |
Пространство имен GameKit предоставляет классы для высокоуровневых игровых механик, таких как поиск путей, обработчики правил и противники ИИ. |
GKOctree<ElementType> |
Структура данных, которая эффективно упорядочивает трехмерные элементы. |
GKOctreeNode |
Узел в GKOctree<ElementType>. Автоматически управляется с помощью объекта as GKOctree<ElementType> добавляются и удаляются. |
GKPath |
Содержит двухугольный путь, за которым может следовать GKAgent. |
GKPerlinNoiseSource |
Объект , GKCoherentNoiseSource создающий улучшенный шум Перлина. |
GKPolygonObstacle |
Объект GKObstacle с произвольно сложной фигурой. |
GKQuadTree |
Структура данных, которая эффективно упорядочивает объекты в двумерном пространстве. |
GKQuadTreeNode |
Узел в кваддереве. |
GKRandomDistribution |
Определяет распределение вероятностей. Этот класс определяет равномерное распределение (все значения одинаково вероятны), а подклассы GKGaussianDistribution и GKShuffledDistribution обеспечивают разные вероятности. |
GKRandomSource |
Базовый класс для генераторов псевдослучайных чисел, подходящих для игры. Не используйте в целях шифрования или безопасности. |
GKRidgedNoiseSource |
Объект , GKCoherentNoiseSource выходные данные которого похожи на шум Перлина, но с резкими границами. |
GKRTree<ElementType> |
Структура данных для эффективного поиска объектов, упорядоченных в двумерном пространстве. |
GKRule |
Один элемент, состоящий из предиката и действия, который представляет дискретное правило в GKRuleSystem. |
GKRuleSystem |
Поддерживает коллекцию GKRule объектов , активируя их соответствующим образом. |
GKScene |
Связывает объекты GameplayKit с spriteKit SKScene. |
GKSCNNodeComponent |
Объект , GKComponent который работает с SCNNode. |
GKShuffledDistribution |
Объект , GKRandomDistribution который перемешивает коллекцию таким образом, что делает последовательности похожих значений маловероятными (минимальные горячие и холодные полосы). |
GKSKNodeComponent |
Пространство имен GameKit предоставляет классы для высокоуровневых игровых механик, таких как поиск путей, обработчики правил и противники ИИ. |
GKSphereObstacle |
Объект GKObstacle , представляющий собой непроходимый сферический том. |
GKSpheresNoiseSource |
Объект , GKNoiseSource выходные данные которого состоят из концентрических оболочек. Подходит для текстур древесины. |
GKState |
Абстрактный класс, представляющий дискретное состояние в GKStateMachine. |
GKStateMachine |
Содержит GKState объекты и управляет переходами между ними. |
GKVoronoiNoiseSource |
Объект , GKNoiseSource выходные данные которого разделяют пространство на ячейки, окружающие начальные точки. Подходит для кристаллических текстур. |
NSArray_GameplayKit |
Пространство имен GameKit предоставляет классы для высокоуровневых игровых механик, таких как поиск путей, обработчики правил и противники ИИ. |
SCNNode_GameplayKit |
Пространство имен GameKit предоставляет классы для высокоуровневых игровых механик, таких как поиск путей, обработчики правил и противники ИИ. |
SKNode_GameplayKit |
Пространство имен GameKit предоставляет классы для высокоуровневых игровых механик, таких как поиск путей, обработчики правил и противники ИИ. |
Структуры
GKBox |
Прямоугольная трехмерная рамка, выровненная по оси. |
GKQuad |
Пространство имен GameKit предоставляет классы для высокоуровневых игровых механик, таких как поиск путей, обработчики правил и противники ИИ. |
GKTriangle |
Пространство имен GameKit предоставляет классы для высокоуровневых игровых механик, таких как поиск путей, обработчики правил и противники ИИ. |
Интерфейсы
IGKAgentDelegate |
Интерфейс, представляющий обязательные методы (если таковые есть) протокола GKAgentDelegate. |
IGKGameModel |
Текущее состояние игры. Особенно полезно в сочетании с GKMinMaxStrategist. |
IGKGameModelPlayer |
Уникальный игрок игры. Разработчики должны реализовать GetPlayerId(IGKGameModelPlayer). |
IGKGameModelUpdate |
Допустимый ход игры. Минимальные данные, необходимые для перехода допустимого IGKGameModel в допустимое последующее состояние. |
IGKRandom |
Интерфейс для генераторов псевдослучайных чисел Для GameplayKit. |
IGKSceneRootNodeType |
Пространство имен GameKit предоставляет классы для высокоуровневых игровых механик, таких как поиск путей, обработчики правил и противники ИИ. |
IGKStrategist |
Интерфейс для игрового стратега (ИИ). |
Перечисления
GKMeshGraphTriangulationMode |
Содержит параметры создания узлов в GKMeshGraph<NodeType>. |
GKRTreeSplitStrategy |
Пространство имен GameKit предоставляет классы для высокоуровневых игровых механик, таких как поиск путей, обработчики правил и противники ИИ. |
Комментарии
Представленный в iOS 9, GameKit предоставляет классы для высокоуровневых игровых механик, таких как pathfinding, обработчики правил (как нечеткие, так и классические), а также предварительно созданный противник ИИ в виде GKMinMaxStrategist.
Противник ИИ
Теорема minimax, впервые изложенная Джоном фон Нейманом в 1928 году, гласит, что в игре с двумя лицами с нулевой суммой, с конечными стратегиями, существует некоторая оптимальная игра (или игры), которая одновременно максимизирует ожидаемое значение для текущего игрока и минимизирует ожидаемое значение для противоположного игрока. Другими словами, в таких играх, есть "лучший ход" (хотя, конечно, даже лучший ход может привести к потере или галстук, в зависимости от состояния игры).
GameplayKit реализует алгоритм minimax в своем GKMinMaxStrategist классе и связанных классах (особенно GKGameModel). GKMinMaxStrategist— это оптимизированная версия алгоритма minimax, которая эффективно использует память и анализирует дерево поиска на конечных узлах, но разработчики должны знать, что алгоритм может быть дорогостоящим: эффективность времени алгоритма minimax — это O(b^m)
b
количество состояний в одном поиске "ply", а m
— количество искомых объектов (смP:MonoTouch>GameplayKit.GKMinMaxStrategist.MaxLookAheadDepth). Эффективность пространства алгоритма — O(m)
.
Минимакс теорема применяется к очень большому количеству игр, от тривиальных, таких как Nim и Tic-Tac-Toe, до сложных игр, таких как шахматы и Go. Тем не менее, игры, такие как Шахматы и Go имеют так много возможных состояний игры и plies, что расходы на вычисление оптимального движения быстро становится астрономическим. Даже в таких случаях можно GKMinMaxStrategist использовать для оценки нескольких сотен или тысяч ходов и, если разработчик может точно запрограммировать оценку силы или слабости данного игрового состояния, произвести сильного противника.
Не GKMinMaxStrategist должен быть подкласс разработчиком. Скорее, разработчик реализует три интерфейса и передает их в GKMinMaxStrategist:
Класс | Назначение |
---|---|
IGKGameModel | Разработчики реализуют этот интерфейс для моделирования игры и ее текущего состояния. Например, в настольной игре это обычно будет доска и все части, а также ссылка на активного игрока. Кроме того, если он будет использоваться с GKMinMaxStrategist, этот класс должен реализовывать функции, описывающие потенциальные перемещения (M:GameplayKit.GKGameModule.GetGameModelUpdates*), и оценивать их с точки зрения желательности (IsWin, , IsLossGetScore). |
IGKGameModelUpdate | Этот класс описывает "перемещение" игры и содержит достаточно информации для перехода IGKGameModel между текущим состоянием и допустимым новым. Для работы может потребоваться GKMinMaxStrategistмножество тысяч экземпляров этого класса, поэтому разработчик должен позаботиться о том, чтобы сделать его упрощенным. |
IGKGameModelPlayer | Для GKMinMaxStrategist различения игроков использует значение M:GameplayKit.IGKGameModelPlayer.GetPlayer*). |
Ключевой метод объекта GKMinMaxStrategist — GetBestMove. При вызове этого метода происходит следующая последовательность вызовов:
IGKGameModelPlayer Сначала извлекаются объекты . Затем, начиная с текущего состояния игры, и хотя глубина ply меньше MaxLookAheadDepth, набор допустимых переходов из текущего состояния возвращается M:GameKit.GKMinMaxStrategist.GetGameModelUpdates*. Затем для каждого из этих шагов может потребоваться GKMinMaxStrategist выделить новую память; если это так, вызывается M:GameplayKit.GKMinMaxStrategist.Copy* . Затем для одного из многих GKGameModel объектов, которыми управляет GKMinMaxStrategist, выполняется потенциальное перемещение с помощью вызовов SetGameModel и M:GameplayKit.IGKGameModel.ApplyGameState*.
Затем GKMinMaxStrategist вычисляет каждое потенциальное перемещение путем вызова, сначала и IsWinIsLoss. Если любой из этих методов возвращает true
, помечает GKMinMaxStrategist это состояние игры как конечный узел и не будет пытаться исследовать его далее в последующих plies. Если ни тот из методов не возвращает true
, вызывается метод M:GameplayKit.GKGameModel_Extensions.Score* .
Разработчик должен написать метод M:GameplayKit.GKGameModel_Extensions.Score*, чтобы вернуть значение между MinScore (-16777216) и MaxScore (+16777216). Более высокие значения представляют состояния игры, которые лучше подходят для GetActivePlayer. В простых играх, где можно искать все дерево игры, так как или всегда возвращается true
в MaxLookAheadDepth, метод M:GameplayKit.GKGameModel_Extensions.Score* может просто возвращать 0, так как GKMinMaxStrategist может вычислить лучший ход на основе выигрышных и проигрышных ходов.IsLossIsWin Однако это, скорее всего, будет происходить только в довольно простых играх, и, как правило, для создания хорошо производительной функции M:GameplayKit.GKGameModel_Updates.Score* потребуется как игровой, так и программный опыт. С точки зрения программирования метод M:GameplayKit.GKGameModel_Updates.Score* вызывается много раз во время поиска дерева игры и должен быть эффективным, а также точным.
Разработчики должны отметить, что GKMinMaxStrategist может выделить много копий IGKGameModelPlayer и , IGKGameModel а также много IGKGameModelUpdate объектов . Разработчики должны полагаться на значение, а не на ссылку, равенство и должны проявлять осторожность, когда дело доходит до этих объектов, управляющих глобальным или статическим состоянием.