Bagaimana kami membuat permainan papan dengan remote control - Bagian 2

Terakhir kali saya memberi tahu Anda tentang komponen teknis dari permainan papan "pintar" kami, masalah apa yang kami temui dan apa yang terjadi pada akhirnya.

gambar

Hari ini saya ingin berbicara lebih detail tentang aplikasi seluler, game pertama, dan cara membuat thumbnail untuknya.

Artikel pertama dapat ditemukan di sini: Bagaimana kami membuat permainan papan dengan remote control - Bagian 1

Perhatian! Banyak gambar di.

Dalam komentar di artikel terakhir, mereka dengan benar mencatat bahwa lebih baik tidak membuat game, tetapi sebuah platform yang dengannya Anda sudah bisa membuat game menggunakan mekanik yang tersedia. Awalnya, kami merencanakannya, tetapi sebagai hasilnya, kami menyadari bahwa kami tidak dapat melakukan sesuatu selain dari permainan. Hanya karena kurangnya pengalaman dalam desain game atau desainer game yang akrab yang bisa memberi tahu kami mekanik mana yang harus didukung.

Oleh karena itu, kami memutuskan bahwa kami akan menerapkan semua fungsi dasar platform (bergerak, penyorotan dinamis, konfirmasi) dalam game pertama kami, yang akan kami buat sendiri. Dan kemudian, dengan menggunakan pengalaman yang didapat, kami akan membuat konstruktor permainan yang lengkap.

Aplikasi seluler


Seperti yang saya tulis sebelumnya, semua manajemen platform dilakukan melalui aplikasi seluler yang terhubung melalui protokol BLE.

Beberapa GIF
GIF "" /

GIF

GIF

GIF "" /

Bahkan, untuk mengimplementasikan permainan apa pun Anda perlu menulis aplikasi seluler lengkap untuk itu, di mana Anda menggambarkan semua aturan dan mekanisme.

Dalam proses penulisan aplikasi, kami melakukan semua pengujian dengan menghubungkan ke platform, yang sangat tidak nyaman. Oleh karena itu, untuk menyederhanakan debugging, kami membuat emulator perangkat lunak sederhana dalam kerangka aplikasi, di mana data ditampilkan dengan cara yang sama seperti yang akan ditampilkan di lapangan bermain.


Pada awalnya, kami menemukan masalah bahwa data yang meninggalkan aplikasi hilang. Kami menemukan bahwa ketika menggunakan BLE, ukuran paket maksimum yang dapat dikirim adalah 20 byte. Oleh karena itu, kami membagi semua data keluar pada BLE ke dalam paket 20 byte, parameter "Gerbang" dituliskan di header. Parameter ini membantu Arduino untuk memahami komponen platform dari paket ini. Dari sisi Arduino, pemrosesan paket-paket ini adalah dasar:

