Artikel ini menjelaskan permainan sapu tambang dan versi yang ditingkatkan yang diimplementasikan oleh Java Swing. Bagikan untuk referensi Anda, sebagai berikut:
Versi 1:
Paket awtdemo; impor java.awt.event.actionevent; impor java.awt.event.actionlistener; impor java.awt.event.mouseevent; impor java.awt.event.mouselistener; import javax.swing.jbutton; impor javax.swing.swing Contoh Sapu Tambang, yang ditulis oleh ayunan, cocok untuk pemula untuk berlatih* Program ini menggunakan Setbounds (x, y, w, h) untuk tata letak metode kontrol* mengacu pada sapu-tambang yang dibangun menjadi Win XP. Tentu saja, fungsi penulisan belum dibuat, * Beberapa fungsi yang dibuat memiliki bug * * @author ping_qc */tes kelas publik memperluas jframe mengimplementasikan ActionListener, runnable, mouselistener {private static long serialversionuid = -24175883977965039613l; Private Final Int kosong = 0; Tambang int private final = 1; int private int checked = 2; private final int mine_count = 10; // Jumlah Thunder Private Int Button_border = 50; // Ukuran setiap poin private final int mine_size = 10; // Spesifikasi Antarmuka, 20x20 Private Final Int Start_X = 20; // Mulai Posisi X Private Final Int Start_y = 50; // Mulai posisi y bendera boolean pribadi; Private Jbutton [] [] JB; Private Jlabel JL; Private Jlabel Showtime; private int [] [] peta; /*** Deteksi apakah ada petir di sekitar titik. Koordinat titik -titik di sekitarnya dapat dihitung dari array ini*/ private int [] [] mv = {{-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {-1, -1}}; / *** secara acak menghasilkan sejumlah guntur*/ public void makeMine () {int i = 0, tx, ty; untuk (; i <mine_count;) {tx = (int) (math.random () * Mine_size); ty = (int) (math.random () * mine_size); if (peta [tx] [ty] == kosong) {peta [tx] [ty] = tambang; i ++; // Jangan ingat kilat berulang}}}}/ *** Letakkan array tombol pada bingkai dan sesuai dengan peta [] [] array*/ public void makeButton () {for (int i = 0; i <Mine_Size; i ++) {for (int j = 0; j <Mine_Size; j ++) {f untuk (int j = 0; j <Mine_Size; j ++) {f untuk (int j = 0; j <Mine_Size; j ++) {jb [j] (j = j <Mine_size; j ++) {jb [j] (j] (j <Mine_Size; j ++) {f untuk (int j = 0; j <Mine_Size; j ++) {jb [JB = J <Mine_Size; j ++) {JB [JBRE = J <MINE_SIZE; J ++) {JB [JBRE = J <MINGINE_SIZE; // if (peta [i] [j] == milik saya) // jb [i] [j] .setText (i+","+j); // pendengar menambahkan jb [i] [j] .addactionListener (ini); jb [i] [j] .addmouseListener (ini); jb [i] [j] .setname (i + "_" + j); // Klik yang nyaman adalah untuk menentukan tombol mana yang diklik // font font = font baru (font.serif, font.bold, 10); // jb [i] [j] .setFont (font); // jb [i] [j] .setText (i+","+j); jb [i] [j] .setBounds (j * button_border + start_x, i * button_border + start_y, button_border, button_border); this.add (jb [i] [j]); }}} public void init () {flag = false; jl.setText ("Selamat datang untuk menguji, ada total" + MINE_COUNT + "Thunder"); jl.setVisible (true); jl.setbounds (20, 20, 500, 30); this.add (jl); showtime.setText ("Diselap: 0 detik"); showtime.setbounds (400, 20, 100, 30); this.add (showtime); Makemine (); makeButton (); this.setsize (550, 600); this.setlocation (700, 100); this.setresizable (false); this.setDefaultCloseOperation (exit_on_close); this.setVisible (true); } tes publik (judul string) {super (judul); this.setLayout (null); // tidak menggunakan Layout Manager, atur posisi setiap kontrol dengan setBounds jb = new jbutton [MINE_SIZE] [MINE_SIZE]; JL = JLabel baru (); showtime = new jlabel (); peta = int baru [MINE_SIZE] [MINE_SIZE]; // Peta tombol ke dalam array} public static void main (string [] args) {test test = test baru ("wulin.com-mine sweeping game test 1"); test.init (); test.run (); } @Override public void actionPerformed (actionEvent e) {objek obj = e.getSource (); int x, y; if ((Obj instanceof jbutton) == false) {showmessage ("error", "internal error"); kembali; } String [] tmp_str = ((jbutton) obj) .getName (). Split ("_"); x = integer.parseint (tmp_str [0]); y = integer.parseint (tmp_str [1]); if (peta [x] [y] == Mine) {showmessage ("Death", "Anda menginjak tambang ~~~"); bendera = true; showmine (); kembali; } dfs (x, y, 0); checkSuccess (); } / ** * Setelah setiap klik, tentukan apakah semua cahaya telah ditemukan dengan menghitung jumlah tombol dengan status yang diaktifkan * / private void checkSuccess () {int cnt = 0; untuk (int i = 0; i <mine_size; i ++) {for (int j = 0; j <mine_size; j ++) {if (jb [i] [j] .iSenabled ()) {cnt ++; }}} if (cnt == MINE_COUNT) {string tmp_str = showtime.getText (); tmp_str = tmp_str.replaceall ("[^0-9]", ""); Showmessage ("Victory", "ketika Minesweep ini dibagikan:" + tmp_str + "detik"); bendera = true; showmine (); }} private int dfs (int x, int y, int d) {peta [x] [y] = diperiksa; int i, tx, ty, cnt = 0; untuk (i = 0; i <8; i ++) {tx = x+mv [i] [0]; ty = y + mv [i] [1]; if (tx> = 0 && tx <mine_size && ty> = 0 && ty <mine_size) {if (peta [tx] [ty] == mine) {cnt ++; // statistik nomor guntur di dekat titik ini} else if (peta [tx] [ty] == kosong) {; } lain jika (peta [tx] [ty] == diperiksa) {; }}} if (cnt == 0) {for (i = 0; i <8; i ++) {tx = x+mv [i] [0]; ty = y + mv [i] [1]; if (tx> = 0 && tx <mine_size && ty> = 0 && ty <mine_size && peta [tx] [ty]! = checked) {dfs (tx, ty, d + 1); }}} else {jb [x] [y] .setText (cnt + ""); } jb [x] [y] .setEnabled (false); mengembalikan CNT; } / ** * Tampilkan beberapa informasi pada tag jl * * @param title * @param info * / private void showmessage (judul string, info string) {jl.setText (info); System.out.println ("Di functino showMessage ():" + info); } public void run () {int t = 0; while (true) {if (flag) {break; } coba {thread.sleep (1000); } catch (InterruptedException e) {E.PrintStackTrace (); } t ++; showTime.setText ("Diselap:" + T + "detik"); } // showmine (); } private void showMine () {// ikon iconmine = new ImageIcon ("e: /mine.jpg"); untuk (int i = 0; i <mine_size; i ++) {for (int j = 0; j <mine_size; j ++) {if (peta [i] [j] == Mine) {jb [i] [j] .setText ("#"); // jb [i] [j] .Setsetenton (iconMine); }}}} @Override public void mouseclicked (mouseEvent e) {if (e.getButton () == 3) {objek obj = e.getSource (); if ((Obj instanceof jbutton) == false) {showmessage ("error", "internal error"); kembali; } String [] tmp_str = ((jbutton) obj) .getName (). Split ("_"); int x = integer.parseint (tmp_str [0]); int y = integer.parseint (tmp_str [1]); if ("{1}". Equals (jb [x] [y] .getText ()))) {jb [x] [y] .setText (""); } else {jb [x] [y] .setText ("{1}"); } /* if (jb [x] [y] .geticon () == null) {jb [x] [y] .seticon (gambar baru ("e: /flag.jpg")); } else {jb [x] [y] .seticon (null); }*/ } } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void MouseExited (MouseEvent E) {// TODO Metode yang dihasilkan otomatis Stub}}Efek Menjalankan:
Versi 2 adalah peningkatan untuk program versi 1 di atas, dan fungsi penandaan klik kanan dan fungsi kesulitan seleksi independen ditambahkan berdasarkan basis yang tidak berubah.
Paket awtdemo; impor java.awt.event.actionevent; impor java.awt.event.actionlistener; import java.awt.event.mouseevent; import java.awt.event.mouselistener; import javax.swing.jbutton; impor javax.swing.swing; javax.swing.jlabel; @suppresswarnings ("serial") Kelas publik Saolei memperluas jframe mengimplementasikan ActionListener, Runnable, MouseListener {private final int loempty = 0; private final int lomine = 1; private final int lochecked = 2; private final int lomine_count = 10; private final int lobutton_border = 50; private final int lomine_size = 10; private final int lostart_x = 20; private final int lostart_y = 50; bendera boolean pribadi; Private Jbutton [] [] JB; Private Jlabel JL; Private Jlabel Showtime; private int [] [] peta; private int [] [] mv = {{-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}}; public void makelomine () {int i = 0, tx, ty; untuk (; i <lomine_count;) {tx = (int) (math.random () * lomine_size); ty = (int) (math.random () * lomine_size); if (peta [tx] [ty] == loempty) {peta [tx] [ty] = lomine; i ++; }}} public void makeButton () {for (int i = 0; i <lomine_size; i ++) {for (int j = 0; j <lomine_size; j ++) {jb [i] [j] = new jbutton (); jb [i] [j] .addactionListener (ini); jb [i] [j] .addmouseListener (ini); jb [i] [j] .setname (i + "_" + j); jb [i] [j] .setBounds (j * lobutton_border + lostart_x, i * lobutton_border + lostart_y, lobutton_border, lobutton_border); this.add (jb [i] [j]); }}} public void init () {flag = false; jl.setText ("Tes Welcome, ada total" + lomine_count + "Thunder"); jl.setVisible (true); jl.setbounds (20, 20, 500, 30); this.add (jl); showtime.setText ("Diselap: 0 detik"); showtime.setbounds (400, 20, 100, 30); this.add (showtime); makelomine (); makeButton (); this.setsize (550, 600); this.setlocation (700, 100); this.setresizable (false); this.setDefaultCloseOperation (exit_on_close); this.setVisible (true); } public saolei (judul string) {super (judul); this.setLayout (null); // Tidak ada manajer tata letak yang digunakan, setBounds untuk posisi masing -masing kontrol JB = jbutton baru [lomine_size] [lomine_size]; JL = JLabel baru (); showtime = new jlabel (); peta = int baru [lomine_size] [lomine_size]; // Peta tombol ke dalam array} public static void main (string [] args) {Saolei test = baru saolei ("wulin.com-mine sweeping game test 2"); test.init (); test.run (); } @Override public void actionPerformed (actionEvent e) {objek obj = e.getSource (); int x, y; if ((Obj instanceof jbutton) == false) {showmessage ("error", "internal error"); kembali; } String [] tmp_str = ((jbutton) obj) .getName (). Split ("_"); x = integer.parseint (tmp_str [0]); y = integer.parseint (tmp_str [1]); if (peta [x] [y] == lomine) {showmessage ("death", "Anda menginjak tambang ~~~"); bendera = true; showlomine (); kembali; } dfs (x, y, 0); checkSuccess (); } private void checkSuccess () {int cnt = 0; untuk (int i = 0; i <lomine_size; i ++) {for (int j = 0; j <lomine_size; j ++) {if (jb [i] [j] .iSenabled ()) {cnt ++; }}} if (cnt == lomine_count) {string tmp_str = showtime.getText (); tmp_str = tmp_str.replaceall ("[^0-9]", ""); Showmessage ("Victory", "ketika Minesweep ini dibagikan:" + tmp_str + "detik"); bendera = true; showlomine (); }} private int dfs (int x, int y, int d) {peta [x] [y] = lochecked; int i, tx, ty, cnt = 0; untuk (i = 0; i <8; i ++) {tx = x+mv [i] [0]; ty = y + mv [i] [1]; if (tx> = 0 && tx <lomine_size && ty> = 0 && ty <lomine_size) {if (peta [tx] [ty] == lomine) {cnt ++; } lain jika (peta [tx] [ty] == loempty) {; } lain jika (peta [tx] [ty] == lochecked) {; }}} if (cnt == 0) {for (i = 0; i <8; i ++) {tx = x+mv [i] [0]; ty = y + mv [i] [1]; if (tx> = 0 && tx <lomine_size && ty> = 0 && ty <lomine_size && peta [tx] [ty]! = lochecked) {dfs (tx, ty, d + 1); }}} else {jb [x] [y] .setText (cnt + ""); } jb [x] [y] .setEnabled (false); mengembalikan CNT; } private void showMessage (judul string, info string) {jl.settext (info); System.out.println ("Di functino showMessage ():" + info); } public void run () {int t = 0; while (true) {if (flag) {break; } coba {thread.sleep (1000); } catch (InterruptedException e) {E.PrintStackTrace (); } t ++; showtime.setText ("waktu berlalu:" + t + "detik"); }} private void showlomine () {for (int i = 0; i <lomine_size; i ++) {for (int j = 0; j <lomine_size; j ++) {if (peta [i] [j] == lomine) {jb [i] [j]. }}}} public void mouseclicked (mouseEvent e) {if (e.getButton () == 3) {objek obj = e.getSource (); if ((Obj instanceof jbutton) == false) {showmessage ("error", "internal error"); kembali; } String [] tmp_str = ((jbutton) obj) .getName (). Split ("_"); int x = integer.parseint (tmp_str [0]); int y = integer.parseint (tmp_str [1]); if ("{1} quot" .Equals (jb [x] [y] .getText ())) {jb [x] [y] .setText (""); } else {jb [x] [y] .setText ("{1} quot"); }}} public void mousePressed (mouseEvent e) {} @Override public void mousereLeased (mouseEvent e) {} public void mouseEntered (mouseEvent e) {} @Override public void mouseexited (mouseevent e) {}}Efek Menjalankan:
Untuk informasi lebih lanjut tentang algoritma java, pembaca yang tertarik dengan situs ini dapat melihat topik: "struktur data java dan tutorial algoritma", "ringkasan tips node dom java", "ringkasan file operasi java dan direktori" dan "ringkasan tip operasi java cache" tips java "tips java" Tips "Java Cache Tips"
Saya harap artikel ini akan membantu pemrograman Java semua orang.