تشارك هذه المقالة الكود المحدد لإصدار Java من تطبيق واجهة لعبة Sudoku للرجوع إليه. المحتوى المحدد كما يلي
عروض التنفيذ:
اكتب وصف صورة هنا
يتم استخدام الوظيفة الرئيسية لبدء البرنامج:
package hlc.shudu mainframe.setVisible (صحيح) ؛ }}
فئة النموذج الرئيسية (بما في ذلك منطقة الرسائل ، مساحة الوقت ، منطقة اللعبة):
حزمة hlc.shudu.ui javax.swing.icon ؛ import javax.swing.imageicon ؛ import javax.swing.jbutton ؛ import javax.swing.jframe ؛ import javax.swing.jlabel ؛ Sudoku Main Form*/Public Class ShudumainFrame يمتد Jframe {public static int pass = 1 ؛ // المستوى العام الثابت jlabel lbpass ؛ // عرض Lable static static static static stative used = 0 ؛ // لاعب يستخدم shuducanvers panelcanvers. // Main Game Area Public Static Timer UsertimeAction ؛ /** Constructor الافتراضي*/ shudumainframe () {// طريقة التهيئة init () ؛ // إضافة مكون addComponent () ؛ // إضافة منطقة اللعبة الرئيسية addcanvers () ؛ } /** إضافة منطقة اللعبة الرئيسية* / private void addcanvers () {panelcanvers = new shuducanvers () ؛ PaneCanvers.setBorder (جديد بعنوان ("منطقة اللعبة")) ؛ // إضافة منطقة اللعبة الرئيسية إلى النموذج this.add (panelcanvers ، borderlayout.center) ؛ } /** إضافة مساحة مكون* / private void addComponent () {jpanel panelcomponent = new JPanel () ؛ // إضافة منطقة رسالة addPanelmsg (panelcomponent) ؛ // إضافة مساحة الوقت AddPaneltime (PanelComponent) ؛ // أضف مكونًا إلى الجزء العلوي من النموذج this.add (panelcomponent ، borderlayout.north) ؛ } private void addpaneltime (jpanel panelcomponent) {jpanel paneltime = new jpanel () ؛ Paneltime.setBorder (جديد بعنوان ("الوقت")) ؛ paneltime.setLayout (New GridLayout (2 ، 1)) ؛ النهائي jlabel lbsystime = new jlabel () ؛ النهائي jlabel lbusertime = new jlabel () ؛ paneltime.add (lbsystime ، borderlayout.north) ؛ paneltime.add (lbusertime ، borderlayout.south) ؛ . df.format (timemillis)) ؛ SystimeAction.start () ؛ UsertImeAction = Timer جديد (1000 ، ActionListener () {Override public void actionperformed (ActionEvent e) {lbusertime.settext ("لقد استخدمت:"+ (++ useTime)+ "sec.") ؛}}) ؛ UsertImeAction.start () ؛ PanyComponent.add (Paneltime ، BorderLayout.East) ؛ } /** إضافة منطقة الرسالة* / private void addPanelmsg (jpanel panelcomponent) {// panelcomponent.setBorder (جديد talledBorder ("منطقة الرسالة")) ؛ panyComponent.setLayout (GridLayout جديد (1 ، 3)) ؛ font font14 = new Font ("" ، 4 ، 14) ؛ font font28 = new Font ("" ، 2 ، 28) ؛ jpanel panelmsg = new JPanel () ؛ Panelmsg.setBorder (جديد بعنوان ("منطقة الرسائل")) ؛ Jlabel lbpass1 = New Jlabel ("المستوى:") ؛ lbpass1.setfont (font14) ؛ PanyMSG.Add (lbpass1) ؛ // عرض عدد المستويات lbpass = new jlabel ("" + pass) ؛ lbpass.setforeground (color.red) ؛ lbpass.setfont (font28) ؛ PanyMSG.Add (lbpass) ؛ JLabel LBPASS2 = New JLabel ("OFF/10 مستويات في المجموع") ؛ lbpass2.setfont (font14) ؛ PanyMSG.Add (lbpass2) ؛ panyComponent.add (panelmsg ، borderlayout.center) ؛ }/** تهيئة الواجهة*/private void init () {imageicon image = new imageicon ("icon/icon.png") ؛ this.seticOnimage (image.getImage ()) ؛ // قم بتعيين حجم النافذة الأولية this.setsize (515 ، 600) ؛ // قم بتعيين الموضع الأولي من النافذة this.setLocation (500 ، 50) ؛ // قم بتعيين عنوان النافذة this.settitle ("لعبة sukua (بواسطة: hou longchao)") ؛ // قم بتعيين النموذج لعدم تغيير حجم this.setResible (false) ؛ // قم بتعيين العملية الافتراضية this.setDefaultCloseOperation (jframe.exit_on_close) ؛ }}قماش منطقة اللعبة:
حزمة hlc.shudu.ui java.awt.event.mouselistener ؛ import javax.swing.jdialog ؛ import javax.swing.joptionpane ؛ import javax.swing.jpanel ؛ eSport javax.swing.border.border الخلايا ؛ // احصل على Sudoku Array Int [] [] Maps = New Int [9] [9] ؛ SelectNnumFrame SelectNum ؛ /** المنشأة الافتراضية*/ shuducanvers العامة () {shudumainframe.usedtime = 0 ؛ الخرائط = shuduhelper.getMap () ؛ // تحميل منطقة Sudoku this.setLayout (null) ؛ الخلايا = shuducell الجديدة [9] [9] ؛ لـ (int i = 0 ؛ i <9 ؛ i ++) {for (int j = 0 ؛ j <9 ؛ j ++) {// this.remove (cell [i] [j]) ؛ // إنشاء خلايا الخلايا [i] [j] = new Shuducell () ؛ // تعيين خلايا الموضع [i] [j] .SetLocation (20 + i * 50 + (i / 3) * 5 ، 20 + j * 50 + (j / 3) * 5) ؛ if (passrole (shudumainframe.pass)) {cell [i] [j] .settext ("" + maps [i] [j]) ؛ // قم بتعيين خلايا ألوان الخلفية [i] [j] .SetBackground (getColor (خرائط [i] [j])) ؛ الخلايا [i] [j] .SetEnabled (false) ؛ الخلايا [i] [j] .SetForeground (color.gray) ؛ } آخر {cell [i] [j] .addmouselistener (this) ؛ } this.add (cells [i] [j]) ؛ }} checkfinish () ؛ // releoadcanvers () ؛ } /*** تحقق مما إذا كان قد اكتمل* / private void checkfinish () {for (int i = 0 ؛ i <9 ؛ i ++) {for (int j = 0 ؛ j <9 ؛ j ++) {if (! check (i ، j)) {return ؛ }}} // إيقاف مؤقت المستخدم shudumainframe.usertimeaction.stop () ؛ // مسح جميع مستمعي الخلايا clearalllistener () ؛ // إضافة واحد إلى رقم المرور shudumainframe.pass += 1 ؛ if (shudumainframe.pass> 10) {int o = joptionpane .showConfirmDialog (هذا ، "لقد مررت بالمستوى ، هل بدأت؟" ، "" ، 0) ؛ if (o == 1) {system.exit (0) ؛ } آخر {shudumainframe.pass = 1 ؛ }} آخر {joptionpane.showmessagedialog (هذا ، "تهانينا على تمرير هذا المستوى! الوقت الذي يقضيه:" + shudumainframe.usptime + "سوف تدخل الثواني/n إلى المستوى التالي قريبًا!") ؛ } // تحديث مطالبة المستوى shudumainframe.lbpass.settext ("" + shudumainframe.pass) ؛ // ابدأ مستوى جديد RELOADCANVers () ؛ // افتح جهاز توقيت المستخدم shudumainframe.usertimeaction.start () ؛ } / * * تحقق من الخلية في الإحداثيات المحددة * / private boolean check (int i ، int j) {if (cell [i] } لـ (int k = 0 ؛ k <9 ؛ k ++) {if (cell [i] [j] .getText (). equals (cell [i] } إذا (الخلايا [i] [j] .getText (). trim (). يساوي (الخلايا [k] [j] .getText (). trim ()) } int ii = (i / 3) * 3 + k / 3 ؛ int jj = (j / 3) * 3 + k ٪ 3 ؛ إذا (الخلايا [i] [j] .getText (). trim (). يساوي (الخلايا [ii] }} إرجاع صحيح ؛ } /** RELOAD SUDOKU AREA* / public void RELOADCANVERS () {shudumainframe.usedtime = 0 ؛ أنا <9 ؛ i ++) {for (int j = 0 ؛ j <9 ؛ j ++) {this.remove (cells [i] [j]) ؛ // إنشاء خلايا الخلايا [i] [j] = new Shuducell () ؛ // تعيين خلايا الموضع [i] [j] .SetLocation (20 + i * 50 + (i / 3) * 5 ، 20 + j * 50 + (j / 3) * 5) ؛ if (passrole (shudumainframe.pass)) {cell [i] [j] .settext ("" + maps [i] [j]) ؛ // قم بتعيين خلايا ألوان الخلفية [i] [j] .SetBackground (getColor (خرائط [i] [j])) ؛ الخلايا [i] [j] .SetEnabled (false) ؛ الخلايا [i] [j] .SetForeground (color.gray) ؛ } آخر {cell [i] [j] .addmouselistener (this) ؛ } this.add (cells [i] [j]) ؛ }} this.repaint () ؛ checkfinish () ؛ } / * * توليد بشكل عشوائي ما إذا كان يتم عرض الرقم في هذا الموضع * / private boolean passrole (int pass) {// todo method method method math.random () * 11> pass ؛ } /** احصل على اللون بناءً على الرقم* / color getColor (int i) {color = color.pink ؛ Switch (i) {case 1: color = New Color (255 ، 255 ، 204) ؛ استراحة؛ الحالة 2: اللون = لون جديد (204 ، 255 ، 255) ؛ استراحة؛ الحالة 3: اللون = لون جديد (255 ، 204 ، 204) ؛ استراحة؛ الحالة 4: اللون = لون جديد (255 ، 204 ، 153) ؛ استراحة؛ الحالة 5: اللون = لون جديد (204 ، 255 ، 153) ؛ استراحة؛ الحالة 6: اللون = لون جديد (204 ، 204 ، 204) ؛ استراحة؛ الحالة 7: اللون = لون جديد (255 ، 204 ، 204) ؛ استراحة؛ الحالة 8: اللون = لون جديد (255 ، 255 ، 255) ؛ استراحة؛ الحالة 9: اللون = لون جديد (153 ، 255 ، 153) ؛ استراحة؛ الافتراضي: استراحة ؛ } لون الإرجاع ؛ } Override public void mouseclicked (mouseevent e) {// todo method method motho ad} override public void mousepressed (mouseevent e) {int modes = e.getModifiers () ؛ إذا ((أوضاع و inputevent.button3_mask)! = 0) {// انقر بزر الماوس الأيمن // قم بمسح المحتوى على خلية النقر ((shuducell) e.getSource ()). setText ("") ؛ } آخر إذا ((أوضاع و inputevent.button1_mask)! = 0) {// انقر فوق اليسرى // إذا كانت نافذة الرقم المحددة موجودة ، تدمير إذا (selectnum! = null) {selectnum.dispose () ؛ } // إنشاء نافذة تحديد جديدة SELECTNUM = new SELECTNUMFRAME () ؛ // ضبط على النافذة المشروطة selectnum.setModal (true) ؛ // قم بتعيين موضع نافذة التحديد على الشاشة selectnum.setLocation ( // تمرير الخلية التي تم النقر فوقها إلى نافذة تحديد الرقم SELECTNUM.SetCell ((Shuducell) E.GetSource ()) ؛ // عرض نافذة تحديد الرقم SELECTNUM.SetVisible (TRUE) ؛ } checkfinish () ؛ } / * * قم بمسح جميع الخلايا انقر فوق الاستماع * / private void clearalllistener () {for (int i = 0 ؛ i <9 ؛ i ++) {for (int j = 0 ؛ j <9 ؛ j ++) {cell [i] [j] .removeMouselistener (this) ؛ }}} @Override public void mouserelest (mouseevent e) {// todo method method mother} override public public mouseentered (mouseevent e) {// todo auto method method} oodride public mouseexited (mouseevent e)خلية سودوكو:
حزمة hlc.shudu.ui ؛ استيراد java.awt.color ؛ استيراد java.awt.font ؛ استيراد javax.swing.jbutton ؛ الطبقة العامة shuducell يمتد jbutton {public shuducell () {this.setsize (50،50) ؛ font font = new Font ("" ، 2،24) ؛ this.setfont (الخط) ؛ this.setbackground (لون جديد (255،153،102)) ؛ this.setforeground (color.blue) ؛ }}مربع اختيار الأرقام:
حزمة hlc.shudu.ui javax.swing.jframe ؛ الطبقة العامة selectnumframe يمتد jdialog تنفذ mouselistener {private Shuducell Cell ؛ public void setCell (shuducell cell) {this.cell = cell ؛ } public selectnumframe () {// إخفاء شريط الأدوات على الواجهة this.setUndEcorated (true) ؛ this.setsize (150 ، 150) ؛ this.setbackground (لون جديد (255،204،153 ، 123)) ؛ this.setLayout (null) ؛ addnum () ؛ } // إضافة أرقام 1 ~ 9 private void addnum () {for (int i = 0 ؛ i <3 ؛ i ++) {for (int j = 0 ؛ j <3 ؛ j ++) {jbutton btn = new jbutton () ؛ btn.setsize (50 ، 50) ؛ Btn.SetLocation (I*50 ، J*50) ؛ btn.settext (""+(j*3+i+1)) ؛ btn.addmouselistener (هذا) ؛ this.add (btn) ؛ }}} Override public void mouseclicked (mouseevent e) {// todo method method method} override public void mousepracted (mouseevent e) {int modes = e.getModifiers () ؛ if ((أوضاع و inputevent.button1_mask)! = 0) {jbutton btn = (jbutton) e.getSource () ؛ cell.settext (btn.getText ()) ؛ } this.dispose () ؛ } Override public void mouserelest (mouseevent e) {// todo method method method motho} override public void mouseentered (mouseevent e) {// todo to ato method method} @override public void mouseentered (mouseevent e) mouseexited (mouseevent e) {// todo method method method}}}يمكن تنزيل الحزمة الكاملة على github: https://github.com/houlongchao/shudu.git
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.