ประสบการณ์การกวาดล้างของ Swing นั้นมีไว้สำหรับการอ้างอิงของคุณ เนื้อหาเฉพาะมีดังนี้
เมื่อเร็ว ๆ นี้ฉันสร้างเกมเล็ก ๆ หลังจากเรียนสวิง: การกวาดทุ่นระเบิด
1. การออกแบบเบื้องต้น
2. การดำเนินการ
ในความเป็นจริงหลักของการทำเกมนี้ให้สำเร็จในการจัดการอาร์เรย์ รหัสหลักด้านล่างคือ main.java:
แพ็คเกจแรก; นำเข้า java.awt.color; นำเข้า java.awt.dimension; นำเข้า java.awt.font; นำเข้า java.awt.gridlayout; นำเข้า java.awt.image; นำเข้า java.awt.toolkit; java.awt.event.actionListener; นำเข้า java.awt.event.mousevent; นำเข้า java.awt.event.mouselistener; นำเข้า java.io.bufferedreader; นำเข้า java.io.bufferedWriter; นำเข้า Java.io.ioException; java.net.serversocket; นำเข้า java.net.socket; นำเข้า java.sql.drivermanager; นำเข้า java.sql.sqlexception; นำเข้า java.util.hashset; นำเข้า Java.util.set; นำเข้า Java.util.uuid; javax.swing.jframe; นำเข้า Javax.swing.jlabel; นำเข้า Javax.swing.jmenu; นำเข้า Javax.swing.jmenubar; นำเข้า Javax.swing.jmenuitem; นำเข้า Javax.swing.joptionpane; com.mysql.jdbc.statement; คลาสสาธารณะ Main ขยาย JFrame ใช้ ActionListener, Mouselistener { / *** yijian* / ส่วนตัวคงที่สุดท้าย Long SerialVersionUid = 1l; // การประกาศพารามิเตอร์ต้น Jmenuitem Jminew, Jmisave, Jmiopen, Jmiexit, Jmichuji, Jmizhongji, Jmigaoji, Jmishowinfo, Jmiziding; Toolkit Toolkit = Toolkit.getDefaultToolkit (); // รับชุดเครื่องมือเริ่มต้น Clipboard Clipboard = Toolkit.getSystemClipboard (); // รับอินสแตนซ์ของระบบปรับเทียบ // เป็นส่วนต่อประสานกับเครื่องมือคลิปบอร์ดที่จัดทำโดยแพลตฟอร์มดั้งเดิม // ไอคอนสองไอคอนไอคอน Imageicon = ใหม่ ImageIcon ("g: //eclipse-workspace//classtest_thundergame//mine.png"); Imageicon icon1 = ใหม่ imageicon ("g: //eclipse-workspace//classtest_thundergame//flag.png"); ส่วนตัวคงที่ int num = 1; // num นี้เป็นหมายเลขฟ้าร้องคุณสามารถเขียนโปรแกรมเพื่อเปลี่ยน // private static int snum สุดท้าย = 9; // snum นี้เป็นจำนวนกระเบื้องของการกวาดทุ่นระเบิดคุณสามารถเขียนโปรแกรมเพื่อเปลี่ยน jbutton ส่วนตัว [] [] jb; private int [] [] แผนที่; บูลีน [] [] ธง; บูลีน [] [] ธง; int couttime; // ประกาศการเชื่อมต่อการเชื่อมต่อการเชื่อมต่อ con; // ชื่อไดรเวอร์สตริงไดรเวอร์ = "com.mysql.jdbc.driver"; // url: ชี้ไปที่ชื่อฐานข้อมูลที่จะเข้าถึง string url = "jdbc: mysql: // localhost: 3306/testsql3"; // MySQL ที่กำหนดค่าสตริงผู้ใช้ user = "root"; // รหัสผ่านสตริงรหัสผ่าน = "Huang"; สาธารณะหลัก (Int Snum, Int Mines) {// Main Interface Constructor Settitle ("การกวาดเหมือง"); // จำนวนครั้งแรกของ Thunder Num = Mines; JMENUBAR GREENBAR = ใหม่ JMENUBAR (); // เมนูคอนเทนเนอร์ GREENBAR.SETOPAQUE (จริง); Greenbar.setBackground (สีใหม่ (250, 250, 250)); Greenbar.setPreferredSize (มิติใหม่ (800, 28)); Greenbar.SetFont (FONT ใหม่ (FONT.DIALOG_INPUT, FONT.ITALIC, 16)); // เมนู jmenu filemenu1 = new jmenu ("game"); JMENU fileMenU2 = new JMENU ("ความยาก"); JMENU fileMenU3 = ใหม่ JMENU ("ความช่วยเหลือ:"); 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 = ใหม่ jmenuitem ("เกมใหม่")); filemenu1.add (jmisave = new jmenuitem ("เวอร์ชันการจัดอันดับ")); filemenu1.add (jmiziding = new jmenuitem ("custom")); filemenu1.addsperator (); filemenu1.add (jmiexit = new jmenuitem ("ออก")); filemenu2.add (jmichuji = jmenuitem ใหม่ ("junior")); filemenu2.add (jmizhongji = ใหม่ jmenuitem ("intermediate")); filemenu2.add (jmigaoji = ใหม่ jmenuitem ("ขั้นสูง")); 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 ใหม่ (FONT.DIALOG_INPUT, FONT.ITLIC, 16)); jmisave.setfont (ตัวอักษรใหม่ (font.dialog_input, font.italic, 16)); jmiexit.setFont (ฟอนต์ใหม่ (font.dialog_input, font.italic, 16)); JMICHUJI.SETFONT (FONT ใหม่ (FONT.DIALOG_INPUT, FONT.ILTIC, 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 (ใหม่ gridlayout (snum, snum)); jb = new jbutton [snum] [snum]; MAP = ใหม่ int [snum] [snum]; // แมปปุ่มลงในธงอาร์เรย์ = บูลีนใหม่ [map.length] [แผนที่ [0] .length]; // บันทึกบันทึกตารางบันทึก = บูลีนใหม่ [map.length] [แผนที่ [0] .length]; // บันทึกตารางบันทึก int = 0; // bleigh ในขณะที่ (นับ <num) {int i = (int) (math.random () * map.length); // แขวน int j = (int) (math.random () * แผนที่ [0] .length); // โกหกถ้า (แผนที่ [i] [j]! = ' *') นับ ++; }} สำหรับ (int i = 0; i <snum; i ++) {สำหรับ (int j = 0; j <snum; j ++) {jb [i] [j] = ใหม่ 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 ("วินาที"); ผู้ตั้งถิ่นฐาน (เวลา); couttime = 0; ststus.settext ("เวลา:"); Greenbar.add (Ststus); greenbar.add (เวลา, right_alignment); Greenbar.add (Miao, Right_alignment); 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 (จริง); // setDefaultCloseOperation (jframe.exit_on_close); SetDefaultCloseoperation (dispose_on_close); // เพิ่มบรรทัดนี้} โมฆะส่วนตัว settimer (เวลา JLabel) {// เวลาฟังสุดท้าย JLabel vartime = เวลา; Timer TimeAction = ตัวจับเวลาใหม่ (1,000, ActionListener ใหม่ () {โมฆะสาธารณะ ActionPerformed (ActionEvent E) {couttime ++; vartime.settext (""+couttime);}}); timeaction.start (); } โมฆะส่วนตัว showtheclick (int x, int y) {// คลิกการใช้งานเหตุการณ์ถ้า (แผนที่ [x] [y] == '*') {jb [x] [y] .seticon (ไอคอน); showmines (); } else {int count1 = 0; สำหรับ (int a = x - 1; a <= x+1; a ++) {สำหรับ (int b = y - 1; b <= y+1; b ++) {ถ้า (! (a <0 || b <0 || b> = แผนที่ [0] .length || a> = map.length) && }} ธง [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) {สำหรับ (int i = x - 1; i <= x+1; i ++) {สำหรับ (int j = y - 1; j <= y+1; j ++) {ถ้า (! == FALSE) {showtheClick (i, j); // loop traversal} else {// ป้องกันการเข้าถึงซ้ำ}}}}}}}}}} void private void showmines () {// แสดง thunders ทั้งหมด // map.length; j ++) {ถ้า (แผนที่ [i] [j] == '*') {jb [i] [j] //}}} // จบเกม int b = joptionpane.showoptiondialog (null, "โอ้มันระเบิด, เกมใหม่?", "ยืนยันกล่อง", joptionpane.yes_no_option, joptionpane.question_message, null, null); if (b == 1) {system.exit (0); } else {setVisible (เท็จ); ใหม่หลัก (map.length, num); }} @Override โมฆะสาธารณะ ActionPerformed (ActionEvent E) {// การประมวลผลการฟังเหตุการณ์ // วิธีการที่สร้างขึ้นอัตโนมัติ todo stub stub ถ้า (e.getSource () == JMINEW) {setVisible (เท็จ); ใหม่หลัก (map.length, num); } อื่นถ้า (e.getSource () == jmisave) {showRange (); } อื่นถ้า (e.getSource () == jmiexit) {system.exit (0); } อื่นถ้า (e.getSource () == jmiziding) {ใหม่ selfmines (); } อื่นถ้า (e.getSource () == jmichuji) {setVisible (เท็จ); ใหม่หลัก (5,3); } อื่นถ้า (e.getSource () == jmishoWinfo) {ใหม่ myInfo (); } อื่นถ้า (e.getSource () == jmizhongji) {setVisible (เท็จ); ใหม่หลัก (10,10); } อื่นถ้า (e.getSource () == jmigaoji) {setVisible (เท็จ); ใหม่หลัก (20,60); } else {object obj = e.getSource (); int x, y; สตริง [] strm = ((jbutton) obj) .getName (). แยก ("_"); x = integer.parseint (strm [0]); y = integer.parseint (strm [1]); Showtheclick (X, Y); checksuccess (); // ตรวจสอบว่าเกมนั้นจบลง}} void private void showrange () {// แสดงการจัดอันดับใหม่ shiyan13 (map.length); } โมฆะส่วนตัว checksuccess () {// พิจารณาว่าเกมนั้นเกิน // วิธีการที่สร้างอัตโนมัติแบบอัตโนมัติ Stub int count = map.length * แผนที่ [0] .length; สำหรับ (int i = 0; i <map.length; i ++) {สำหรับ (int j = 0; j <แผนที่ [0] .length; j ++) {ถ้า (ธง [i] [j] == true) นับ-; }} if (count == num) {string uuid = uuid.randomuuid (). toString (). replaceall ("-", ""); con = (การเชื่อมต่อ) driverManager.getConnection (URL, ผู้ใช้, รหัสผ่าน); สตริง SQL; if (! con.isclosed ()) {// ta.settext (""); System.out.println ("การเชื่อมต่อฐานข้อมูลสำเร็จ"); // สร้างคำสั่ง OBJECT คำสั่ง = (คำสั่ง) Con.Createstatement (); // if (map.length == 10) {// // คำสั่ง SQL ที่จะดำเนินการ sql = "แทรกลงใน middlerange (userId, usertime) ค่า (/" " + uuid +"/"," + couttime + ");"; คำสั่ง ExecuteUpdate (SQL); con.close (); } อื่นถ้า (map.length == 5) {sql = "แทรกลงใน rang (userId, usertime) ค่า (/" " + uuid +"/"," + couttime + ");"; คำสั่ง ExecuteUpdate (SQL); con.close (); } อื่นถ้า (map.length == 20) {sql = "แทรกลงใน toprange (userId, usertime) ค่า (/" " + uuid +"/"," + couttime + ");"; คำสั่ง ExecuteUpdate (SQL); con.close (); } else {}} catch (classnotFoundException e) {// ฐานข้อมูลไดรเวอร์คลาสการจัดการข้อยกเว้น System.out.println ("ข้อผิดพลาด"); 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 ("สวัสดี"+i); if (i == 1) {system.exit (0); } else {setVisible (เท็จ); ใหม่หลัก (map.length, num); }}} @Override โมฆะสาธารณะ mouseclicked (MouseEvent E) {// วิธีการที่สร้างอัตโนมัติแบบอัตโนมัติ Stub int c = e.getButton (); if (c == MouseEvent.Button3) {Object OBJ1 = E.getSource (); int x, y; สตริง [] strm = ((jbutton) obj1) .getName (). แยก ("_"); 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); Flag [x] [y] = false; }}} @Override โมฆะสาธารณะ mousepressed (MouseEvent e) {// วิธีการที่สร้างอัตโนมัติ stub} @Override โมฆะสาธารณะ mouseentered (MouseEvent E) {// วิธีการที่ถูกสร้างอัตโนมัติ3. ตระหนักถึงผลกระทบ
4. การใช้งานฟังก์ชั่นหลัก
(1) ฟังก์ชั่นการกวาดทุ่นระเบิดขั้นพื้นฐาน (การเผาสุ่มระเบิด, การแทรกธง)
(2) คุณสามารถเลือกความยาก (3) คุณสามารถปรับแต่งจำนวนการกวาดเหมืองและจำนวนกริด (4) เวลาตั้งค่า (5) เพิ่มฟังก์ชั่นการจัดอันดับ (จัดเก็บในฐานข้อมูลตามเวลา)
(6) บรรจุภัณฑ์ลงในไฟล์ exe (พร้อม JRE) สามารถเรียกใช้ในหลายแพลตฟอร์ม (ใช้ exe4j เพื่อบรรจุแพ็คเกจ JAR)
หากคุณต้องการซอร์สโค้ดคุณสามารถฝากอีเมลไว้! นี่คือซอร์สโค้ด: เกมกวาดทุ่นระเบิด
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น