if (NewCommandReady) { switch (CurrentGate) { case 1: processLEDCommand(); break; case 2: processDriverCommand(); break; case 3: processMagnetCommand(); case 4: // break; } //  NewCommandReady = false; } 

Setelah kami memecah streaming data antara smartphone dan modul BLE menjadi paket 20-byte, data berhenti menghilang, tetapi sering kali datang ke Arduino dalam bentuk yang terdistorsi. Ternyata kami tidak memperhitungkan bahwa port serial Arduino memiliki buffer 64 byte. Ketika buffer overflow, data hilang, dan yang berikutnya terdistorsi. Meningkatkan ukuran dan membuat buffer Anda sendiri tidak selalu membantu. Saya harus menulis protokol pembungkus di atas transportasi BLE untuk mengirim dan menerima data dengan andal.

Karena penggunaan "protokol" seperti itu, pertukaran data sedikit melambat dengan memeriksa integritas data yang ditransmisikan, namun keandalannya lebih penting untuk permainan - akan memalukan jika tampilan AOE dari beberapa kemampuan tidak lengkap atau pahlawan tidak dipindahkan ketika mengkonfirmasikan perpindahan pada ponsel.

Untuk menampilkan objek di lapangan bermain, kami menggunakan prinsip lapisan di subsistem jendela OS:

  • Setiap objek atau tindakan yang disorot (pahlawan, rintangan, cara pahlawan bergerak, ruang lingkup kemampuan yang tersedia, dan sisanya) menggunakan lapisannya sendiri.
  • Ketika lapisan diterapkan (misalnya, wilayah AOE di atas ruang lingkup kemampuan yang tersedia), keadaan awal LED diingat. Akibatnya, dimungkinkan untuk mengembalikan warna asli ketika lapisan atas menghilang.

Sebagian besar data yang ditransfer antara aplikasi seluler dan platform adalah pengecatan ulang LED. Untuk tujuan pengoptimalan, beberapa algoritma ditambahkan:

  • Untuk mengecat dioda, buffer digunakan di mana perubahan dilakukan sampai saat ketika perubahan ini harus ditampilkan pada papan fisik.
  • Pengecatan ulang satu LED dalam perintah yang sama dikecualikan.
  • Saat mengecat ulang (misalnya, pergeseran area kemampuan AOE sebesar 1 sel), kondisi terkini papan LED dianalisis. Jika warna LED di negara baru tidak berbeda dari yang sebelumnya, tidak ada perintah yang akan diterima oleh Arduino untuk mengecat ulang.

Gameplay


Jadi, Anda memutuskan untuk bermain. Di bawah ini saya akan menjelaskan tampilannya dari samping:

  1. Kami memasukkan steker ke stopkontak dan menghidupkan game.
  2. Pada setiap permulaan, kalibrasi otomatis dilakukan untuk menentukan jumlah langkah yang tepat dari motor stepper untuk memindahkan 1 sel.
  3. Secara paralel, kami menghubungkan smartphone ke game menggunakan Bluetooth.
  4. Dalam aplikasi seluler, setiap pemain memilih karakter yang ingin ia mainkan. Setelah semua orang membuat pilihan, tekan "MULAI".

  5. Masing-masing karakter memiliki warna tersendiri. Gim ini akan secara otomatis menyorot sel tempat Anda harus meletakkan sosok pahlawan Anda.
  6. Permainan berlangsung secara berurutan. Langkah pertama dilakukan oleh pemain yang pertama kali memilih pahlawan, yang kedua - yang kedua, dll.
  7. Setiap pahlawan memiliki sejumlah Poin Aksi (OD) tertentu yang dapat dihabiskan untuk bergerak di sekitar arena atau menerapkan kemampuan.
  8. Setiap kemampuan memiliki waktu pemulihan sendiri, yang dihitung dalam putaran. Dalam kerangka aplikasi seluler, ada 2 konsep: Pindahkan - interval dari awal hingga akhir tindakan pemain saat ini. Round - jumlah gerakan semua pemain yang berpartisipasi dalam permainan. Saat ini, giliran satu pemain terbatas hingga 30 detik.
  9. Rintangan ditempatkan di lapangan di mana pemain tidak akan bisa melewati atau menggunakan sebagian besar kemampuan. Sekarang mereka hanya disorot dengan warna merah di lapangan bermain, tetapi di masa depan mereka akan memiliki perwujudan fisik.

  10. Anda dapat memindahkan bidang dengan bantuan kemampuan khusus yang dimiliki setiap pahlawan. Misalnya, teleportasi seorang pesulap. Tidak seperti gerakan standar, saat pemain membuka rute sel pianonya setiap sel, saat menggunakan kemampuan ini, pemain hanya menunjukkan titik akhir. Akibatnya, ada kebutuhan untuk algoritma untuk menemukan jalur terpendek ke titik yang ditentukan, melewati semua objek yang memungkinkan tabrakan (tokoh pahlawan lain, tokoh penghalang, dll).


    Masalah ini diselesaikan cukup sederhana dengan bantuan grafik dan bagian BFS melalui sel.
    Singkatnya, inti dari algoritma ini adalah untuk menandai sel berdasarkan jarak, dari posisi pahlawan saat ini ke sel yang ditentukan (ditunjukkan dengan warna oranye), ke mana pahlawan harus dipindahkan.

    Setelah menemukan sel yang diinginkan, jalur balik dicari dalam sel sedemikian rupa sehingga jarak dari titik awal ke sel berikutnya harus 1 kurang dari sel saat ini (bagian ditandai dengan warna kuning). Setelah kembali ke posisi awal (sel hijau), urutan titik terbentuk, yang merupakan jalur terpendek. Urutan inilah yang ditransmisikan ke Arduino sebagai tim untuk memindahkan pahlawan.
  11. Setelah kematian pahlawan, permainan secara otomatis memindahkan sosoknya ke "zona asal". Zona asal - sel tempat gambar diletakkan di awal permainan. Setiap pemain memiliki miliknya sendiri. Setelah memulai permainan, Anda tidak bisa masuk atau menggunakan kemampuan di zona beranda. Hal ini dilakukan sehingga tidak mungkin untuk menangkap pemain di kebangkitan. Untuk pemain yang pahlawannya dikalahkan, permainan berakhir dalam 1 putaran. Setelah dia bergabung kembali dengan pertempuran.

  12. Pada saat ini, pemain yang pahlawannya adalah yang terakhir bertahan di lapangan mengalahkan lawan adalah menang. Tetapi kondisinya mungkin berbeda, misalnya, orang yang mencetak N frags pertama menang.

Ini adalah gameplay yang berfungsi di versi saat ini. Karena kurangnya pengalaman dalam desain game, mungkin kita tidak melihat sekolah atau peluang yang jelas. Misalnya, selalu menyakitkan untuk menunggu langkah selanjutnya. Dalam implementasi saat ini, waktu tunggu bisa mencapai 1,5 menit. Dalam versi prototipe berikutnya, kami berencana untuk menambahkan pembaca tag RFID, yang akan mendiversifikasi gameplay. Misalnya, gunakan kartu dengan tag RFID yang dapat Anda terapkan di luar giliran Anda.

Gambar kecil


Miniatur menyukai semuanya! Dan kami tidak terkecuali. Oleh karena itu, bersamaan dengan pengumpulan mekanik dan pemrograman, kami terlibat dalam menciptakan miniatur kami sendiri. Saya pikir dari gambar, jelas bahwa permainan kami adalah tentang kucing fantasi yang bertarung di arena.
Karena kami sama sekali tidak tahu cara menggambar dari kata itu, kami menoleh ke teman kami, yang dengan senang hati mulai menggambar "kucing yang bertarung".

Dia mengambil hewan peliharaan kami sebagai dasar. Jadi, di rumahnya tinggal seekor kucing besar dan ganas yang dijuluki "Bajak Laut" - dialah yang mendasari Prajurit mini.

Setelah beberapa minggu, kami mendapatkan sketsa pertama kami.


Dari artikel tentang produksi board game, saya menyadari bahwa di Rusia, pembuatan miniatur cukup buruk dan banyak yang memesannya di Finlandia atau Jerman.

Sebelum terlibat dalam produksi miniatur, kami perlu membuat model utama dari masing-masing pahlawan, yang cukup untuk prototipe. Awalnya kami ingin membuatnya dari tanah liat polimer, tetapi ternyata di antara teman-teman kami tidak ada miniatur, dan custom-made terlalu mahal pada waktu itu. Oleh karena itu, kami memutuskan untuk mencetaknya pada printer 3D terlebih dahulu. Untuk melakukan ini, teman kami membuat kami model 3D dari pahlawan pertama kami di Zbrush.


Dengan bantuan pencetakan FDM, tidak mungkin untuk mencetak angka kualitas yang dapat diterima, yang sangat diharapkan.

Untungnya, istri saya memiliki printer 3D SLA di tempat kerja.

Stereolithography (SLA) adalah teknologi pencetakan 3D yang memungkinkan Anda mengubah bahan cair menjadi benda padat menggunakan sumber cahaya, lapis demi lapis, menggunakan proses photopolymerization. Ketebalan lapisan selama pencetakan menggunakan teknologi SLA beberapa kali lebih kecil daripada saat mencetak menggunakan FDM, oleh karena itu, kualitas produk jadi lebih tinggi.

Beberapa hari kemudian kami diberi miniatur pertama kami.


Kualitas miniatur ini jauh lebih tinggi, tetapi masih belum mencapai produksi yang diperoleh dengan cetakan plastik. Yang disalahkan untuk ini adalah dukungan, yang setelah penghapusan meninggalkan bekas yang nyata. Secara teori, kita dapat "memotong" angka-angka menjadi bagian-bagian yang terpisah dan mencetak masing-masing secara terpisah, tanpa menggunakan dukungan, dan kemudian merekatkannya. Tapi itu akan memakan banyak waktu, dan selain itu, masih bisa berubah di masa depan.

Setiap gambar berdiri di pangkalannya sendiri, yang juga kami cetak pada printer 3D. Di dalam pangkalan adalah magnet neodymium. Ukuran dan ketebalan magnet dipilih secara empiris sehingga sosok tersebut secara magnetis tenang ke elektromagnet pada kereta platform, tetapi tidak bereaksi terhadap angka tetangga.

Total


Saat ini, kami terlibat dalam meningkatkan karakteristik fisik platform dan keandalan semua komponen. Kami akan mengganti kayu lapis dengan plastik polikarbonat dan ABS, kami akan meningkatkan pengikatan komponen platform satu sama lain dan membuat bidang permainan dapat dilepas sehingga dapat diubah ke bidang faktor bentuk lain (misalnya, heksagonal). Langkah selanjutnya adalah membuat MVP lengkap, yang tidak memalukan untuk ditunjukkan kepada orang-orang.

Dengan permainannya sedikit lebih sulit. Tentu saja, saya ingin benar-benar berkonsentrasi pada implementasi platform, tanpa mengacu pada permainan tertentu. Namun, kami sangat menyadari bahwa tidak ada yang tertarik pada platform tanpa game.

Terima kasih atas kritik / saran / minat Anda. Kami punya ide tentang membuat versi tanpa menggunakan mekanik, tetapi dengan kemampuan untuk menentukan posisi dan jenis gambar di lapangan. Saya pikir artikel selanjutnya akan ditulis setelah pembuatan MVP .

Source: https://habr.com/ru/post/id427227/


All Articles