تجربة Swing's Mine-Geating هي للرجوع إليها. المحتوى المحدد كما يلي
في الآونة الأخيرة ، صنعت لعبة صغيرة بعد دراسة Swing: Minesweeping
1. التصميم الأولي
2. التنفيذ
في الواقع ، يكمن جوهر إكمال هذه اللعبة في معالجة الصفيف. الرمز الرئيسي أدناه هو Main.java:
حزمة أولاً ؛ استيراد java.awt.color ؛ استيراد java.awt.dimension ؛ استيراد java.awt.font ؛ استيراد java.awt.gridlayout ؛ استيراد java.awt.image ؛ استيراد java.awt.awt.toolkit ؛ استيراد java.awt.datatransfrant.clipboard ؛ java.awt.event.actionlistener ؛ استيراد java.awt.event.mouseevent ؛ استيراد java.awt.event.mouselistener java.net.serversocket ؛ استيراد java.net.socket ؛ استيراد java.sql.drivermanager ؛ استيراد java.sql.sqlexception ؛ استيراد java.util.hashset ؛ import java.util.set ؛ import java.util.UtiD ؛ javax.swing.jframe ؛ استيراد javax.swing.jlabel ؛ استيراد javax.swing.jmenu ؛ استيراد javax.swing.jmenubar ؛ استيراد javax.swing.jmenuitem ؛ استيراد javax.swing.joptionpane 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 () ؛ // احصل على مجموعة الأدوات الافتراضية. الحافظة الحافظة (mailboard = toolkit.getsystemclipboard () ؛ // احصل على مثيل للنظام معايرة // كواجهة لأداة الحافظة التي توفرها النظام الأساسي الأصلي. // اثنين من الرموز imageicon icon = new imageicon ("g: //eclipse-workspace//classtest_thundergame//mine.png") ؛ ICONICON icon1 = new imageicon ("g: //eclipse-workspace//classtest_thundergame//flag.png") ؛ int int int static private = 1 ؛ // هذا الرقم هو رقم رعد ، يمكنك كتابة برنامج لتغيير // int snum int int static private = 9 ؛ // هذا snum هو عدد البلاط من الكربون المناجم ، يمكنك كتابة برنامج لتغيير jbutton الخاص [] [] JB ؛ خريطة خاصة [] [] [] ؛ Boolean [] [] أعلام ؛ منطقية [] [] العلم ؛ int couttime ؛ // إعلان اتصال كائن الاتصال Con ؛ // اسم برنامج تشغيل String Driver = "com.mysql.jdbc.driver" ؛ . // MySQL تكوين سلسلة المستخدم = "الجذر" ؛ // password string password = "huang" ؛ Public Main (int snum ، int mines) {// main interface constructor settitle ("mine-sweeping") ؛ // العدد الأولي لـ Thunder Num = Mines ؛ jmenubar greenbar = new jmenubar () ؛ // menu container greenbar.setopaque (true) ؛ Greenbar.Setbackground (لون جديد (250 ، 250 ، 250)) ؛ Greenbar.setPreferredSize (بعد جديد (800 ، 28)) ؛ greenbar.setfont (font new (font.dialog_input ، font.italic ، 16)) ؛ // menu jmenu filemenu1 = new jmenu ("game") ؛ 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 new (font.dialog_input ، font.italic ، 16)) ؛ FileMenu3.setFont (خط جديد (font.dialog_input ، font.italic ، 16)) ؛ // menu item filemenu1.Add (jminew = new jmenuitem ("new game")) ؛ 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 ("intermediate")) ؛ FileMenu2.Add (jmigaoji = new 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 new (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 new (font.dialog_input ، font.italic ، 16)) ؛ jmiexit.setfont (خط جديد (font.dialog_input ، font.italic ، 16)) ؛ jmichuji.setfont (font new (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 (icon) ؛ setLayout (GridLayout جديد (snum ، snum)) ؛ JB = New Jbutton [snum] [snum] ؛ MAP = New Int [snum] [snum] ؛ // خريطة الأزرار في أعلام صفيف = new boolean [map.length] [map [0] // bleigh بينما (count <num) {int i = (int) (math.random () * map.length) ؛ // hang int j = (int) (math.random () * map [0] .Length) ؛ // li (map [i] [j]! = ' *') {map [i] = ' *' ؛ count ++ ؛ }} لـ (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 (this) ؛ jb [i] [j] .addmouselistener (this) ؛ // إضافة مستمع الماوس إضافة (jb [i] [j]) ؛ }} // Timer JLabel ststus = new JLabel () ؛ JLabel Times = New JLabel () ؛ Jlabel Miao = New Jlabel () ؛ إضافة (ststus) ؛ إضافة (مرات) ؛ Times.settext ("0") ؛ miao.settext ("Seconds") ؛ setTimer (Times) ؛ couttime = 0 ؛ ststus.settext ("الوقت:") ؛ greenbar.add (ststus) ؛ Greenbar.add (Times ، right_alignment) ؛ Greenbar.add (Miao ، right_alignment) ؛ Times.setfont (خط جديد (font.dialog_input ، font.italic ، 16)) ؛ ststus.setfont (font new Font (font.dialog_input ، font.italic ، 16)) ؛ miao.setfont (font new (font.dialog_input ، font.italic ، 16)) ؛ SetSize (700 ، 700) ؛ setLocationRelativeto (NULL) ؛ setVisible (صحيح) ؛ // setDefaultCloseOperation (jframe.exit_on_close) ؛ setDefaultCloseOperation (dispose_on_close) ؛ // أضف هذا السطر} private void settimer (jlabel time) {// الوقت الاستماع النهائي 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) {// انقر فوق تنفيذ الحدث إذا (map [x] [y] == '*') {jb [x] [y] .seticon (icon) ؛ Showmines () ؛ } آخر {int count1 = 0 ؛ لـ (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] }} أعلام [x] [y] = true ؛ if (count1 == 0) {jb [x] [y] .SetBackground (color.white) ؛ } آخر {jb [x] [y] .settext (count1 + "") ؛ jb [x] [y] .setfont (خط جديد (font.dialog_input ، font.italic ، 20)) ؛ JB [x] [y] .SetBackground (color.hite) ؛ } 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 || == false) {showTheClick (i ، j) ؛ // loop traversal} else {// منع الوصول المتكرر}}}}}}}}}} map.length ؛ //}}} // إنهاء اللعبة int b = joptionpane.showoptiondialog (null ، "أوه ، لقد انفجرت ، لعبة جديدة؟" ، "مربع تأكيد" ، joptionpane.yes_no_option ، joptionpane.question_message ، null ، null ، null) ؛ if (b == 1) {system.exit (0) ؛ } آخر {setVisible (false) ؛ جديد رئيسي (map.length ، num) ؛ }} Override public void actionperformed (Actionevent e) {// معالجة الاستماع للحدث // todo method method todo icto if ( جديد رئيسي (map.length ، num) ؛ } else if ( } آخر if ( } آخر إذا (e.getSource () == jmiziding) {new SelfMines () ؛ } آخر if ( جديد رئيسي (5،3) ؛ } آخر if ( } آخر if ( جديد رئيسي (10،10) ؛ } if if ( جديد رئيسي (20،60) ؛ } آخر {object obj = e.GetSource () ؛ int x ، y ؛ String [] strm = ((jbutton) obj) .getName (). split ("_") ؛ x = integer.parseint (strm [0]) ؛ y = integer.parseint (strm [1]) ؛ SHAWTHECLICK (x ، y) ؛ checksuccess () ؛ // تحقق مما إذا كانت اللعبة قد انتهت}} private void showrange () {// show ترتيب shiyan13 جديد (map.length) ؛ } private void checksuccess () {// حدد ما إذا كانت اللعبة قد انتهت // todo method method count count = map.length * map [0] .Length ؛ لـ (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 (). toString (). replaceall ("-" ، "") ؛ // يشير الجدول بشكل فريد إلى uuid // الارتباط إلى بيانات قاعدة البيانات وبيانات وقت المتجر حاول {class.forname (driver) ؛ Con = (اتصال) drivermanager.getConnection (url ، المستخدم ، كلمة المرور) ؛ سلسلة SQL ؛ if (! con.isclosed ()) {// ta.settext ("") ؛ System.out.println ("Connecting Database بنجاح") ؛ // إنشاء عبارة كائن عبارة = (بيان) con.createstatement () ؛ // if (map.length == 10) {// // sql state seved sql = "insert in middlerange (userId ، usertime) القيم (" + uuid + "/" ، " + couttime +") ؛ "؛ بيان. ExecuteUpdate (SQL) ؛ con.close () ؛ } آخر إذا (map.length == 5) {sql = "insert في rang (userId ، usertime) القيم (/" " + uuid +"/"،" + couttime + ") ؛" ؛ بيان. ExecuteUpdate (SQL) ؛ con.close () ؛ } آخر إذا (map.length == 20) {sql = "insert في toprange (userId ، usertime) القيم (/" " + uuid +"/"،" + couttime + ") ؛" ؛ بيان. ExecuteUpdate (SQL) ؛ con.close () ؛ } else {}} catch (classnotfoundException e) {// database driver class stispling system.out.println ("error") ؛ E.PrintStackTrace () ؛ } catch (sqlexception e) {// system.out.println (e) ؛ System.err.println ("البيانات غير موجودة") ؛ // int i = joptionpane.showConfirmDialog (null ، "عبارة SQL التي أدخلتها غير صحيحة" ، // "لم يتم العثور عليها" ، joptionpane.yes_no_option) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {system.out.println ("قاعدة البيانات تحصل على البيانات بنجاح!") ؛ } int i = joptionpane.showoptiondialog (null ، "تهنئة على اجتياز الاختبار ، هل تستمر؟" ، "تأكيد المربع" ، joptionpane.yes_no_option ، joptionpane.question_message ، لاغية ، لاغية ، لاغية) ؛ // ststus.settext ("hello"+i) ؛ if (i == 1) {system.exit (0) ؛ } آخر {setVisible (false) ؛ جديد رئيسي (map.length ، num) ؛ }}} Override public void mouseclicked (mouseevent e) {// todo method method method tuto 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) {// insert the flag jb [x] [y] .Seticon (icon1) ؛ العلم [x] [y] = true ؛ } آخر {jb [x] [y] .Seticon (null) ؛ العلم [x] [y] = false ؛ }}} adoverride public void mousepressed (mouseevent e) {// todo method method mother} override public void mouseentered (mouseevent e) {// todo method method method} oodride public mouseexited (mouseevent e)3. إدراك التأثير
4. تنفيذ الوظائف الرئيسية
(1) وظيفة كاسحة الألغام الأساسية (حرق الألغام العشوائية ، إدراج العلم)
(2) يمكنك اختيار الصعوبة (3) يمكنك تخصيص عدد الألغام التي تجتاح وعدد الشبكات (4) ضبط الوقت (5) إضافة وظيفة التصنيف (تخزينها في قاعدة البيانات وفقًا للوقت)
(6) يمكن تشغيل تغليفه في ملف exe (مع JRE) على منصات متعددة. (استخدم exe4j لتعبئة حزمة الجرة)
إذا كنت بحاجة إلى رمز المصدر ، يمكنك ترك بريد إلكتروني! هذه هي الكود المصدري: لعبة التعرف على الألغام
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.