تصف هذه المقالة لعبة Gine-Gease و Envedive Expensed التي تم تنفيذها بواسطة Java Swing. شاركه للرجوع إليه ، على النحو التالي:
الإصدار 1:
حزمة awtdemo ؛ استيراد java.awt.event.actionevent ؛ استيراد java.awt.event.actionlistener ؛ استيراد java.awt.event.mouseevent ؛ استيراد java.awt.event.mouselistener مثال على ما يرام ، مكتوبة من تأرجح ، مناسبة للمبتدئين لممارسة* يستخدم هذا البرنامج setBounds (x ، y ، w ، h) لتخطيط طريقة التحكم* تشير إلى طريقة التعرف على الألغام المدمجة في Win XP. بالطبع ، لم يتم إجراء وظيفة الكتابة ، * بعض الوظائف التي تم إجراؤها تحتوي على أخطاء * * Author PING_QC */اختبار الفئة العامة يمتد JFRAME الأدوات ActionListener ، Runnable ، Mouselistener {Private Static Final Long SerialVersionuid = -2417583965039613l ؛ نهائي خاص int فارغ = 0 ؛ منجم int النهائي الخاص = 1 ؛ تم فحص int النهائي الخاص = 2 ؛ نهائي خاص int mine_count = 10 ؛ // عدد Thunder Private Final Int Button_Border = 50 ؛ // حجم كل نقطة نهائية خاصة int mine_size = 10 ؛ // مواصفات الواجهة ، 20x20 Final Final start_x = 20 ؛ // START POSTER X Private Final int start_y = 50 ؛ // ابدأ الموقف Y العلم المنطقي الخاص ؛ الخاص jbutton [] [] JB ؛ الخاص Jlabel JL ؛ خاص Jlabel Showtime ؛ خريطة خاصة [] [] [] ؛ /*** اكتشف ما إذا كان هناك البرق حول نقطة ما. يمكن حساب إحداثيات النقاط المحيطة من هذه الصفيف*/ 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 ؛ لـ (؛ i <mine_count ؛) {tx = (int) (math.random () * mine_size) ؛ Ty = (int) (Math.Random () * mine_size) ؛ if (map [tx] [ty] == فارغة) {map [tx] [ty] = mine ؛ i ++ ؛ // لا تتذكر البرق المتكرر}}}}/ *** ضع صفيف الأزرار على الإطار وتتوافق مع الخريطة [] [] Array*/ public void makebutton () {for (int i = 0 ؛ i <mine_size ؛ i ++) {for (int j = 0 ؛ j <mine_size ؛ j ++) {i] // if (map [i] [j] == mine) // jb [i] [j] .settext (i+"،"+j) ؛ // المستمع إضافة jb [i] [j] .AddActionListener (this) ؛ jb [i] [j] .addmouselistener (this) ؛ 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 + "Thunder") ؛ JL.SetVisible (صواب) ؛ JL.SetBounds (20 ، 20 ، 500 ، 30) ؛ this.add (jl) ؛ showtime.settext ("Elapsed: 0 ثانية") ؛ Showtime.setBounds (400 ، 20 ، 100 ، 30) ؛ this.add (شوتايم) ؛ makemine () ؛ Makebutton () ؛ this.setsize (550 ، 600) ؛ this.setLocation (700 ، 100) ؛ this.setResible (false) ؛ this.setDefaultCloseOperation (exit_on_close) ؛ this.setVisible (صحيح) ؛ } الاختبار العام (عنوان السلسلة) {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] ؛ . test.init () ؛ test.run () ؛ } Override public void actionperformed (ActionEvent e) {object obj = E.GetSource () ؛ int x ، y ؛ if ((obj extrealof jbutton) == false) {showMessage ("error" ، "error internal") ؛ يعود؛ } 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 ("Death" ، "لقد صعدت على منجم ~~~") ؛ العلم = صحيح ؛ showmine () ؛ يعود؛ } dfs (x ، y ، 0) ؛ checksuccess () ؛ } / ** * بعد كل نقرة ، حدد ما إذا كان قد تم العثور على جميع lightnings عن طريق حساب عدد الأزرار مع الحالة الممكّنة * / private void checksuccess () {int cnt = 0 ؛ لـ (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 ("Victory" ، "عندما تتم مشاركة هذا المناجم:" + TMP_STR + "Seconds") ؛ العلم = صحيح ؛ showmine () ؛ }} private int dfs (int x ، int y ، int d) {map [x] [y] = check ؛ int i ، tx ، ty ، cnt = 0 ؛ لـ (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 ++ ؛ // statistics for the the the the thunder near eosle} else} if (map [tx] [ty] == leghal) {؛ } آخر إذا (خريطة [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]! = checked) {dfs (tx ، ty ، d + 1) ؛ }}} آخر {jb [x] [y] .settext (cnt + "") ؛ } jb [x] [y] .SetEnabled (false) ؛ إرجاع CNT ؛ } / ** * إظهار بعض المعلومات على علامة JL * * param العنوان * param info * / private void showmessage (عنوان السلسلة ، معلومات السلسلة) {jl.settext (info) ؛ system.out.println ("in functino showmessage ():" + info) ؛ } public void run () {int t = 0 ؛ بينما (صحيح) {if (flag) {break ؛ } جرب {thread.sleep (1000) ؛ } catch (interruptedException e) {E.PrintStackTrace () ؛ } t ++ ؛ showtime.settext ("Elapsed:" + t + "Seconds") ؛ } // showmine () ؛ } private void showmine () {// iconmine = new imageicon ("e: /mine.jpg") ؛ لـ (int i = 0 ؛ i <mine_size ؛ i ++) {for (int j = 0 ؛ j <mine_size ؛ j ++) {if (map [i] == mine) {jb [i] [j] .settext ("#") ؛ // jb [i] [j]. }}}} Override public void mouseclicked (mouseevent e) {if ( if ((obj extrealof jbutton) == false) {showMessage ("error" ، "error internal") ؛ يعود؛ } string [] tmp_str = ((jbutton) obj) .getName (). split ("_") ؛ int x = integer.parseint (tmp_str [0]) ؛ int y = integer.parseint (tmp_str [1]) ؛ if ("{1}". يساوي (jb [x] [y] .getText ())))) {jb [x] [y] .settext ("") ؛ } آخر {jb [x] [y] .settext ("{1}") ؛ } /* if (jb [x] [y] .geticon () == null) {jb [x] [y] } آخر {jb [x] [y] .Seticon (null) ؛ }*/}} Override public void mousepracked (mouseevent e) {// todo method method method} override public void mousereledease (mouseevent e) {// todo auto-generated method stub} @override public void mouseenered (mouseevent e) {// mouseexited (mouseevent e) {// todo method method method}}}تأثير الجري:
الإصدار 2 هو تحسن في برنامج الإصدار 1 أعلاه ، ويتم إضافة وظيفة علامات النقر بزر الماوس الأيمن ووظيفة صعوبة التحديد المستقلة على أساس الأساس الذي لم يتغير.
package awtdemo ؛ import java.awt.event.actionevent ؛ import java.awt.event.actionlistener ؛ import java.awt.event.mousevent ؛ import java.awt.event.mouselistener ؛ import javax.swing.jbutton ؛ javax.swing.jlabel ؛ suppressWarnings ("Serial") الطبقة العامة Saolei تمتد JFrame الأدوات ActionListener ، Runnable ، mouselistener {private Final infty = 0 ؛ نهائي خاص int lomine = 1 ؛ نهائي خاص int lochecked = 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 ؛ خريطة خاصة [] [] [] ؛ 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 ؛ لـ (؛ 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 (this) ؛ jb [i] [j] .addmouselistener (this) ؛ 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 (صواب) ؛ JL.SetBounds (20 ، 20 ، 500 ، 30) ؛ this.add (jl) ؛ showtime.settext ("Elapsed: 0 ثانية") ؛ Showtime.setBounds (400 ، 20 ، 100 ، 30) ؛ this.add (شوتايم) ؛ Makelomine () ؛ Makebutton () ؛ this.setsize (550 ، 600) ؛ this.setLocation (700 ، 100) ؛ this.setResible (false) ؛ this.setDefaultCloseOperation (exit_on_close) ؛ this.setVisible (صحيح) ؛ } saolei العامة (عنوان السلسلة) {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] ؛ // خريطة الأزرار في صفيف} الفراغ الثابت العام (سلسلة [] args) {saolei test = new saolei ("wulin.com-mine cysing game test 2") ؛ test.init () ؛ test.run () ؛ } Override public void actionperformed (ActionEvent e) {object obj = E.GetSource () ؛ int x ، y ؛ if ((obj extrealof jbutton) == false) {showMessage ("error" ، "error internal") ؛ يعود؛ } 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 ("Death" ، "لقد صعدت على منجم ~~~") ؛ العلم = صحيح ؛ Showlomine () ؛ يعود؛ } dfs (x ، y ، 0) ؛ checksuccess () ؛ } private void checksuccess () {int cnt = 0 ؛ لـ (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 ("Victory" ، "عندما تتم مشاركة هذا المناجم:" + TMP_STR + "Seconds") ؛ العلم = صحيح ؛ Showlomine () ؛ }} private int dfs (int x ، int y ، int d) {map [x] [y] = lochecked ؛ int i ، tx ، ty ، cnt = 0 ؛ لـ (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 ++ ؛ } آخر إذا (خريطة [tx] [ty] == loempty) {؛ } آخر إذا (خريطة [tx] [ty] == lochecked) {؛ }}} 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) ؛ }}} آخر {jb [x] [y] .settext (cnt + "") ؛ } jb [x] [y] .SetEnabled (false) ؛ إرجاع CNT ؛ } private void showmessage (عنوان السلسلة ، معلومات السلسلة) {jl.settext (info) ؛ system.out.println ("in functino showmessage ():" + info) ؛ } public void run () {int t = 0 ؛ بينما (صحيح) {if (flag) {break ؛ } جرب {thread.sleep (1000) ؛ } catch (interruptedException e) {E.PrintStackTrace () ؛ } t ++ ؛ showtime.settext ("الوقت المنقضي:" + t + "Seconds") ؛ }} 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]. }}}} public void mouseclicked (mouseevent e) {if ( if ((obj extrealof jbutton) == false) {showMessage ("error" ، "error internal") ؛ يعود؛ } 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 ( } آخر {jb [x] [y] .settext ("{1} quot") ؛ }}} public void mousepressed (mouseevent e) {} override public void mousereleSeped (mouseevent e) {} public void mouseentered (mouseevent e) {} override public void mouseexited (mouseevent e) {}}}}تأثير الجري:
لمزيد من المعلومات حول خوارزميات Java ، يمكن للقراء المهتمين بهذا الموقع عرض الموضوعات: "بنية بيانات Java وبرنامج تعليمي الخوارزمية" ، "ملخص" Tips Java ".
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.