Bagikan melalui


GameplayKit Ruang nama

Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI.

Kelas

GKAgent

Yang GKComponent dapat bergerak dan memiliki tujuan.

GKAgent2D

A GKAgent yang gerakannya dibatasi hingga dua dimensi.

GKAgent3D

Agen 3D yang merespons tujuan.

GKAgentDelegate

Delegasikan objek yang menyediakan metode yang berkaitan dengan sinkronisasi status dengan batasan GKAgent , tujuan, dan representasi eksternal.

GKAgentDelegate_Extensions

Metode ekstensi ke IGKAgentDelegate antarmuka untuk mendukung semua metode dari GKAgentDelegate protokol.

GKARC4RandomSource

Generator acak berdasarkan algoritma ARC4. Seringkali pilihan yang baik.

GKBehavior

Kumpulan GKGoal objek dan bobot, bersama-sama menentukan perilaku permainan yang kohesif.

GKBillowNoiseSource

Output GKCoherentNoiseSource yang outputnya mirip dengan kebisingan Perlin tetapi dengan fitur yang lebih bulat.

GKCheckerboardNoiseSource

A GKNoiseSource yang outputnya terdiri dari kotak hitam dan putih bergantian.

GKCircleObstacle

Yang GKObstacle ditentukan oleh lokasi dan radius.

GKCoherentNoiseSource

Output GKNoiseSource yang bervariasi dengan lancar dan terus menerus.

GKComponent

Mengabstraksi superkelas untuk komponen, termasuk GKAgent objek, dalam arsitektur Entity-Component (lihat keterangan).

GKComponentSystem<TComponent>

Menyimpan objek dari subjenis GKComponent tertentu dan memperbaruinya secara berkala.

GKCompositeBehavior

GKBehavior yang menggabungkan objek lainGKBehavior.

GKConstantNoiseSource

Yang GKNoiseSource outputnya adalah nilai tunggal.

GKCylindersNoiseSource

Yang GKNoiseSource output-nya terdiri dari shell silindris konsentris. Sesuai untuk tekstur butir kayu.

GKDecisionNode

Elemen dalam GKDecisionTree.

GKDecisionTree

Pohon pertanyaan, jawaban, dan tindakan.

GKEntity

Jenis yang terdiri dari sejumlah GKComponent objek dalam arsitektur Entity-Component.

GKGameModel

Menjelaskan gameplay dengan cara yang dapat dioptimalkan dengan GKMinMaxStrategist.

GKGameModel_Extensions

Metode ekstensi ke IGKGameModel antarmuka untuk mendukung semua metode dari GKGameModel protokol.

GKGameModelPlayer_Extensions

Metode ekstensi ke IGKGameModelPlayer antarmuka untuk mendukung semua metode dari IGKGameModelPlayer protokol.

GKGaussianDistribution

GKRandomDistribution yang menghasilkan distribusi Gaussian (normal).

GKGoal

Memengaruhi pergerakan satu atau beberapa GKAgent objek.

GKGraph

Grafik matematika yang digunakan untuk menavigasi dan pathfinding.

GKGraphNode

Kelas dasar untuk simpul dalam GKGraph.

GKGraphNode2D

GKGraphNode yang berisi posisi floating-point 2D.

GKGraphNode3D

GKGraphNode yang ada dalam ruang tiga dimensi.

GKGridGraph

GKGraph di mana gerakan dibatasi ke kisi bilangan bulat

GKGridGraphNode

GKGraphNode yang berisi posisi bilangan bulat 2D.

GKHybridStrategist

Yang IGKStrategist menggabungkan Monte Carlo Tree Search dan pencarian lokal melalui MinMax.

GKLinearCongruentialRandomSource

GKRandomSourceCepat. Bit berurutan rendah agak kurang acak daripada di GKARC4RandomSource.

GKMersenneTwisterRandomSource

GKRandomSource Lambat dengan keacakan yang sangat baik.

GKMeshGraph<NodeType>

Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI.

