Dalam prototipe yang saya lakukan, ada minigame yang mirip dengan bejeweled. Menggunakan kisi yang merupakan array 2d ( int[,]
) bagaimana saya bisa mengetahui kapan pengguna membentuk kecocokan? Saya hanya peduli secara horizontal dan vertikal.
Dari atas kepala saya, saya berpikir saya hanya akan melihat setiap arah. Sesuatu seperti:
int item = grid[x,y];
if(grid[x-1,y]==item)
{
int step=x;
int matches =2;
while(grid[step-1,y]==item)
{
step++;
matches++
}
if(matches>2)
//remove all matching items
}
else if(grid[x+1,y]==item
//....
else if(grid[x,y-1==item)
//...
else if(grid[x,y+1]==item)
//...
Sepertinya harus ada cara yang lebih baik. Disana?
Jawaban:
Ulangi setiap item dalam sumbu yang sama (x atau y), jika item tersebut sama dengan item sebelumnya yang cocok. Ketika item berikutnya menjadi berbeda, periksa apakah kecocokan atau lebih dari 3, panggil fungsi yang menghapus item yang cocok, dan lanjutkan.
Kode AS3:
Ini hanya untuk sumbu x, untuk y, kisi [col] [i] akan menjadi kisi [i] [baris], dll. Saya yakin Anda dapat mengetahuinya :)
sumber
Hanya berpikir saya akan menimbang dengan pengalaman kami dalam membangun game seperti Match-3.
Kami telah membangun prototipe untuk permainan kata berbasis Match-3, sedikit seperti menumbuk scrabble dan Bejeweled. Kami menyadari sangat awal bahwa mesin yang memasok permata baru / ubin untuk mengisi ruang kosong harus sangat introspektif (kami menjalankan heuristik hybrid dan pengambilan sampel MonteCarlo) untuk menciptakan peluang nyata bagi pemain untuk merangkai huruf untuk membentuk kata-kata melalui Mekanik Match-3. Ini jauh lebih rumit daripada deskripsi tapi saya tetap singkat karena kita harus menulis makalah.
Untuk menjawab OP - kami sedang melakukan pemeriksaan pola untuk menilai berapa banyak kecocokan yang ada pada semua sandang yang diberikan, pada saat ini, melalui metode yang sangat mirip dengan cuplikan kode "gladoscc". Meskipun bekerja dengan baik, biaya komputasi untuk menjalankan yang secara rekursif selama play-out pencarian pohon menjadi beban yang substansial, jadi kami sedang dalam proses menulis ulang bagian logika ini dan representasi data dengan metodologi bit-board ( umumnya diimplementasikan dalam jaringan lain seperti permainan seperti catur, catur, Othello, dll. Dalam tes kami telah menunjukkan bahwa itu dapat berjalan lebih dari 20 kali lebih cepat dalam ActionScript, dan bagi kami kebutuhan untuk melakukannya adalah slam-dunk - dan membebaskan siklus penting untuk responsif, suara, animasi, dll.
sumber
Rekursi, yo. Itu untuk ketika Anda tidak tahu batas Anda.
sumber
Anda dapat menggunakan algoritma pengisian banjir . Ini benar-benar bisa digunakan untuk masalah jenis ini.
sumber