Bagaimana Anda membuat kode mesin AI untuk memungkinkan komunikasi dalam bahasa pemrograman apa pun?


8

Saya mengembangkan permainan papan iPhone dua pemain. Pemain komputer (AI) dapat berupa lokal (dalam kode game) atau berjalan di server. Dalam kasus ke-2, kode klien dan server dikodekan dalam Lua. Di server, kode AI sebenarnya terpisah dari kode soket TCP dan kode coroutine (yang memunculkan instance AI terpisah untuk setiap klien yang tersambung).

Saya ingin dapat lebih jauh mengisolasi kode AI sehingga bagian itu bisa menjadi modul yang dikodekan oleh siapa pun dalam bahasa pilihan mereka. Bagaimana saya bisa melakukan ini? Teknik / teknologi apa yang memungkinkan komunikasi antara soket Lua TCP / kode coroutine dan modul AI?


swig.org muncul dalam pikiran ..
Jari Komppa

swig adalah c / c ++ ke bahasa lain. Lua ke bahasa lain membutuhkan rute yang berbeda.
David Young

Jawaban:


8

Skema perpesanan berbasis soket dapat digunakan untuk memungkinkan bahasa sembarang berinteraksi dengan AI. Anda dapat menggunakan pesan berbasis biner, xml, teks, dll. Hanya dengan jelas menentukan apa format pesan itu dan pesan apa yang akan Anda kirim dan terima.

Teknik ini bekerja relatif baik untuk penanganan komunikasi yang ringan sampai sedang. Tentu saja ada penalti latensi yang terkait dengannya, tetapi karena permainan Anda merupakan gaya permainan papan, ia tidak harus dijalankan secara waktu nyata.


Saya sudah menggunakan soket untuk memindahkan AI dari server AI ke klien iOS. Semuanya ada di Lua. Saya ingin tahu bagaimana rutin AI, yang dikodekan dengan Python, misalnya (di server) dapat berkomunikasi dengan rutin soket Lua (di server). Misalnya, Python AI mengirimkan perpindahannya ke rutin soket Lua yang kemudian menggunakan soket TCP untuk menyampaikan perpindahan tersebut ke klien iOS.
TokyoDan

Dijawab di bawah ini tetapi komunikasi soket ke soket dapat digunakan untuk berkomunikasi antara dua proses atau program pada komputer yang sama. Dengan cara yang sama seperti dua program berkomunikasi melalui internet. Kecuali Anda tidak membutuhkan semua penanganan TCP / IP.
David Young

0

Untuk bahasa X apa pun, Anda tidak dapat mengetahui fitur interop apa yang dilakukannya atau tidak memiliki bahasa — diharapkan tidak menyediakan fitur interoperasi apa pun. Yang paling dapat diandalkan adalah gaya-C, karena itulah (hampir pasti) apa yang digunakan OS Anda, meskipun ini tidak berarti bahwa bahasa tersebut benar-benar mengeksposnya.

Mungkin yang paling independen akan menggunakan pipa bernama yang disediakan oleh OS dan mengirimkan, katakanlah, pesan XML. Namun, ini adalah skema enkapsulasi paling ekstrim yang paling sedikit berhenti mengenkapsulasi bahasa pembuat.


Pipa adalah pendekatan yang berguna terutama jika Anda ingin sesuatu untuk diuji cepat dan kotor. Ini tidak terlalu scalable dan jauh lebih lambat daripada komunikasi langsung soket ke soket.
David Young

Mungkin saya melewatkan sesuatu. Saya baru dalam hal ini. Saya pikir soket digunakan untuk mendapatkan info dari satu komputer ke komputer lain di suatu tempat di internet. Dapatkah soket juga digunakan untuk komunikasi antara dua program / proses / coroutine yang berjalan pada komputer yang sama?
TokyoDan

Ya! Anda pada dasarnya berkomunikasi melalui soket localhost yang sebenarnya tidak akan merutekan di luar kartu ethernet. Dengan komunikasi soket Anda dapat berbicara dengan program lain di komputer yang sama atau program lain di komputer lain. Ini ditangani persis sama.
David Young

Terima kasih. Bahkan jika ini mungkin, rutin non-Lua AI harus mengkodekan rutinitas komunikasi soket. Saya ingin menjauh dari ini. Saya hanya ingin AI non-Lua mengirim string seperti "Pindahkan P1 ke X Y" ke kode soket Lua saya di server. Kode soket Lua akan menyampaikan string ke klien iOS.
TokyoDan

Anda dapat mencoba menggunakan Pipa secara langsung. Biarkan sisi server Anda Lua menelurkan proses anak yang merupakan program non-Lua AI Anda. Anda dapat berkomunikasi dengan proses anak melalui pipa Masuk dan Keluar. lua-users.org/wiki/ExtensionProposal
David Young
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.