GKMinMaxStrategist

Game AI yang mengevaluasi status permainan potensial, mencetaknya, dan mencoba memaksimalkan skornya sendiri sambil meminimalkan lawannya.

GKMonteCarloStrategist

Ahli strategi yang mencapai solusi yang mungkin mendekati optimal dalam jumlah waktu yang deterministik.

GKNoise

Menggunakan untuk secara prokusedural menghasilkan bidang kebisingan GKNoiseSource tiga dimensi yang tak terbatas.

GKNoiseMap

Mengiris persegi panjang dua dimensi terbatas dari GKNoise bidang kebisingan tiga dimensi objek yang tak terbatas.

GKNoiseSource

Kelas dasar abstrak untuk generator kebisingan prosedural.

GKNSPredicateRule

GKRule Yang menggunakan NSPredicate untuk menentukan apakah tindakan tersebut harus dipanggil.

GKObstacle

Kelas abstrak yang mewakili area yang GKAgent tidak dapat dilalui objek.

GKObstacleGraph

GKGraph yang menghasilkan jaringan pengisian ruang untuk representasi, memungkinkan jalur yang lancar, tetapi tidak efisien.

GKObstacleGraph<NodeType>

Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI.

GKOctree<ElementType>

Struktur data yang secara efisien mengatur elemen tiga dimensi.

GKOctreeNode

Simpul dalam GKOctree<ElementType>. Dikelola secara otomatis oleh GKOctree<ElementType> sebagai objek ditambahkan dan dihapus.

GKPath

Memegang jalur poligonal 2D yang dapat diikuti oleh GKAgent.

GKPerlinNoiseSource

yang GKCoherentNoiseSource menghasilkan kebisingan Perlin yang ditingkatkan.

GKPolygonObstacle

A GKObstacle dengan bentuk yang sangat kompleks.

GKQuadTree

Struktur data yang mengatur objek secara efisien dalam ruang dua dimensi.

GKQuadTreeNode

Simpul dalam quadtree.

GKRandomDistribution

Menentukan distribusi probabilitas. Kelas ini mendefinisikan distribusi seragam (semua nilai kemungkinannya sama), sementara subkelas GKGaussianDistribution dan GKShuffledDistribution memberikan kemungkinan yang berbeda.

GKRandomSource

Kelas dasar untuk generator angka pseudo-random yang sesuai dengan game. Jangan gunakan untuk tujuan kriptografi atau keamanan.

GKRidgedNoiseSource

Yang GKCoherentNoiseSource outputnya mirip dengan kebisingan Perlin tetapi dengan batas tajam.

GKRTree<ElementType>

Struktur data untuk mencari objek secara efisien yang diatur dalam ruang dua dimensi.

GKRule

Elemen tunggal, yang terdiri dari predikat dan tindakan, yang mewakili aturan diskrit dalam GKRuleSystem.

GKRuleSystem

Mempertahankan kumpulan GKRule objek, mengaktifkannya sebagaimana mewajarkannya.

GKScene

Mengaitkan objek GameplayKit dengan SpriteKit SKScene.

GKSCNNodeComponent

GKComponent yang beroperasi pada SCNNode.

GKShuffledDistribution

GKRandomDistribution Yang mengacak koleksi dengan cara yang membuat urutan nilai serupa tidak mungkin (goresan panas/dingin minimal).

GKSKNodeComponent

Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI.

GKSphereObstacle

GKObstacle yang merupakan volume spherical yang tidak dapat dilewati.

GKSpheresNoiseSource

Output GKNoiseSource yang terdiri dari shell konsentris. Sesuai untuk tekstur butir kayu.

GKState

Kelas abstrak yang mewakili status diskrit dalam GKStateMachine.

GKStateMachine

GKState Menyimpan objek dan mengelola transisi di antaranya.

GKVoronoiNoiseSource

Yang GKNoiseSource outputnya membagi ruang menjadi sel-sel di sekitar titik benih. Sesuai untuk tekstur kristal.

