Chipfire
Game rantai ledakan di grid yang bisa dimainkan melawan teman di perangkat lain, tanpa server sama sekali

- server backend untuk permainan online
- 0
- pemain per permainan di satu perangkat
- 2–4
- permainan simulasi sebelum setiap deploy
- 3.000
- tingkat kesulitan lawan AI
- 3
Di halaman ini
Masalahnya
Chain Reaction adalah permainan grid yang cukup terkenal, dengan puluhan tiruan di browser. Kebanyakan salah di dua hal. Yang pertama adalah aturannya sendiri. Saat sebuah sel mencapai kapasitasnya, isinya seharusnya dikurangi sebesar kapasitas itu, dan sisanya tetap tinggal. Kebanyakan versi malah mengosongkannya. Permainannya masih terlihat wajar, tapi sebenarnya sudah jadi permainan lain, dan tidak ada yang sadar.
Yang kedua adalah mode multipemain. Setiap versi online butuh lobi, sistem pencari lawan, dan server permainan, lengkap dengan tagihan hosting-nya. Biaya itulah yang membuat kebanyakan game kecil tidak pernah punya mode online.
Chipfire dibuat untuk dua kelompok. Pemain mendapat game cepat yang bisa dipelajari dalam dua menit dan dimainkan melawan teman di perangkat lain, tanpa akun. Pembaca teknis mendapat contoh yang berjalan dari multipemain tanpa backend sama sekali.
Yang saya bangun
Langkah yang sama selalu menghasilkan permainan yang sama
Saya membuat mesin aturannya sepenuhnya bisa ditebak. Mesin ini hanya memakai bilangan bulat, tanpa jam, dan keacakan hanya berasal dari seed yang tersimpan di dalam permainan. Perangkat apa pun, di browser apa pun, menghasilkan hasil yang sama dari langkah yang sama. Jadi sebuah permainan cukup disimpan sebagai daftar langkahnya. Replay, undo, kode permainan yang bisa dibagikan, dan sinkronisasi online semuanya lahir dari sifat itu. Tidak ada data lain yang disimpan atau dikirim sebagai sumber kebenaran.
Dua browser saling memeriksa setiap giliran
Dalam permainan online, setiap browser menyimpan salinan permainannya sendiri. Yang dikirim hanya langkah dan sidik jari pendek dari posisi papan. Kedua sisi menjalankan langkah yang sama lalu membandingkan sidik jarinya setiap giliran. Kalau berbeda, berarti kedua pemain sudah berada di dua permainan yang berlainan. Aplikasi langsung berhenti, memberi tahu kedua pemain, dan menawarkan untuk membangun ulang dari daftar langkah. Aplikasi tidak pernah diam-diam memilih pemenang.
Pemain sendiri yang mempertemukan perangkatnya
Dua browser di balik router rumah tidak bisa saling menemukan. Biasanya ada server yang memperkenalkan keduanya. Saya mengubah perkenalan itu menjadi kode pendek yang bisa ditempel. Kita mengirim satu kode lewat WhatsApp, teman membalas dengan satu kode, dan permainan tersambung. Tidak ada infrastruktur yang perlu dibayar, dibatasi, atau bisa dimatikan.
Rantai ledakan diproses dengan urutan tetap
Sebuah cascade diproses satu sel demi satu sel dari antrean, dengan urutan pemindaian yang sama di setiap perangkat. Dua browser yang memproses sel dengan urutan berbeda akan pelan-pelan tidak sinkron, dan bug seperti itu tidak akan pernah muncul di satu mesin. Kapasitas sebuah sel adalah jumlah tetangganya, dibaca dari satu fungsi. Dengan begitu, papan heksagonal atau papan yang tepinya menyambung bisa ditambahkan nanti tanpa banyak perubahan.
Koneksi yang gagal dijelaskan
Sekitar 10 sampai 20% koneksi, di jaringan kantor yang ketat dan sebagian router rumah, tidak bisa menyambungkan dua perangkat secara langsung tanpa server relay berbayar. Relay akan merusak ide tanpa backend. Jadi Chipfire mendeteksi kegagalan itu dengan cepat, menjelaskannya dalam bahasa yang mudah dipahami, dan langsung menawarkan permainan lokal.
Hasilnya
Chipfire sudah live dalam bahasa Indonesia dan Inggris. Kita bisa bermain bergantian di satu perangkat untuk 2 sampai 4 orang, melawan AI dengan tiga tingkat kesulitan, atau melawan teman secara online lewat kode yang ditempel. Ada juga penampil replay, kode permainan yang bisa dibagikan, pratinjau langkah, dan tutorial lima pelajaran. Setiap deploy lebih dulu memainkan 3.000 permainan simulasi untuk membuktikan mesinnya konsisten. Saya membangunnya dalam waktu kurang dari 24 jam pada 2 dan 3 Agustus 2026, dari spesifikasi tertulis sampai situs ter-deploy.
Di balik layarDetail teknis untuk engineer
applyMove(state, move)murni: tanpaDate, tanpaMath.random(generator ber-seed disimpan di state), tanpa float, termasuk di penilaian AI.- Cascade memakai antrean FIFO eksplisit dengan urutan pemindaian tetangga yang tetap. Tanpa rekursi, yang bisa meluap di rantai panjang, dan tanpa iterasi atas
Setatau key objek.Uint8Arrayberisi penanda posisi dipakai sebagai penggantiSet. - Deteksi desync menukar hash FNV-1a 32-bit dari seluruh state setiap giliran. Ukuran papan dan seed ikut dalam offer; setelah itu hanya langkah yang dikirim.
- Signalling memakai offer
RTCPeerConnectionyang dikompresi denganCompressionStream(deflate-raw) menjadi kode yang bisa ditempel. Dua server STUN publik Google hanya dipakai untuk menemukan alamat. Tidak ada relay TURN. Signalling lewat broker PeerJS (M5) dan encoding QR masih belum dikerjakan. - AI memakai minimax dengan alpha-beta pruning dan iterative deepening di Web Worker, dengan anggaran waktu dan jam yang di-inject. Penilaiannya mencakup keunggulan orb dan sel, kontrol sudut dan tepi, serta kerentanan. Tingkat kesulitan mencari di kedalaman 1, 3, dan 6, dilemahkan hanya dengan noise ber-seed.
- Pratinjau langkah menjalankan langkah asli di mesin asli pada salinan sementara (
lib/engine/preview.ts). - Mesin mengeluarkan event
place,explode,convert,eliminate, danwinyang berurutan dalam gelombang. Renderer memutarnya ulang dan menghormatiprefers-reduced-motion. - Pelajaran tutorial memakai posisi papan asli yang hasilnya diverifikasi di tes. Setiap warna pemain dipasangkan dengan susunan orb yang berbeda, jadi warna tidak pernah jadi satu-satunya penanda.
- Namanya diganti dari Rantai ke Chipfire setelah mekanismenya dikenali sebagai chip-firing game (model abelian sandpile). Kedua key
localStoragedimigrasikan dengan fallback lama. - Bug Tailwind yang hanya muncul di production menghilangkan warna pemain karena
lib/tidak masuk jalur pemindaian class. - CI menjalankan typecheck, lint, seluruh tes (termasuk simulasi 3.000 permainan dan kecocokan antar-instance), lalu mengecek hasil export untuk
.nojekylldan rute bahasa. - Dependensi runtime:
next,react,react-dom. Mesin 984 baris, AI 300 baris, jaringan 404 baris. Sekitar 6.700 baris TypeScript di 66 berkas, 70 tes di 15 berkas, 26 commit.
Tangkapan layar
Sedang merekrut, atau membangun hal serupa?
Saya terbuka untuk posisi full-time dan proyek freelance tertentu.