Ketika saya belajar Javascript, saya menulis game Sudoku di Javascript. Baru -baru ini saya membaca beberapa konten Java, jadi saya ingin membuat game Java dari game Sudoku.
Sekarang saya akan membagikan semua kode dan belajar dari Anda. Tentu saja, ada berbagai masalah dan kekurangan dalam kode. Saya harap Anda akan mengkritik dan memberi saya beberapa nasihat.
Berikut ini adalah algoritma inti untuk menghasilkan peta Sudoku. Algoritma ini tidak terlalu bagus, dan saya juga telah merujuk beberapa ide online sebelumnya:
Paket hlc.shudu.src;/** Sudoku Help Class, yang menyediakan semua algoritma yang diperlukan untuk data*/kelas publik Shuduhelper {// Sudoku Map Array Private Static Int [] [] peta = int [9] [9]; // Jumlah posisi yang dapat ditempatkan di setiap grid sembilan meter statis statis int [] canputsum = int baru [9]; // Gunakan untuk menyimpan int static int [] yang sebelumnya digunakan = int int [9]; // apakah pembuatan peta telah diselesaikan boolean statis isok = true; /** Dapatkan array peta sudoku*/int static int [] [] getMap () {// menilai apakah peta telah dihasilkan dan regenerasi jika belum selesai. // Dari sini kita dapat melihat bahwa algoritma masih perlu dioptimalkan. Jika backtrack bagus, itu dapat diregenerasi melalui backtracking, dan di sini ia diregenerasi dengan mengeksekusi ulang algoritma generasi. Saya berharap teman -teman yang tertarik dapat menerapkan yang berikut. do {isok = true; initmaps (); } while (! isok); peta mengembalikan; } / * * Inisialisasi peta * / private static void initmaps () {// inisialisasi array peta tanpa nomor apa pun untuk (int i = 0; i <9; i ++) {for (int j = 0; j <9; j ++) {peta [i] [j] = -1; }} // Isi 1 ~ 9 untuk (int num = 1; num <= 9; num ++) {for (int i = 0; i <9; i ++) {bekas [i] = -1; canputsum [i] = -1; } // Lintasi setiap grid kesembilan di grid sembilan besar untuk (int i = 0; i <9; i ++) {if (canputsum [i] ==-1) {canputsum [i] = getCanPutsum (i, num); } if (canPutsum [i] == 1) {bekas [i] = -1; } if (canPutsum [i] == 0) {canPutsum [i] = -1; digunakan [i] = -1; // Jika angka NUM tidak dapat ditempatkan di sembilan grid saat ini, lalu kembali ke NIN IF sebelumnya (i> 0) {// Bersihkan posisi di mana num ditempatkan di sembilan grid IF sebelumnya (digunakan [i-1]! =-1) {// peta [(int) (Math.floor (digunakan [i-1]/3)+math.floor ((i-1)/3)*3)] [digunakan [i-1]%3+((i-1)%3)*3] =-1; clearnum (i - 1, num); } // Saya mundur satu, karena loop grey akan menambahkan satu ke i, jadi 2 dikurangi di sini i -= 2; melanjutkan; } else {isok = false; kembali; }} else {// Masukkan num ke dalam bendera boolean grid kesembilan saat ini = false; while (! flag) {int j = (int) (math.random () * 9); // Koordinat horizontal dari persegi kecil saat ini int ii = (i / 3) * 3 + j / 3; // Koordinat vertikal saat ini dari intr square kecil jj = (i % 3) * 3 + j % 3; //System.out.println("num:"+num+"/tii :"+ii+"/tjj :"+jj); // jika num dapat ditempatkan, tempatkan jika (peta [ii] [jj] == -1 && j! = Digunakan [i] && isCanput (ii, jj, num)) {peta [ii] [jj] = num; digunakan [i] = j; canputsum [i] -= 1; bendera = true; }}}}}}}} / * * Clear num di grid kesembilan kesembilan * / private static void clearnum (int i, int num) {for (int j = 0; j <9; j ++) {// koordinat horizontal dari persegi kecil saat ini int ii = (i / 3) * 3+J / 3+3; // Koordinat vertikal dari persegi kecil saat ini int jj = (i % 3) * 3 + j % 3; // Tentukan apakah kuadrat kecil saat ini dapat ditempatkan jika (peta [ii] [jj] == num) {peta [ii] [jj] = -1; }}} /** Dapatkan jumlah posisi di mana sembilan klien saat ini dapat ditempatkan di angka num* / private static int getCanputsum (int i, int num) {int sum = 0; // lintasi sembilan-klien untuk (int j = 0; j <9; j ++) {// Koordinat horizontal dari kuadrat kecil saat ini int ii = (i / 3) * 3+j / 3; // Koordinat vertikal dari intr square kecil saat ini = i % 3 * 3 + j % 3; // Tentukan apakah kuadrat kecil saat ini dapat ditempatkan jika (peta [ii] [jj] == -1 && isCanput (ii, jj, num)) {++ jumlah; }} return sum; } / * * Tentukan apakah titik koordinat horizontal dan vertikal dapat ditempatkan num * / private static boolean isCanput (int ii, int jj, int num) {// Tentukan apakah jumlah yang sama dari baris atau kolom yang sama dari titik koordinat yang ditentukan memiliki angka yang sama. Jika ada, itu salah untuk (int i = 0; i <9; i ++) {if (peta [ii] [i] == num) {return false; } if (peta [i] [jj] == num) {return false; }} return true; }}Paket lengkap dapat diunduh di github: https://github.com/houlongchao/s
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.