NSArray_GameplayKit

Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI.

SCNNode_GameplayKit

Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI.

SKNode_GameplayKit

Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI.

Struct

GKBox

Kotak tiga dimensi persegi panjang rata sumbu.

GKQuad

Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI.

GKTriangle

Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI.

Antarmuka

IGKAgentDelegate

Antarmuka yang mewakili metode yang diperlukan (jika ada) dari protokol GKAgentDelegate.

IGKGameModel

Status permainan saat ini. Sangat berguna bersama dengan GKMinMaxStrategist.

IGKGameModelPlayer

Pemain permainan yang diidentifikasi secara unik. Pengembang harus menerapkan GetPlayerId(IGKGameModelPlayer).

IGKGameModelUpdate

Perpindahan permainan yang valid. Data minimal yang diperlukan untuk transisi valid IGKGameModel ke status berikutnya yang valid.

IGKRandom

Antarmuka untuk generator angka pseudo-random GameplayKit.

IGKSceneRootNodeType

Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI.

IGKStrategist

Antarmuka untuk strategi permainan (AI).

Enum

GKMeshGraphTriangulationMode

Menyimpan opsi tentang bagaimana simpul harus dihasilkan dalam GKMeshGraph<NodeType>.

GKRTreeSplitStrategy

Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI.

Keterangan

Diperkenalkan di iOS 9, GameplayKit menyediakan kelas untuk mekanisme permainan tingkat tinggi seperti pathfinding, mesin aturan (fuzzy dan klasik), dan lawan AI bawaan dalam bentuk GKMinMaxStrategist.

Lawan AI

Theorem minimax, pertama kali dinyatakan oleh John von Neumann pada tahun 1928, memegang bahwa dalam dua orang, nol-jumlah, permainan dengan strategi terbatas, ada beberapa permainan optimal (atau bermain) yang secara bersamaan memaksimalkan nilai yang diharapkan untuk pemain saat ini dan meminimalkan nilai yang diharapkan untuk pemain lawan. Dengan kata lain, dalam permainan seperti itu, ada "gerakan terbaik" (meskipun, tentu saja, bahkan langkah terbaik mungkin menyebabkan kekalahan atau dasi, tergantung pada keadaan permainan).

GameplayKit mengimplementasikan algoritma minimax di kelasnya GKMinMaxStrategist dan kelas terkait (terutama GKGameModel). GKMinMaxStrategist adalah versi yang dioptimalkan dari algoritma minimax yang menggunakan memori secara efisien dan mengurai pohon pencarian pada simpul terminal, tetapi pengembang harus menyadari bahwa algoritma dapat mahal: efisiensi waktu algoritma minimax adalah O(b^m) di mana b adalah jumlah status dalam "ply" look-ahead tunggal dan m merupakan jumlah balasan yang dicari (lihat P:MonoTouch>GameplayKit.GKMinMaxStrategist.MaxLookAheadDepth). Efisiensi ruang algoritma adalah O(m).

Teori minimax berlaku untuk sejumlah besar game, mulai dari yang sepele seperti Nim dan Tic-Tac-Toe, hingga game kompleks seperti Chess and Go. Namun, game seperti Chess and Go memiliki begitu banyak kemungkinan status permainan dan plies bahwa pengeluaran menghitung langkah optimal dengan cepat menjadi astronomis. Bahkan dalam kasus seperti itu GKMinMaxStrategist , dapat digunakan untuk mengevaluasi beberapa ratus atau ribu gerakan dan, jika pengembang dapat secara akurat memprogram perkiraan kekuatan atau kelemahan keadaan game tertentu, menghasilkan lawan yang kuat.

GKMinMaxStrategist tidak perlu disubklasifikasikan oleh pengembang. Sebaliknya, pengembang mengimplementasikan tiga antarmuka dan meneruskan ini ke GKMinMaxStrategist:

