В этой статье описывается игра шахты и улучшенную версию, реализованную Java Swing. Поделитесь этим для вашей ссылки, следующим образом:
Версия 1:
пакет awtdemo; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.mouseevent; импорт java.awt.event.mouselistener; импорт Javax.swing.jbutton; импорт javax.swing.jframe; import.ship. Пример шахты, написанный Swing, подходит для начинающих для практики* Эта программа использует SetBounds (x, y, w, h) для расположения метода управления*, ссылается на шахте, встроенный в Win XP. Конечно, функция написания не была сделана, * некоторые из выполненных функций имеют ошибки * * @author ping_qc */public class test расширяет Jframe, реализует ActionListener, Runnable, Mouseelistener {Private Static Final Longersionuid = -2417758397965039613L; Приватный финал int yety = 0; Частный финальный int mine = 1; Private Final int проверен = 2; Приватный финал int mine_count = 10; // Количество гром частного окончательного окончательного int button_border = 50; // размер каждой точки приватной окончательной окончательной int_size = 10; // Спецификация интерфейса, 20x20 Private Final int start_x = 20; // начало позиции x private final int start_y = 50; // Начало позиции Y Частный логический флаг; Частный JButton [] [] JB; Частный Jlabel JL; Частный Jlabel Showtime; частный int [] [] map; /*** Обнаружение, есть ли молния вокруг точки. Координаты окружающих точек можно рассчитать из этого массива*/ private int [] [] mv = {{-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {-1, -1}}; / *** Случайно генерирует установленное количество грома*/ public void makemine () {int i = 0, tx, ty; for (; i <mine_count;) {tx = (int) (math.random () * mine_size); ty = (int) (math.random () * mine_size); if (map [tx] [ty] == empty) {map [tx] [ty] = mine; i ++; // Не помните повторную молнию}}}}/ *** Поместите массив кнопок на кадр и соответствует карте [] [] массив*/ public void makebutton () {for (int i = 0; i <mine_size; i ++) {for (int j = 0; j <mine_size; j ++) {jb [i] [j] = jbutton; // if (map [i] [j] == mine) // jb [i] [j] .settext (i+","+j); // Слушатель добавляет JB [i] [j] .AdDactionListener (это); jb [i] [j]. jb [i] [j] .setname (i + "_" + j); // Удобное нажатие - определить, какая кнопка была нажата // font font = new Font (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 («Добро пожаловать на тестирование, в общей сложности« + mine_count + »гром»); jl.setvisible (true); JL.SetBounds (20, 20, 500, 30); this.add (JL); showtime.settext ("alpsed: 0 секунд"); Showtime.SetBounds (400, 20, 100, 30); this.add (Showtime); makemine (); makebutton (); это. setize (550, 600); this.SetLocation (700, 100); this.SetReSizable (false); this.setDefaultCloseoperation (exit_on_close); this.setvisible (true); } public Test (String title) {super (title); this.setlayout (null); // не используя диспетчер макетов, установите положение каждого элемента управления с помощью setBounds JB = new Jbutton [mine_size] [mine_size]; jl = new jlabel (); showtime = new jlabel (); map = new int [mine_size] [mine_size]; // составить кнопки в массив} public static void main (string [] args) {test test = new Test ("wulin.com-mine-тест 1"); test.init (); test.run (); } @Override public void actionperformed (actionEvent e) {Object obj = e.getSource (); int x, y; if ((obj exanceof jbutton) == false) {showmessage ("ошибка", "внутренняя ошибка"); возвращаться; } String [] tmp_str = ((jbutton) obj) .getName (). Split ("_"); x = integer.parseint (tmp_str [0]); y = integer.parseint (tmp_str [1]); if (map [x] [y] == mine) {showmessage ("Смерть", "Вы наступили на шахту ~~~"); flag = true; showmine (); возвращаться; } dfs (x, y, 0); CheckSuccess (); } / ** * После каждого щелчка определите, были ли обнаружены все легкие, вычисляя количество кнопок с включенным статусом * / private void checksuccess () {int cnt = 0; for (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 («Победа», «Когда этот шахт» используется: « + tmp_str +" секунды "); flag = true; showmine (); }} private int dfs (int x, int y, int d) {map [x] [y] = cherced; int i, tx, ty, 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) {if (map [tx] [ty] == mine) {cnt ++; // Статистика грома вблизи этой точки} else if (map [tx] [ty] == empity) {; } else if (map [tx] [ty] == проверено) {; }}} 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 && map [tx] [ty]! = проверено) {dfs (tx, ty, d + 1); }}} else {jb [x] [y] .settext (cnt + ""); } jb [x] [y] .setEnabled (false); вернуть CNT; } / ** * Покажите некоторую информацию о TAG JL * * @param название * @param info * / private void showmessage (заголовок строки, string info) {jl.settext (info); System.out.println ("In functino showmessage ():" + info); } public void run () {int t = 0; while (true) {if (flag) {break; } try {thread.sleep (1000); } catch (прерванное искусство e) {e.printstacktrace (); } t ++; showtime.settext ("alpsed:" + t + "секунды"); } // showmine (); } private void showmine () {// icon iconmine = new imageicon ("e: /mine.jpg"); for (int i = 0; i <mine_size; i ++) {for (int j = 0; j <mine_size; j ++) {if (map [i] [j] == mine) {jb [i] [j] .settext ("#"); // jb [i] [j] .secenton (iconmine); }}}} @Override public void mouseClicked (mouseevent e) {if (e.getbutton () == 3) {Object obj = e.getSource (); if ((obj exanceof jbutton) == false) {showmessage ("ошибка", "внутренняя ошибка"); возвращаться; } 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 (new imageicon ("e: /flag.jpg")); } else {jb [x] [y] .seticon (null); }*/}} @Override public void mousepressed (mouseevent e) {// todo автоматически сгенерированный метод} @override public void mousereeleedeled (mouseevent e) {// todo Auto-генерируемый метод @Override public void meousEnted (mouseventevente e) {//tod a awbered a awbered a awbered a autberated a a a a a a a a a a a a at a at a atuberted woid void in a atuberted ubered a a atubered a atuberted woid void void u @Override public void mouseexited (mouseevent e) {// todo автоматически генерируемый метод stub}}Эффект бега:
Версия 2 -это улучшение приведенной выше программы версии 1, а функция маркировки правой кнопкой мыши и функция «Независимая сложности» добавляется на основе неизменной основы.
пакет awtdemo; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.mouseevent; импорт java.awt.event.mouselistener; импорт javax.swing.jbutton; импорт javax.wing.jframe; javax.swing.jlabel; @suppresswarnings ("serial") открытый класс Saalei расширяет JFrame реализует ActionListener, Runnable, MouseListener {Private Final int loempty = 0; Частный финал int lomine = 1; Частный финал int lokecked = 2; Приватный финал int lomine_count = 10; Частный финал int lobutton_border = 50; Частный конечный int lomine_size = 10; Приватный финал int LOSTART_X = 20; Приватный финал int LOSTART_Y = 50; частный логический флаг; Частный JButton [] [] JB; Частный Jlabel JL; Частный Jlabel Showtime; частный int [] [] map; 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; for (; i <lomine_count;) {tx = (int) (math.random () * lomine_size); ty = (int) (math.random () * lomine_size); if (map [tx] [ty] == loempty) {map [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 (это); jb [i] [j]. 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 («Тест приветствуется, есть в общей сложности" + lomine_count + "Thunder"); jl.setvisible (true); JL.SetBounds (20, 20, 500, 30); this.add (JL); showtime.settext ("alpsed: 0 секунд"); Showtime.SetBounds (400, 20, 100, 30); this.add (Showtime); makelomine (); makebutton (); это. setize (550, 600); this.SetLocation (700, 100); this.SetReSizable (false); this.setDefaultCloseoperation (exit_on_close); this.setvisible (true); } public saalei (строка названия) {super (title); this.setlayout (null); // не используется диспетчер макетов, SetBounds для позиции каждого элемента управления JB = new Jbutton [lomine_size] [lomine_size]; jl = new jlabel (); showtime = new jlabel (); map = new int [lomine_size] [lomine_size]; // составить кнопки в массив} public static void main (string [] args) {saolei test = new saolei ("wulin.com-mine chackging test 2"); test.init (); test.run (); } @Override public void actionperformed (actionEvent e) {Object obj = e.getSource (); int x, y; if ((obj exanceof jbutton) == false) {showmessage ("ошибка", "внутренняя ошибка"); возвращаться; } String [] tmp_str = ((jbutton) obj) .getName (). Split ("_"); x = integer.parseint (tmp_str [0]); y = integer.parseint (tmp_str [1]); if (map [x] [y] == lomine) {showmessage ("Смерть", "Вы наступили на шахту ~~~"); flag = true; showlomine (); возвращаться; } dfs (x, y, 0); CheckSuccess (); } private void checkSuccess () {int cnt = 0; for (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 («Победа», «Когда этот шахт» используется: « + tmp_str +" секунды "); flag = true; showlomine (); }} private int dfs (int x, int y, int d) {map [x] [y] = lockecked; int i, tx, ty, 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) {if (map [tx] [ty] == lomine) {cnt ++; } else if (map [tx] [ty] == loempty) {; } else if (map [tx] [ty] == lockecked) {; }}} 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 && map [tx] [ty]! = lochecked) {dfs (tx, ty, d + 1); }}} else {jb [x] [y] .settext (cnt + ""); } jb [x] [y] .setEnabled (false); вернуть CNT; } private void showmessage (заголовок строки, string info) {jl.settext (info); System.out.println ("In functino showmessage ():" + info); } public void run () {int t = 0; while (true) {if (flag) {break; } try {thread.sleep (1000); } catch (прерванное искусство e) {e.printstacktrace (); } t ++; showtime.settext ("истешенное время:" + t + "секунды"); }} private void showlomine () {for (int i = 0; i <lomine_size; i ++) {for (int j = 0; j <lomine_size; j ++) {if (map [i] == lomine) {jb [i] [j] .settext ("thunder"); }}}} public void mouseClicked (mouseevent e) {if (e.getbutton () == 3) {Object obj = e.getSource (); if ((obj exanceof jbutton) == false) {showmessage ("ошибка", "внутренняя ошибка"); возвращаться; } 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 mousereeleedeled (mouseevent e) {} public void mouseEnted (mouseevent e) {} @override public void mouseeexited (mouseevent e) {}}Эффект бега:
Для получения дополнительной информации об алгоритмах Java, читатели, которые заинтересованы в этом сайте, могут просмотреть темы: «Учебное пособие по структуре данных Java и алгоритм», «Сводка операции Java Dom Node», «Сводка Java File и каталог
Я надеюсь, что эта статья будет полезна для всех Java Programming.