Swing's Mine Sweeping Experience ist Ihre Referenz. Der spezifische Inhalt ist wie folgt
Vor kurzem habe ich nach dem Studium von Swing: Mines Tweeping ein kleines Spiel gemacht
1. Vorläufiger Design
2. Implementierung
In der Tat liegt der Kern des Abschlusses dieses Spiels in der Manipulation des Arrays. Der folgende Hauptcode ist main.java:
Paket zuerst; importieren java.awt.color; import Java.awt.Dimension; Import Java.awt.font; Import Java.awt.GridLayout; Import Java.awt.image; java.awt.event.actionListener; import Java.awt.event.mouseeEvent; Import Java.awt.event.mouselistener; Import Java.io.bufferedReader; Import Java.io.ioTheStheam.inputStrownputStrown; java.net.serversocket; import java.net.socket; import Java.sql.drivermanager; Import Java.sql.sqlexception; import Java.util.hashset; Import Java.util.set; javax.swing.jframe; import Javax.swing.jlabel; import Javax.swing.jmenu; Import Javax.swing.jmenubar; Import Javax.swing.jMenuitem; Import Javax.swing.joptionPane; com.mysql.jdbc.statement; öffentliche Klasse Main erweitert JFrame implementiert ActionListener, Mouselistener { / *** yijian* / private statische endgültige long serialversionuid = 1l; // frühe Parameterdeklaration JMenuitem JMinew, Jmisave, Jmiopen, Jmiexit, Jmichuji, Jmizhongji, JMigaoji, Jmishowinfo, JMIZIDIG; Toolkit Toolkit = Toolkit.getDefaulttoolkit (); // Erhalten Sie das Standard -Toolkit. Clipboard Clipboard = Toolkit.getSystemClipboard (); // Erhalten Sie eine Instanz des Systems kalibrieren // als Schnittstelle zum von der native Plattform bereitgestellten Zwischenablage -Tool. // Zwei Symbole imageicon icon = new ImageCon ("g: //eclipse-workspace//classtest_thundergame//mine.png"); ImageCon icon1 = new ImageCon ("g: //eclipse-workspace//classtest_thundergame//flag.png"); Private statische int num = 1; // Diese Num ist eine donnernde Nummer. Sie können ein Programm schreiben // private statische endgültige int snum = 9; // Dieser Snum ist die Fliesenzahl von Minesweeping. private int [] [] Karte; boolean [] [] Flaggen; boolean [] [] Flag; int Couttime; // die Verbindungsobjektverbindungs -Con; // Treibername String treiber = "com.mysql.jdbc.driver"; // URL: Zeigen Sie auf den Datenbanknamen, auf den auf String -url = "JDBC: MySQL: // localhost: 3306/testsql3" zugegriffen werden soll. // Mysql konfigurierte Benutzer string user = "root"; // Passwort string password = "huang"; public main (int snum, int mines) {// Hauptschnittstellenkonstruktor-Setitle ("Mine-Sweeping"); // Anfangszahl von Donner num = Minen; JMenubar Greenbar = new JMenubar (); // Menü Container Greenbar.Setopaque (true); Greenbar.Setbackground (neue Farbe (250, 250, 250)); greenbar.setPreferredsize (neue Dimension (800, 28)); greenbar.setfont (neue Schriftart (font.dialog_input, font.italic, 16)); // Menü jMenu fileMenu1 = new Jmenu ("game"); JMenu fileMenu2 = neuer Jmenu ("Schwierigkeitsgrad"); JMenu filemenu3 = neuer JMenu ("Hilfe:"); greenbar.add (fileMenu1); greenbar.add (fileMenu2); greenbar.add (jmishowinfo = fileMenu3); fileMenu1.setfont (neue Schriftart (font.dialog_input, font.italic, 16)); fileMenu2.setfont (neue Schriftart (font.dialog_input, font.italic, 16)); fileMenu3.setfont (neue Schriftart (font.dialog_input, font.italic, 16)); // Menüpunkt fileMenu1.add (jMinew = new JMenuitem ("neues Spiel")); fileMenu1.add (jmisave = new JMenuitem ("Ranking -Version")); fileMenu1.add (JMIZIDING = New JMenuitem ("Custom")); fileMenu1.addSesparator (); fileMenu1.add (jmiexit = new JMenuitem ("exit")); fileMenu2.add (jmichuji = new JMenuitem ("Junior")); fileMenu2.add (jmizhongji = new JMenuitem ("intermediate")); fileMenu2.add (JMigaoji = new JMenuitem ("Advanced")); fileMenu3.Add (Jmishowinfo = new JMenuitem ("Entwicklerinformationen")); JMinew.addactionListener (this); Jmiexit.AddactionListener (this); JMisave.AddactionListener (this); JMisave.AddactionListener (this); Jmishowinfo.AddactionListener (this); Jmichuji.AddactionListener (this); Jmizhongji.AddactionListener (this); JMigaoji.AddactionListener (this); JMIZIDIDING.AddActionListener (this); JMIZIDING.SETFONT (neue Schriftart (font.dialog_input, font.italic, 16)); Jmishowinfo.setfont (neue Schriftart (font.dialog_input, font.italic, 16)); JMinew.setfont (neue Schriftart (font.dialog_input, font.italic, 16)); Jmisave.setfont (neue Schriftart (font.dialog_input, font.italic, 16)); Jmiexit.setfont (neue Schriftart (font.dialog_input, font.italic, 16)); Jmichuji.setfont (neue Schriftart (font.dialog_input, font.italic, 16)); JMIZHONGJI.SETFONT (neue Schriftart (font.dialog_input, font.italic, 16)); JMIZHONGJI.SETFONT (neue Schriftart (font.dialog_input, font.italic, 16)); JMIGAOJI.SETFONT (neue Schriftart (font.dialog_input, font.italic, 16)); setJMenubar (Greenbar); Bild icon = toolkit.getDefaulttoolkit (). GetImage ("g: //eclipse-workspace//classtest_thundergame//mine.png"); seticonimage (icon); setLayout (neuer GridLayout (snum, snum)); JB = New Jbutton [Snum] [Snum]; map = new int [snum] [snum]; // Die Schaltflächen in ein Array -Flags maps = new boolean [map.length] [MAP [0] .Length]; // Speichern Sie das Datensatztabellen -Flag = new boolean [map.length] [MAP [0] .Length]; // Speichern Sie die Datensatztabelle int count = 0; // BLEIGH while (count <num) {int i = (int) (math.random () * map.Length); // hang int j = (int) (math.random () * map [0] .length); // lüge if (map [i] [j]! = ' *') {Map [i] [j] = ' *'; zählen ++; }} für (int i = 0; i <snum; i ++) {für (int j = 0; j <snum; j ++) {jb [i] [j] = new Jbutton (); JB [i] [j] .setName (i + "_" + J); JB [i] [J] .Setbackground (neue Farbe (220, 220, 220)); JB [i] [j] .setfont (neue Schriftart (font.dialog_input, font.italic, 10)); JB [i] [j] .AddactionListener (this); JB [i] [j] .addmouselistener (this); // Maushörer hinzufügen (jb [i] [j]); }} // Timer jLabel stStus = new JLabel (); JLabel Times = new JLabel (); Jlabel Miao = new Jlabel (); add (ststus); add (mal); Times.setText ("0"); miao.setText ("Sekunden"); SetTimer (Zeiten); Couttime = 0; Ststus.setText ("Zeit:"); greenbar.add (Ststus); greenbar.add (mal, right_alignment); greenbar.add (miao, right_alignment); Times.setFont (neue Schriftart (font.dialog_input, font.italic, 16)); stStus.setfont (neue Schriftart (font.dialog_input, font.italic, 16)); miao.setfont (neue Schriftart (font.dialog_input, font.italic, 16)); SetSize (700, 700); setLocationRelativeto (null); setvisible (wahr); // setDefaultCloseOperation (jframe.exit_on_close); setDefaultCloseOperation (dispose_on_close); // diese Zeile hinzufügen} private void setTimer (jLabel time) {// Zeithören endgültig jLabel vartime = time; Timer timeAction = New Timer (1000, New ActionListener () {public void actionPerformed (actionEvent e) {CoutTime ++; vartime.setText (""+couttime);}}); timeaction.start (); } private void showTheClick (int x, int y) {// klicken Sie auf Ereignisimplementierung if (map [x] [y] == '*') {jb [x] [y] .seticon (icon); showMines (); } else {int count1 = 0; für (int a = x - 1; a <= x+1; a ++) {für (int b = y - 1; b <= y+1; b ++) {if (! (a <0 || b <0 || b> = map [0] .Length || a> = map.Length) && map [a] [b] == '*') count1 ++; }} Flags [x] [y] = true; if (count1 == 0) {jb [x] [y] .setbackground (color.white); } else {jb [x] [y] .setText (count1 + ""); JB [x] [y] .setfont (neue Schriftart (font.dialog_input, font.italic, 20)); JB [x] [y] .Setbackground (color.white); } if (count1 == 0) {für (int i = x - 1; i <= x+1; i ++) {für (int j = y - 1; j <= y+1; j ++) {if (! (i <0 || j <0 || i> = map.length || j> map [0]. == false) {showTheClick (i, j); // Loop TraverSal} else {// wiederholten Zugriff}}}}}}}} private void showmine () {// All-Thunder // todo automatisch generierte Methode Stub (int i = 0; i <map.Legth; j <map.length; //}}} // beenden Sie das Spiel int b = joptionpane.showoptionDialog (null, "Oh, es explodiert, neues Spiel?", "Bestätigung Box", joptionpane.yes_no_option, joptionpane.question_message, null, null, null, null, null); if (b == 1) {System.exit (0); } else {setVisible (false); New Main (Map.length, num); }} @Override public void actionPerformed (actionEvent e) {// Ereignishörerverarbeitung // Todo automatisch generierte Methode Stub if (e.getSource () == jMinew) {setvisible (false); New 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); Neues Haupt (5,3); } else if (e.getSource () == jmishowinfo) {new myInfo (); } else if (e.getSource () == JMIZHONGJI) {setVisible (false); Neues Haupt (10,10); } else if (e.getSource () == JMigaoji) {setVisible (false); Neues Haupt (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); checksuSccess (); // Überprüfen Sie, ob das Spiel über}} private void showrange () {// Rangliste neu Shiyan13 (MAP.Length); } private void ChecksuSccess () {// Bestimmen Sie, ob das Spiel über // mit automatisch generierter Methode Stub int count = map.Length * map [0] .Length; für (int i = 0; i <map.length; i ++) {für (int j = 0; j <map [0] .Length; j ++) {if (Flags [i] [j] == true) count--; }} if (count == num) {string uUid = uUid.randomuUId (). toString (). ersetzeAll ("-", ""); // Die Tabelle zeigt eindeutig UUID // Link zur Datenbank- und Store-Zeitdaten-Versuche {class.Forname (Treiber) an. con = (Verbindungs) TriverManager.getConnection (URL, Benutzer, Passwort); String SQL; if (! con.isclosed ()) {// ta.setText (""); System.out.println ("Datenbank erfolgreich verbinden"); // Objektanweisung erstellen Anweisung = (Anweisung) createstatement (); // if (map.length == 10) {// // sql Anweisung, um sql = "in Middlerange (userID, Usertime) Werte (/" + uUid + "/", " + couttime +") zu ausgeführt werden. Anweisung.ExecuteUpDate (SQL); con.close (); } else if (map.length == 5) {sql = "In Rang (userID, Usertime) Werte (/" " + uUid +"/"," + couttime + ");"; Anweisung.ExecuteUpDate (SQL); con.close (); } else if (map.length == 20) {sql = "In TopRange (userID, Usertime) Werte (/" " + uUid +"/"," + couttime + ");"; Anweisung.ExecuteUpDate (SQL); con.close (); } else {}} catch (classNotFoundException e) {// Datenbank -Treiberklasse -Ausnahme -Handling -System.out.println ("Fehler"); E. printstacktrace (); } catch (sqlexception e) {// system.out.println (e); System.err.println ("Daten nicht gefunden"); // int i = joptionpane.showConfirirmdialog (null, "Die von Ihnen eingegebene SQL -Anweisung ist falsch", // "nicht gefunden", joptionpane.yes_no_option); } catch (Ausnahme e) {e.printstacktrace (); } endlich {System.out.println ("Datenbank erhält Daten erfolgreich!"); } int i = joptionpane.showoptionDialog (NULL, "Herzlichen Glückwunsch zum Test, fahren Sie fort?", "Bestätigung Box", joptionpane.yes_no_option, joptionpane.question_message, null, null, null); // Ststus.setText ("Hallo"+i); if (i == 1) {System.exit (0); } else {setVisible (false); New Main (Map.length, num); }}} @Override public void mouseclicked (MouseEvent e) {// Todo automatisch generierte Methode Stub int c = e.getButton (); if (c == mouseEvent.button3) {Objekt 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) {// fügen Sie das Flag jb [x] [y] .seticon (icon1) ein; Flag [x] [y] = true; } else {jb [x] [y] .seticon (null); Flag [x] [y] = false; } } } @Override public void mousePressed(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 Auto-generated method stub }}3.. Erkennen Sie den Effekt
4. Implementierung der Hauptfunktionen
(1) Basis-Mine-Sweeping-Funktion (zufällige Minenverbrennung, Flag-Insertion)
(2) Sie können Schwierigkeitsgrad (3) auswählen. Sie können die Anzahl der Sweeping -Minen und die Anzahl der Gitter (4) Zeit anpassen (5) Ranking -Funktion hinzufügen (Speichern Sie sie in der Datenbank gemäß der Zeit).
(6) Verpackung in eine EXE -Datei (mit JRE) kann auf mehreren Plattformen ausgeführt werden. (Verwenden Sie EXE4J, um das JAR -Paket zu verpacken)
Wenn Sie Quellcode benötigen, können Sie eine E -Mail hinterlassen! Dies ist der Quellcode: Minen-Sweeping-Spiel
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.