KelasTujuan
IGKGameModel Pengembang mengimplementasikan antarmuka ini untuk memodelkan game dan statusnya saat ini. Dalam permainan papan, misalnya, ini biasanya akan menjadi papan dan semua bagian dan referensi ke pemain aktif. Selain itu, jika akan digunakan dengan GKMinMaxStrategist, kelas ini harus mengimplementasikan fungsi yang menjelaskan potensi gerakan (M:GameplayKit.GKGameModule.GetGameModelUpdates*) dan mengevaluasinya dalam hal diinginkan (IsWin, , IsLossGetScore).
IGKGameModelUpdate Kelas ini menjelaskan permainan "bergerak" dan berisi informasi yang cukup untuk transisi IGKGameModel antara statusnya saat ini dan yang baru yang valid. Banyak ribu instans kelas ini mungkin diperlukan oleh GKMinMaxStrategist, sehingga pengembang harus berhati-hati untuk membuatnya ringan.
IGKGameModelPlayer Mengandalkan GKMinMaxStrategist nilai M:GameplayKit.IGKGameModelPlayer.GetPlayerID*) untuk membedakan antar pemain.

Metode utama adalah GKMinMaxStrategistGetBestMove. Ketika metode ini dipanggil, urutan panggilan berikut terjadi:

Pertama, IGKGameModelPlayer objek diambil. Kemudian, dimulai dengan status game saat ini, dan sementara kedalaman ply kurang dari MaxLookAheadDepth, kumpulan kemungkinan hukum bergerak dari status saat ini dikembalikan oleh M:GameplayKit.GKMinMaxStrategist.GetGameModelUpdates*. Kemudian, untuk setiap gerakan ini, mungkin perlu untuk GKMinMaxStrategist mengalokasikan memori baru; jika demikian, M:GameplayKit.GKMinMaxStrategist.Copy* dipanggil. Kemudian, pada salah satu dari banyak GKGameModel objek yang dikelola oleh GKMinMaxStrategist, potensi pemindahan dijalankan dengan panggilan ke SetGameModel dan M:GameplayKit.IGKGameModel.ApplyGameState*.

Kemudian GKMinMaxStrategist mengevaluasi masing-masing potensi gerakan dengan memanggil, pertama, IsWin dan IsLoss. Jika salah satu metode ini mengembalikan true, GKMinMaxStrategist tanda bahwa status game sebagai node terminal dan tidak akan mencoba menyelidikinya lebih lanjut di balasan nanti. Namun, jika tidak ada metode yang truemengembalikan , metode M:GameplayKit.GKGameModel_Extensions.Score* dipanggil.

Pengembang harus menulis metode M:GameplayKit.GKGameModel_Extensions.Score* untuk mengembalikan nilai antara MinScore (-16777216) dan MaxScore (+16777216). Nilai yang lebih tinggi mewakili status game yang lebih baik untuk GetActivePlayer. Dalam permainan sederhana di mana seluruh pohon game dapat dicari karena IsWin atau IsLoss selalu kembali true dalam MaxLookAheadDepth, metode M:GameplayKit.GKGameModel_Extensions.Score* hanya dapat mengembalikan 0, karena GKMinMaxStrategist dapat menghitung langkah terbaik berdasarkan langkah menang dan kalah. Namun, ini hanya mungkin terjadi dalam permainan yang cukup mudah dan, secara umum, membuat fungsi M:GameplayKit.GKGameModel_Updates.Score* yang berkinerja baik akan membutuhkan keahlian bermain game dan pemrograman. Dalam hal pemrograman, metode M:GameplayKit.GKGameModel_Updates.Score* dipanggil berkali-kali selama pencarian pohon game dan perlu efisien, serta akurat.

Pengembang harus mencatat bahwa GKMinMaxStrategist mungkin mengalokasikan banyak salinan IGKGameModelPlayer dan IGKGameModel serta banyak IGKGameModelUpdate objek. Pengembang harus mengandalkan nilai, bukan referensi, kesetaraan, dan harus berhati-hati dalam hal objek ini memanipulasi status global atau statis.