บทความนี้แบ่งปันรหัสเฉพาะของการใช้งานอินเทอร์เฟซเกม Sudoku Game เวอร์ชัน Java สำหรับการอ้างอิงของคุณ เนื้อหาเฉพาะมีดังนี้
การเรนเดอร์การใช้งาน:
เขียนคำอธิบายรูปภาพที่นี่
ฟังก์ชั่นหลักใช้ในการเริ่มโปรแกรม:
แพ็คเกจ hlc.shudu.app; นำเข้า hlc.shudu.src.shuduhelper; นำเข้า hlc.shudu.ui.shudumainframe; คลาสสาธารณะ {โมฆะคงที่สาธารณะ (สตริง [] args) {shudumainframe mainframe = new Shudumainframe mainframe.setVisible (จริง); -คลาสฟอร์มหลัก (รวมถึงพื้นที่ข้อความพื้นที่เวลาพื้นที่เกม):
แพ็คเกจ hlc.shudu.ui; นำเข้า java.awt.borderlayout; นำเข้า java.awt.color; นำเข้า java.awt.font; นำเข้า java.awt.gridlayout; นำเข้า java.awt.event.actionevent; java.text.simpledateFormat; นำเข้า Javax.swing.icon; นำเข้า Javax.swing.imageicon; นำเข้า Javax.swing.jbutton; นำเข้า Javax.swing.jframe; นำเข้า Javax.swing.jlabel; javax.swing.border.titledBorder;/** ฟอร์มหลักของ sudoku*/คลาสสาธารณะ Shudumainframe ขยาย jframe {public Static int pass = 1; // ระดับสาธารณะคงที่ JLabel LBPass; // แสดงระดับการใช้งานแบบคงที่สาธารณะในระยะยาวของ Lable = 0; // ผู้เล่นใช้ Private Shuducanvers Panelcanvers; // พื้นที่เกมหลักตัวจับเวลาแบบคงที่สาธารณะ usertimeaction; /** ตัวสร้างเริ่มต้น*/ public shudumainframe () {// วิธีการเริ่มต้น init (); // เพิ่มส่วนประกอบ AddComponent (); // เพิ่ม AddCanvers พื้นที่เกมหลัก (); } /** เพิ่มพื้นที่เกมหลัก* / โมฆะส่วนตัว addCanvers () {panelCanvers = new Shuducanvers (); PanelCanvers.SetBorder (ใหม่ titledBorder ("พื้นที่เกม")); // เพิ่มพื้นที่เกมหลักในแบบฟอร์ม this.add (PanelCanvers, BorderLayout.Center); } /** เพิ่มพื้นที่ส่วนประกอบ* / โมฆะส่วนตัว addComponent () {JPanel PanelComponent = new JPanel (); // เพิ่มพื้นที่ข้อความ addPanelMSG (PanelComponent); // เพิ่มพื้นที่เวลา AddPanelTime (PanelComponent); // เพิ่มส่วนประกอบไปที่ด้านบนของแบบฟอร์ม this.add (PanelComponent, BorderLayout.north); } โมฆะส่วนตัว addPanelTime (JPanel PanelComponent) {JPanel PanelTime = new JPanel (); PanelTime.SetBorder (ใหม่ titledBorder ("เวลา")); PanelTime.setLayout (ใหม่ gridlayout (2, 1)); สุดท้าย JLabel lbsystime = new Jlabel (); สุดท้าย JLabel lbusertime = new Jlabel (); Paneltime.add (Lbsystime, Borderlayout.north); Paneltime.add (LBUSERTIME, BorderLayout.South); // ตั้งค่าเวลาระบบตัวจับเวลาตัวจับเวลา systimeaction = ตัวจับเวลาใหม่ (500, actionListener ใหม่ () {@Override โมฆะสาธารณะ ActionPerformed (ActionEvent E) {Long Timemillis = System.currentTimeMillis () SSMELTFORMAT DF = new SimpleDateFormat ( เวลา: " + df.format (timemillis));}}); systimeaction.start (); usertimeaction = ตัวจับเวลาใหม่ (1,000, actionListener ใหม่ () {@Override โมฆะสาธารณะ ActionPerformed (ActionEvent E) {lbusertime.settext ("คุณใช้:"+ (++ useTime)+ "วินาที");}}); usertimeaction.start (); PanelComponent.add (PanelTime, BorderLayout.east); } /** เพิ่มพื้นที่ข้อความ* / โมฆะส่วนตัว addPanelMSG (JPANEL PanelComponent) {// PanelComponent.SetBorder (ใหม่ TITLEDBORDER ("พื้นที่ข้อความ")); PanelComponent.setLayout (ใหม่ gridlayout (1, 3)); FONT FONT14 = FONT ใหม่ ("", 4, 14); FONT FONT28 = FONT ใหม่ ("", 2, 28); JPanel PanelMSG = new JPanel (); PANELMSG.SetBorder (ใหม่ชื่อ Border ("พื้นที่ข้อความ")); JLabel LBPass1 = new JLabel ("ระดับ:"); LBPass1.SetFont (FONT14); PANELMSG.ADD (LBPass1); // แสดงจำนวนระดับ lbpass = new jlabel ("" + pass); lbpass.setforeground (color.red); lbpass.setfont (Font28); PANELMSG.ADD (LBPASS); JLabel LBPass2 = new JLabel ("ปิด/10 ระดับทั้งหมด"); LBPass2.SetFont (FONT14); PANELMSG.ADD (LBPass2); PanelComponent.add (PanelMSG, BorderLayout.Center); }/** การเริ่มต้นอินเตอร์เฟส*/โมฆะส่วนตัว init () {imageicon image = new imageIcon ("icon/icon.png"); this.seticonimage (image.getimage ()); // ตั้งค่าขนาดหน้าต่างเริ่มต้นนี้ setsize (515, 600); // ตั้งค่าตำแหน่งเริ่มต้นของหน้าต่าง this.setLocation (500, 50); // ตั้งชื่อหน้าต่าง this.settitle ("เกม Sukua (โดย: hou longchao)"); // ตั้งค่าแบบฟอร์มให้ไม่เปลี่ยนขนาดสิ่งนี้ setResizable (เท็จ); // ตั้งค่าการดำเนินการปิดเริ่มต้น this.setDefaultCloseOperation (jframe.exit_on_close); -ผืนผ้าใบพื้นที่เกม:
แพ็คเกจ hlc.shudu.ui; นำเข้า hlc.shudu.src.shuduhelper; นำเข้า java.awt.borderlayout; นำเข้า java.awt.color; นำเข้า java.awt.dialog.modalexclusiontype; java.awt.event.mouselistener; นำเข้า Javax.swing.jdialog; นำเข้า Javax.swing.joptionpane; นำเข้า Javax.swing.jpanel; นำเข้า Javax.swing.border.border; นำเข้า Javax.swing.border.titledborder; Shuducell [] [] เซลล์; // รับอาร์เรย์ sudoku int [] [] maps = new int [9] [9]; selectnumframe ส่วนตัว selectnum; /** ตัวสร้างเริ่มต้น*/ shuducanvers สาธารณะ () {shudumainframe.usedtime = 0; แผนที่ = Shuduhelper.getMap (); // โหลดพื้นที่ sudoku this.setlayout (null); เซลล์ = ใหม่ Shuducell [9] [9]; สำหรับ (int i = 0; i <9; i ++) {สำหรับ (int j = 0; j <9; j ++) {// this.remove (เซลล์ [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)) {เซลล์ [i] [j] .settext ("" + แผนที่ [i] [j]); // ตั้งค่าเซลล์สีพื้นหลัง [i] [j] .setbackground (getColor (แผนที่ [i] [j])); เซลล์ [i] [j] .setenabled (เท็จ); เซลล์ [i] [j] .setforeground (color.gray); } else {cells [i] [j] .addmouselistener (นี่); } this.add (เซลล์ [i] [j]); }} checkfinish (); // ReloadCanvers (); } /** ตรวจสอบว่าเสร็จสิ้น* / โมฆะส่วนตัว checkfinish () {สำหรับ (int i = 0; i <9; i ++) {สำหรับ (int j = 0; j <9; j ++) {ถ้า (! ตรวจสอบ (i, j)) {return; }}} // หยุดตัวจับเวลาผู้ใช้ shudumainframe.usertimeaction.stop (); // ล้างผู้ฟังเซลล์ทั้งหมด ClearallListener (); // เพิ่มหนึ่งในหมายเลขบัตร shudumainframe.pass += 1; ถ้า (shudumainframe.pass> 10) {int o = joptionpane. showconfirmdialog (นี่ "คุณผ่านระดับแล้วคุณเริ่มต้นใหม่หรือไม่", "", 0); if (o == 1) {system.exit (0); } else {shudumainframe.pass = 1; }} else {joptionpane.showMessagedialog (นี่ "ขอแสดงความยินดีกับการผ่านระดับนี้! } // อัปเดตระดับพรอมต์ shudumainframe.lbpass.settext ("" + shudumainframe.pass); // เริ่มต้น reloadcanvers ระดับใหม่ (); // เปิดตัวจับเวลาผู้ใช้ shudumainframe.usertimeaction.start (); } / * * ตรวจสอบเซลล์ที่พิกัดที่ระบุ * / การตรวจสอบบูลีนส่วนตัว (int i, int j) {ถ้า (เซลล์ [i] [j] .getText (). isempty ()) {return false; } สำหรับ (int k = 0; k <9; k ++) {ถ้า (เซลล์ [i] [j] .getText (). เท่ากับ (เซลล์ [i] [k] .getText (). trim ()) && i! = k) {กลับเท็จ; } if (เซลล์ [i] [j] .getText (). trim (). เท่ากับ (เซลล์ [k] [j] .getText (). trim ()) && i! = k) {return false; } int ii = (i / 3) * 3 + k / 3; int jj = (j / 3) * 3 + k % 3; ถ้า (เซลล์ [i] [j] .getText (). trim (). เท่ากับ (เซลล์ [ii] [jj] .getText (). trim ()) &&! (i == ii && j == jj)) {return false; }} ส่งคืนจริง; } /** พื้นที่ sudoku reload* / โมฆะสาธารณะ realoadCanvers () {shudumainframe.usedtime = 0; ฉัน <9; i ++) {สำหรับ (int j = 0; j <9; j ++) {this.remove (เซลล์ [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)) {เซลล์ [i] [j] .settext ("" + แผนที่ [i] [j]); // ตั้งค่าเซลล์สีพื้นหลัง [i] [j] .setbackground (getColor (แผนที่ [i] [j])); เซลล์ [i] [j] .setenabled (เท็จ); เซลล์ [i] [j] .setforeground (color.gray); } else {cells [i] [j] .addmouselistener (นี่); } this.add (เซลล์ [i] [j]); }} this.Repaint (); checkfinish (); } / * * แบบสุ่มสร้างว่าหมายเลขจะแสดงในตำแหน่งนี้ * / Private Boolean Passrole (int pass) {// todo วิธีการที่สร้างขึ้นอัตโนมัติ stub return math.random () * 11> pass; } /** รับสีตามจำนวน* / สีส่วนตัว getColor (int i) {color color = color.pink; สวิตช์ (i) {กรณีที่ 1: สี = สีใหม่ (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); หยุดพัก; ค่าเริ่มต้น: break; } กลับสี; } @Override โมฆะสาธารณะ mouseclicked (MouseEvent E) {// วิธีการที่สร้างอัตโนมัติ toDo stub} @Override โมฆะสาธารณะ mousepressed (MouseEvent E) {โหมด int = e.getModifiers (); if ((โหมด & inputeVent.button3_mask)! = 0) {// คลิกขวา // ล้างเนื้อหาในเซลล์คลิก ((shuducell) e.getSource ()). setText (""); } else if ((โหมด & inputeVent.button1_mask)! = 0) {// left-click // ถ้าหน้าต่างหมายเลขที่เลือกอยู่ให้ทำลายถ้า (selectnum! = null) {selectnum.dispose (); } // สร้างหน้าต่างการเลือกใหม่ selectNum = ใหม่ selectNumFrame (); // ตั้งค่าเป็นหน้าต่าง modal selectnum.setModal (จริง); // ตั้งค่าตำแหน่งของหน้าต่างการเลือกบนจอภาพ selectNum.SetLocation (E.GetLocationOnsCreen (). x, E.getLocationOnsCreen (). y); // ผ่านเซลล์ที่คลิกไปยังหน้าต่างการเลือกหมายเลข selectnum.setcell ((shuducell) e.getSource ()); // แสดงหน้าต่างการเลือกหมายเลข selectNum.SetVisible (จริง); } checkfinish (); } / * * ล้างเซลล์ทั้งหมด 'คลิกการฟัง * / โมฆะส่วนตัว ClearallListener () {สำหรับ (int i = 0; i <9; i ++) {สำหรับ (int j = 0; j <9; j ++) {เซลล์ [i] [j] .removemouselistener (นี่); }}} @Override โมฆะสาธารณะ mouserleased (MouseEvent E) {// วิธีการที่สร้างอัตโนมัติ stub} @Override โมฆะสาธารณะ mouseentered (MouseEvent E) {// toDo วิธีการที่สร้างอัตโนมัติเซลล์ Sudoku:
แพ็คเกจ hlc.shudu.ui; นำเข้า java.awt.color; นำเข้า java.awt.font; นำเข้า Javax.swing.jbutton; คลาสสาธารณะ Shuducell ขยาย Jbutton {สาธารณะ shuducell () {this.setsize (50,50); FONT FONT = FONT ใหม่ ("", 2,24); this.setFont (แบบอักษร); this.setbackground (สีใหม่ (255,153,102)); this.setforeground (color.blue); -กล่องเลือกหมายเลข:
แพ็คเกจ hlc.shudu.ui; นำเข้า java.awt.color; นำเข้า java.awt.window; นำเข้า java.awt.event.inputevent; นำเข้า java.awt.event.mousevent; นำเข้า java.awt.event.mouselistener; javax.swing.jframe; คลาสสาธารณะ selectnumframe ขยาย jdialog ใช้ mouselistener {เซลล์ Shuducell ส่วนตัว; โมฆะสาธารณะ setcell (เซลล์ Shuducell) {this.cell = เซลล์; } public selectNumFrame () {// ซ่อนแถบเครื่องมือบนอินเตอร์เฟส this.setundecorated (จริง); this.setsize (150, 150); this.setbackground (สีใหม่ (255,204,153, 123)); this.setLayout (NULL); addnum (); } // เพิ่มตัวเลข 1 ~ 9 โมฆะส่วนตัว addnum () {สำหรับ (int i = 0; i <3; i ++) {สำหรับ (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 โมฆะสาธารณะ mouseclicked (MouseEvent E) {// วิธีการที่สร้างขึ้นอัตโนมัติ todo stub} @Override โมฆะสาธารณะ mousepressed (MouseEvent E) {modes = e.getModifiers (); if ((โหมด & inputeVent.button1_mask)! = 0) {jbutton btn = (jbutton) e.getSource (); cell.settext (btn.getText ()); } this.dispose (); } @Override โมฆะสาธารณะ mouserleased (MouseEvent E) {// วิธีการที่สร้างอัตโนมัติ} @Override โมฆะสาธารณะ Mouseentered (MouseEvent E) {// วิธีการที่สร้างขึ้นอัตโนมัติ MouseExited (MouseEvent E) {// TODO วิธีการที่สร้างขึ้นอัตโนมัติ stub}}}แพ็คเกจที่สมบูรณ์สามารถดาวน์โหลดได้บน gitHub: https://github.com/houlongchao/shudu.git
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น