Опыт промахивания шахты Swing предназначен для вашей ссылки. Конкретный контент заключается в следующем
Недавно я сделал небольшую игру после изучения свинга:
1. Предварительный дизайн
2. Реализация
Фактически, ядро завершения этой игры заключается в манипулировании массивом. Основной код ниже - main.java:
Пакет первой; импортировать java.awt.color; import java.awt.dimension; импорт java.awt.font; import java.awt.gridlayout; импорт java.awt.image; импорт java.awt.toolkit; импорт java.awt.datatransfer.clipboard; импорт. java.awt.event.actionlistener; import java.awt.event.mouseevent; import java.awt.event.mouselistener; import java.io.bufferedReader; import java.io.bufferedwriter; import.io.ioexcept java.net.serversocket; импорт java.net.socket; import java.sql.drivermanager; импорт java.sql.sqlexception; импорт java.util.hashset; импорт java.util.set; import java.util.uuid; импорт javax.swing.imageicon; импорт. javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jmenu; импорт javax.swing.jmenubar; импорт javax.swing.jmenuitem; импорт javax.swing.joptionpane; импорт javax.swing.timer; import com.mysql.jdbc.connection; com.mysql.jdbc.statement; открытый класс основной расширение JFrame реализует ActionListener, MouseListener { / *** Yijian* / Private Static Final Long SerialVersionUID = 1L; // Раннее объявление параметров Jmenuitem Jminew, Jmisave, Jmiopen, Jmiexit, Jmichuji, Jmizhongji, Jmigaoji, Jmishowinfo, Jmiziding; Toolkit toolkit = toolkit.getDefaulttoolkit (); // Получить инструментарий по умолчанию. Буфер обширного обмена = toolkit.getSystemClipboard (); // Получить экземпляр системы калибровки // в качестве интерфейса для инструмента буфера обмена, предоставленного нативной платформой. // Два значка ImageICon Icon = new ImageICon ("g: //eclipse-workspace//classtest_thundergame//mine.png"); ImageIcon icon1 = new Imageicon ("g: //eclipse-workspace//classtest_thundergame//flag.png"); Private Static int num = 1; // Это число является номером гром, вы можете написать программу для изменения // частного статического окончательного окончания int snum = 9; // Эта Snum - количество плиток, вы можете написать программу для изменения частного JButton [] [] jb; частный int [] [] map; Boolean [] [] флаги; логический [] [] флаг; int couttime; // Объявит соединение соединения Connection Con; // имя драйвера string driver = "com.mysql.jdbc.driver"; // URL: укажите на имя базы данных, чтобы получить доступ к строке url = "jdbc: mysql: // localhost: 3306/testsql3"; // mysql настроен пользовательская строка user = "root"; // пароль строки пароль = "huang"; public main (int snum, int mines) {// main interface constructor settitle ("Mine-Sweeping"); // начальное число гром num = мины; Jmenubar greenbar = new jmenubar (); // Контейнер меню greenbar.setopaque (true); greenbar.setbackground (новый цвет (250, 250, 250)); greenbar.setPreferredSize (новое измерение (800, 28)); greenbar.setfont (новый шрифт (font.dialog_input, font.italic, 16)); // меню jmenu filemenu1 = new jmenu ("игра"); Jmenu filemenu2 = new jmenu ("сложность"); Jmenu filemenu3 = new jmenu ("help:"); greenbar.add (filemenu1); greenbar.add (filemenu2); greenbar.add (jmishowinfo = filemenu3); filemenu1.setfont (новый шрифт (font.dialog_input, font.italic, 16)); filemenu2.setfont (новый шрифт (font.dialog_input, font.italic, 16)); filemenu3.setfont (новый шрифт (font.dialog_input, font.italic, 16)); // пункт меню filemenu1.add (jminew = new jmenuitem ("новая игра")); filemenu1.add (jmisave = new jmenuitem ("рейтинговая версия")); filemenu1.add (jmiziding = new jmenuitem ("custom")); filemenu1.addseparator (); filemenu1.add (jmiexit = new jmenuitem ("exit")); filemenu2.add (jmichuji = new jmenuitem ("Junior")); filemenu2.add (jmizhongji = new jmenuitem ("промежуточный")); filemenu2.add (jmigaoji = new jmenuitem ("Advanced")); filemenu3.add (jmishowinfo = new jmenuitem ("Информация о разработчике")); Jminew.addactionListener (это); Jmiexit.addactionListener (это); Jmisave.addactionListener (это); Jmisave.addactionListener (это); Jmishowinfo.addactionListener (это); Jmichuji.addactionListener (это); Jmizhongji.addactionListener (это); Jmigaoji.addactionListener (это); Jmiziding.addactionListener (это); Jmiziding.setfont (новый шрифт (font.dialog_input, font.italic, 16)); Jmishowinfo.setfont (новый шрифт (font.dialog_input, font.italic, 16)); Jminew.setfont (новый шрифт (font.dialog_input, font.italic, 16)); Jmisave.setfont (новый шрифт (font.dialog_input, font.italic, 16)); Jmiexit.setfont (новый шрифт (font.dialog_input, font.italic, 16)); Jmichuji.setfont (новый шрифт (font.dialog_input, font.italic, 16)); Jmizhongji.setfont (новый шрифт (font.dialog_input, font.italic, 16)); Jmizhongji.setfont (новый шрифт (font.dialog_input, font.italic, 16)); Jmigaoji.setfont (новый шрифт (font.dialog_input, font.italic, 16)); SetJmenubar (Greenbar); Image icon = toolkit.getDefaulttoolkit (). Getimage ("g: //eclipse-workspace//classtest_thundergame//mine.png"); seticonimage (значок); setlayout (new Gridlayout (Snum, Snum)); jb = new jbutton [snum] [snum]; map = new int [snum] [snum]; // Карта кнопок в флаги массива = new Boolean [map.length] [map [0] .length]; // Сохранить таблицу записей = new Boolean [map.length] [map [0] .length]; // Сохранить таблицу записей int count = 0; // bleigh while (count <num) {int i = (int) (math.random () * map.length); // vang int j = (int) (math.random () * map [0] .length); // ложь if (i] [j]! = ' *') {Map [i] [j] = ' *'; count ++; }} for (int i = 0; i <snum; i ++) {for (int j = 0; j <snum; j ++) {jb [i] [j] = new jbutton (); jb [i] [j] .setname (i + "_" + j); jb [i] [j] .setbackground (новый цвет (220, 220, 220)); jb [i] [j] .setfont (новый шрифт (font.dialog_input, font.italic, 10)); jb [i] [j] .addactionListener (это); jb [i] [j] .AddMouseListener (это); // добавление мышиного слушателя добавить (jb [i] [j]); }} // таймер jlabel ststus = new jlabel (); Jlabel Times = new jlabel (); Jlabel miao = new jlabel (); добавить (ststus); добавить (время); Times.settext ("0"); miao.settext ("секунды"); SetTimer (Times); couttime = 0; ststus.settext («время:»); greenbar.add (ststus); greenbar.add (times, right_alenment); greenbar.add (miao, right_alenment); Times.setfont (новый шрифт (font.dialog_input, font.italic, 16)); ststus.setfont (новый шрифт (font.dialog_input, font.italic, 16)); miao.setfont (новый шрифт (font.dialog_input, font.italic, 16)); setSize (700, 700); setlocationRelativeTo (null); setVisible (true); // setDefaultCloseoPeration (jframe.exit_on_close); setDefaultCloseoPeration (dispose_on_close); // Добавить эту строку} private void setTimer (jlabel time) {// время прослушивания окончательного jlabel vartime = time; Timer TimeAction = новый таймер (1000, новый ActionListener () {public void ActionPerformed (actionEvent e) {couttime ++; vartime.settext (""+couttime);}}); TimeAction.Start (); } private void showtheclick (int x, int y) {// Нажмите реализацию события if (map [x] [y] == '*') {jb [x] [y] .seticon (icon); showmines (); } else {int count1 = 0; for (int a = x - 1; a <= x+1; a ++) {for (int b = y - 1; b <= y+1; b ++) {if (! (a <0 || b <0 || b> = map [0] .length || a> = map.length) && map [a] [b] == ') count1 ++; }} флаги [x] [y] = true; if (count1 == 0) {jb [x] [y] .setbackground (color.white); } else {jb [x] [y] .settext (count1 + ""); jb [x] [y] .setfont (новый шрифт (font.dialog_input, font.italic, 20)); jb [x] [y] .setbackground (color.white); } if (count1 == 0) {for (int i = x - 1; i <= x+1; i ++) {for (int j = y - 1; j <= y+1; j ++) {if (! (i <0 || j <0 || i> = map.length || j> = map [0]. == false) {showtheclick (i, j); // цикл Traversal} else {// Предотвратить повторный доступ}}}}}}}}} private void showmines () {// показывать все Thunders // todo Auto-Generated STUB для (int i = 0; I <map.length; <map.length; //}}} // Окончить игру int b = joptionpane.showoptiondialog (null, «О, она взорвалась, новая игра?», «Подтверждение ящика», joptionpane.yes_no_option, joptionpane.question_message, null, null, null); if (b == 1) {System.Exit (0); } else {setVisible (false); новый Main (map.length, num); }} @Override public void actionPerformed (actionEvent e) {// Слушание событий обработка // TODO Автогенерированный метод stub if if (e.getSource () == jminew) {setVisible (false); новый Main (map.length, num); } else if (e.getSource () == jmisave) {showrange (); } else if (e.getSource () == jmiexit) {System.Exit (0); } else if (e.getSource () == jmiziding) {new Selfmines (); } else if (e.getSource () == jmichuji) {setVisible (false); новый основной (5,3); } else if (e.getSource () == jmishowinfo) {new myInfo (); } else if (e.getSource () == jmizhongji) {setVisible (false); новый основной (10,10); } else if (e.getSource () == jmigaoji) {setVisible (false); новый основной (20,60); } else {Object obj = e.getSource (); int x, y; String [] strm = ((jbutton) obj) .getName (). Split ("_"); x = integer.parseint (strm [0]); y = integer.parseint (strm [1]); Showtheclick (x, y); CheckSuccess (); // Проверьте, превышается ли игра}} private void showrange () {// Показать рейтинг New Shiyan13 (map.length); } private void checkSuccess () {// определить, превышает ли игра // TODO автоматическое сгенерированное метод stub int count = map.length * map [0] .length; for (int i = 0; i <map.length; i ++) {for (int j = 0; j <map [0] .length; j ++) {if (flags [i] [j] == true) count--; }} if (count == num) {string uuid = uuid.randomuuid (). con = (connection) drivermanager.getConnection (URL, пользователь, пароль); String SQL; if (! con.isclosed ()) {// ta.settext (""); System.out.println ("Подключение базы данных успешно"); // Создать оператор оператора объекта = (оператор) con.createStatement (); // if (map.length == 10) {// // sql оператор для выполнения для выполнения sql = "вставьте в Middlerange (userid, usertime) values (/" " + uuid +"/"," + couttime + ");"; atportion.executeupdate (sql); con.close (); } else if (map.length == 5) {sql = "Вставка в rang (userid, usertime) значения (/" " + uuid +"/"," + couttime + ");"; atportion.executeupdate (sql); con.close (); } else if (map.length == 20) {sql = "Вставка в Toprange (userId, usertime) значения (/" " + uuid +"/"," + couttime + ");"; atportion.executeupdate (sql); con.close (); } else {}} catch (classnotfoundexception e) {// Система обработки исключений в классе базы данных. e.printstacktrace (); } catch (sqlexception e) {// System.out.println (e); System.err.println («Данные не найдены»); // int i = joptionpane.showconfirmdialog (null, «введенный вами оператор SQL неверен», // «не найден», JoptionPane.yes_no_option); } catch (Exception e) {e.printstackTrace (); } наконец {System.out.println ("База данных успешно получает данные!"); } int i = joptionpane.showoptiondialog (null, «Поздравляю с прохождением теста, вы продолжаете?», «Подтверждение ящика», Joptionpane.yes_no_option, joptionpane.question_message, null, null, null); // ststus.settext ("hello"+i); if (i == 1) {System.Exit (0); } else {setVisible (false); новый Main (map.length, num); }}} @Override public void mouseclicked (mouseevent e) {// todo автоматически сгенерированный метод stub int c = e.getbutton (); if (c == mouseevent.button3) {Object obj1 = e.getSource (); int x, y; String [] strm = ((jbutton) obj1) .getName (). Split ("_"); x = integer.parseint (strm [0]); y = integer.parseint (strm [1]); if (flag [x] [y] == false && flags [x] [y] == false) {// вставить флаг jb [x] [y] .seticon (icon1); флаг [x] [y] = true; } else {jb [x] [y] .seticon (null); флаг [x] [y] = false; }}} @Override public void mousepressed (mouseevent e) {// todo с генерируемым автоматическим методом} @override public void mouseentered (mouseevent e) {// todo Auto-генерированный метод atub at @override public void mouseexited (mouseevent e) {// todo aut-aet-webener atuber a aut-gene-gene-gene-gene-gene-gene-gene-gene-gene-gene-gene-gene-gene-gene-gene-gene-gene-gene-gen3. осознайте эффект
4. Реализация основных функций
(1) Основная функция подключения шахты (случайная сжигание шахты, вставка флага)
(2) Вы можете выбрать сложности (3) Вы можете настроить количество шахт, и количество сетей (4) Установить время (5) Добавить функцию ранжирования (хранить ее в базе данных в соответствии со временем)
(6) Упаковка его в файл EXE (с JRE) может быть запущен на нескольких платформах. (Используйте EXE4J, чтобы упаковать пакет JAR)
Если вам нужен исходный код, вы можете оставить электронное письмо! Это исходный код: шахтная игра
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.