เกมเล็ก ๆ นี้คือการออกแบบหลักสูตร Java ของน้องสาวของฉันและฉันและมันก็เป็นโครงการ Java แรกที่ฉันทำ เหมาะสำหรับผู้เริ่มต้น ฉันหวังว่ามันจะช่วยเด็ก ๆ ที่มีปัญหากับการออกแบบหลักสูตร Java ~~~
1. ต้องใช้เกม
1. ออกแบบเฟรมหลักและอินเทอร์เฟซ
2. ใช้อินเทอร์เฟซ ActionListener เพื่อรับรู้การตรวจสอบเหตุการณ์ปุ่ม
3. รีสตาร์ทการใช้งานฟังก์ชั่น
4. การใช้งานฟังก์ชั่นหมากรุก
5. การใช้งานฟังก์ชั่นทางออก
6. คำจำกัดความของชิ้นส่วนหมากรุกในกระดานหมากรุก
7. ใช้อินเทอร์เฟซ Mouselistener เพื่อใช้งานการตรวจสอบเหตุการณ์และใช้วิธีทั้งหมดในอินเทอร์เฟซ
8. เมื่อเมาส์เคลื่อนไปยังจุดสี่แยกบนกระดานและไม่มีชิ้นหมากรุกอยู่ในจุดนั้นมันอาจกลายเป็นรูปมือเล็ก ๆ
9. เมื่อคลิกที่กระดานหมากรุกให้ใช้คำสั่ง IF เพื่อพิจารณาว่าจุดอยู่ที่จุดตัดและใช้คำสั่ง foreach และ getx () และวิธี gety () ในชั้นหมากรุกเพื่อข้ามตำแหน่งของชิ้นหมากรุกแต่ละชิ้นเพื่อตรวจสอบว่าจุดหมากรุกหรือไม่
10. เมื่อมีการพิจารณาแล้วว่าคุณสามารถใส่ส่วนย่อยที่จุดคลิกเมื่อวาดชิ้นส่วนให้ใช้การวนรอบเพื่อสำรวจทุกจุดที่มีอยู่และใช้ setcolor ของคลาสกราฟิกเพื่อตั้งค่าสีและใช้วิธีการเติมของคลาสกราฟิกเพื่อตั้งขนาดรูปร่าง
11. เมื่อวาดชิ้นหมากรุกคุณต้องตัดสินผู้ชนะและแพ้ในเวลา ใช้ดัชนีและสำหรับลูปเพื่อสำรวจทิศทางของชิ้นหมากรุกสุดท้าย หากมีชิ้นหมากรุกบนเส้นตรงเดียวกันกับชิ้นหมากรุกจำนวนมากมากกว่าหรือเท่ากับห้านั่นคือชิ้นส่วนที่แสดงโดยชิ้นหมากรุกปัจจุบัน
12. เมื่อผู้ชนะตัดสินใจข้อมูลที่เกี่ยวข้องสามารถโผล่ขึ้นมาได้
2. การใช้งานรหัสการทำงาน
2.1 ป้อนเกม
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {startChessJFrame f = ใหม่ startChessJFrame (); // สร้างเฟรมหลัก f.setVisible (จริง); // แสดงเฟรมหลัก}2.2 การเริ่มต้นกำหนดปริมาณบางอย่างที่จะใช้
กระดานหมากรุกส่วนตัวกระดานหมากรุก; // แผงต่อสู้แผงเครื่องมือส่วนตัวแถบเครื่องมือ; // แถบเครื่องมือแผงปุ่มส่วนตัวสตาร์ทตัน // ตั้งปุ่มเริ่มปุ่มส่วนตัว backbutton; // ตั้งปุ่มเสียใจปุ่มส่วนตัว ExitButton; // ตั้งปุ่มออก
2.3 วิธีการก่อสร้างอินเตอร์เฟส (เฟรมเวิร์กเกม)
Public StartChessJFrame () {SettItle ("Standalone Goji"); // ตั้งชื่อกระดานหมากรุก = กระดานหมากรุกใหม่ (); // เริ่มต้นวัตถุแผงสร้างและเพิ่มเมนู MyItemListener lis = ใหม่ myItemListener () backbutton = ปุ่มใหม่ ("ตอบกลับ"); exitButton = ปุ่มใหม่ ("ออก"); // เริ่มต้น ToolBar.SetLayout (FlowLayout ใหม่ (flowlayout.left)); // ใช้ flowlayout เพื่อจัดวาง toolbar.add (backbutton); Toolbar.add (StartButton); Toolbar.add (ExitButton); // เพิ่มปุ่มสามปุ่มลงในแผงเครื่องมือเริ่มต้น BUTTON.ADDACTIONLISTENER (LIS); backbutton.addactionListener (lis); ExitButton.AddActionListener (lis); // ลงทะเบียนเหตุการณ์ปุ่มสามครั้งเพื่อฟังเหตุการณ์เพิ่ม (แถบเครื่องมือ, BorderLayout.south); // เลย์เอาต์แผงเครื่องมือไปทางทิศใต้ของอินเทอร์เฟซนั่นคือเพิ่ม (chessboard); // เพิ่มวัตถุแผง ขนาด}2.4 ปุ่มการใช้งานและการตรวจสอบ (วิธีการก่อสร้างภายใน)
MyItemListener LIS = ใหม่ myItemListener (); // เริ่มต้นคลาสภายในของปุ่มฟังเหตุการณ์ BUTTON TOLEBAR = NEW PANEL (); // อินสแตนซ์แถบเครื่องมือสตาร์ทตันแท่งเครื่องมือ = ปุ่มใหม่ ("รีสตาร์ท"); backbutton = ปุ่มใหม่ ("ตอบกลับ"); ExitButton = ปุ่มใหม่ ("Exit"); // เริ่มต้น ToolBar.SetLayout (FlowLayout ใหม่ (flowlayout.left)); // เลย์เอาต์ Toolbar.Add (backbutton); Toolbar.add (StartButton); Toolbar.add (ExitButton); // เพิ่มปุ่มสามปุ่มลงในแผงเครื่องมือเริ่มต้น BUTTON.ADDACTIONLISTENER (LIS); backbutton.addactionListener (lis); ExitButton.AddactionListener (LIS); // ลงทะเบียนเหตุการณ์ปุ่มสามครั้งเพื่อฟังเหตุการณ์2.5 การฟังเหตุการณ์ปุ่ม
คลาสส่วนตัว MyItemListener ใช้ ActionListener {โมฆะสาธารณะ ActionPerformed (ActionEvent E) {Object obj = E.getSource (); // รับแหล่งที่มาของเหตุการณ์ถ้า (obj == startbutton) {system.out.println ("เริ่มต้น ... "); } อื่นถ้า (obj == exitButton) {system.exit (0); // สิ้นสุดแอปพลิเคชัน} อื่นถ้า (obj == backbutton) {system.out.println ("กลับใจใหม่ ... "); -2.6 การใช้งานฟังก์ชั่นปุ่มรีสตาร์ท
โมฆะสาธารณะ RESTARTGAME () {// ล้างชิ้นหมากรุกสำหรับ (int i = 0; i <chesslist.length; i ++) chesslist [i] = null; /*กู้คืนค่าตัวแปรที่เกี่ยวข้องกับเกม*/ isback = true; gameover = false; // ไม่ว่าเกมจะจบลง chessCount = 0; // จำนวนชิ้นหมากรุกบนกระดานปัจจุบันคือการทาสีใหม่ (); -2.7 การใช้งานฟังก์ชั่นของปุ่มหมากรุก
โมฆะสาธารณะ goBack () {ถ้า (chessCount == 0) return; Chesslist [ChessCount-1] = NULL; Chesscount-; if (chessCount> 0) {xIndex = chesslist [chessCount-1] .getx (); Yindex = Chesslist [ChessCount-1] .gety (); } isback =! isback; ทาสีใหม่ (); -2.8 เมื่อกระดานหมากรุกมีขนาดใหญ่ขึ้นหรือเล็กลงตามต้องการหน้าต่างควรเปลี่ยนตาม
// Dimension: ภายในแผงหมากรุกระดับสาธารณะมิติสาธารณะ getPreferredSize () {ส่งคืนมิติใหม่ (มาร์จิ้น*2+grid_span*cols, มาร์จิ้น*2+grid_span*แถว); } pack (); // ขนาดปรับตัวภายในคลาส StartChessboard2.9 การกำหนดชิ้นหมากรุก
นำเข้า Java.awt.*; จุดระดับสาธารณะ {private int x; // x ค่าดัชนีของชิ้นหมากรุกในกระดานหมากรุกส่วนตัว int y; // y ค่าดัชนีของชิ้นส่วนหมากรุกในกระดานหมากรุกสีส่วนตัวสี; // สีเส้นผ่าศูนย์กลาง int สาธารณะคงที่ = 30; // เส้นผ่านศูนย์กลางจุดสาธารณะ (int x, int y, สีสี) this.y = y; this.color = color; } // รับค่าดัชนี X ของชิ้นส่วนหมากรุกในกระดานหมากรุกสาธารณะ int getx () {return x; } // รับค่าดัชนี y ของชิ้นส่วนหมากรุกในคณะกรรมการหมากรุกสาธารณะ int gety () {return y; } // รับหมากรุกสีสาธารณะสีสาธารณะ getColor () {กลับสี; - 3. การใช้งานรหัสชิ้นส่วนที่ใช้งานได้
3.1 การเริ่มต้นกำหนดปริมาณบางอย่างที่จะใช้
margin int คงที่สาธารณะ = 30; // การแต่งงานสาธารณะคงที่ int grid_span = 35; // ระยะห่างของกริดระยะห่างสาธารณะคงที่สาธารณะ = 18; // จำนวนของกระดานหมากรุกแถวสาธารณะคงที่ cols = 18; // จำนวนคอลัมน์กระดานหมากรุกจุดเริ่มต้นของแต่ละจุดเริ่มต้น Chess First Gameover = False; // เกมจบลงใน INT ChessCount; // จำนวนชิ้นหมากรุกบนกระดานหมากรุกปัจจุบัน Int XIndex, Yindex; // ดัชนีของชิ้นหมากรุกเพิ่งเล่น
3.2 วิธีการสร้างวัตถุกระดานหมากรุก
กระดานหมากรุกสาธารณะ () {setBackground (color.light_gray); // ตั้งค่าสีพื้นหลังเป็นสีเทา addmouselistener (นี่); // เพิ่มเหตุการณ์ผู้ฟัง addmousemotionListener (ใหม่ mouseemotionlistener () {// // x1 = (e.getx ()-มาร์จิ้น+grid_span/2)/grid_span; if (x1 <0 || x1> แถว || y1 <0 || y1> cols || gameover || findchess (x1, y1)) {// เกมสิ้นสุดลงและไม่สามารถลดลงได้ รูปร่างเริ่มต้น} else {setCursor (เคอร์เซอร์ใหม่ (Cursor.hand_cursor)); // ตั้งค่าเป็นรูปร่างมือ}} @Override โมฆะสาธารณะ mousedragged (MouseEvent E) {}}); -3.3 ตั้งค่าผู้ฟังเมาส์และทำให้มือเล็กลง (ภายในวิธีการก่อสร้าง)
addmousemotionListener (ใหม่ mousemotionListener () {// คลาสภายในไม่ระบุชื่อ @Override โมฆะสาธารณะ mousemoved (MouseEvent E) {int x1 = (e.getx ()-ระยะขอบ+grid_span/2)/grid_span; int y1 = เมาส์คลิกเข้าไปในดัชนีกริดถ้า (x1 <0 || x1> แถว || y1 <0 || y1> cols || gameover || findchess (x1, y1)) {// เกมสิ้นสุดลงและไม่สามารถทิ้งได้ เคอร์เซอร์ (Cursor.default_cursor)); // ตั้งค่าเป็นรูปร่างเริ่มต้น} else {setCursor (เคอร์เซอร์ใหม่ (Cursor.hand_cursor)); // ตั้งค่าเป็นรูปร่างมือ}} @Override โมฆะสาธารณะ mousedragged (MouseEvent E) {}})3.4 เหตุการณ์การกดเมาส์เมื่อคลิกกระดานหมากรุก
โมฆะสาธารณะ mousepressed (MouseEvent E) {// ถ้า (gameover) ถูกเรียกเมื่อปุ่มเมาส์ถูกกดบนส่วนประกอบ // เกมสิ้นสุดลงและไม่สามารถส่งคืนได้ String colorname = isback? "ดำ": "หมากรุกสีขาว"; xindex = (e.getx ()-มาร์จิ้น+grid_span/2)/grid_span; Yindex = (e.gety ()-มาร์จิ้น+grid_span/2)/grid_span; // แปลงตำแหน่งพิกัดของเมาส์คลิกเข้าไปในดัชนีกริดถ้า (xindex <0 || xindex> แถว || yindex <0 || yindex> cols) // ถ้า (FindChess (XINDEX, Yindex)) // ชิ้นส่วนหมากรุกมีอยู่แล้วที่ตำแหน่ง x, y ดังนั้นคุณจึงไม่สามารถส่งคืนได้ จุด CH = จุดใหม่ (XINDEX, YINDEX, ISBACK? COLOR.BLACK: COLOR.WHITE); Chesslist [ChessCount ++] = CH; repaint (); // แจ้งระบบให้ทาสีใหม่ถ้า (iswin ()) {string msg = string.format ("ขอแสดงความยินดี, %s win ~", colorname); joptionpane.ShowMessagedialog (นี่, ผงชูรส); gameover = true; } อื่นถ้า (chessCount == (cols+1)*(แถว+1)) {สตริง msg = string.format ("หมากรุกกลองค่อนข้างดีมาก ~"); joptionpane.ShowMessagedialog (นี่, ผงชูรส); gameover = true; } isback =! isback; -3.5 วาดกระดานหมากรุกชิ้นหมากรุกและกรอบสีแดง
โมฆะสาธารณะ PaintComponent (กราฟิก g) {super.paintComponent (g); // วาดกระดานหมากรุกสำหรับ (int i = 0; i <= rows; i ++) {// วาดเส้นแนวนอน G.Drawline (ระยะขอบ, margin+i*grid_span, margin+cols*grid_span, margin } สำหรับ (int i = 0; i <= cols; i ++) {// วาดเส้นตรง g.drawline (margin+i*grid_span, มาร์จิ้น, ระยะขอบ+i*grid_span, มาร์จิ้น+แถว*grid_span); }/*วาดชิ้นหมากรุก*/สำหรับ (int i = 0; i <chesscount; i ++) {int xpos = chesslist [i] .getx ()*grid_span+ระยะขอบ; G.SetColor (chesslist [i] .getColor ()); // ตั้งค่าสี G.Filloval (XPOS-point.Diameter/2, ypos-point.diameter/2, point.diameter, point.diameter); if (i == ChessCount-1) {G.SetColor (color.red); // ทำเครื่องหมายชิ้นสุดท้ายเป็นสีแดง g.drawRect (xpos-point.diameter/2, ypos-point.diameter/2, point.diameter, point.diameter); -3.6 ผู้พิพากษาชนะหรือสูญเสีย
/*ตัดสินว่าด้านใดที่ชนะ*/บูลีนส่วนตัว iswin () {int continueCount = 1; // จำนวนชิ้นหมากรุกต่อเนื่องสำหรับ (int x = xindex-1; x> = 0; x-) {// มองหาสี c = isback? color.black: color.white; if (getChess (x, yindex, c)! = null) {continueCount ++; } else break; } สำหรับ (int x = xindex+1; x <= rows; x ++) {// มองหาสี c = isback? color.black: color.white; if (getChess (x, yindex, c)! = null) {continueCount ++; } else break; } if (continueCount> = 5) {// ตัดสินจำนวนระเบียนมากกว่าหรือเท่ากับห้าซึ่งหมายความว่าด้านนี้ชนะกลับมาเป็นจริง } else continueCount = 1; // สำหรับ (int y = yindex-1; y> = 0; y-) {// ค้นหาในแนวตั้งกับสี c = isback? color.black: color.white; if (getChess (xindex, y, c)! = null) {continueCount ++; } else break; } สำหรับ (int y = yindex+1; y <= rows; y ++) {// ดูลงในสีแนวตั้งสี c = isback? color.black: color.white; if (getChess (xindex, y, c)! = null) {continueCount ++; } else break; } if (continueCount> = 5) {// ตัดสินจำนวนระเบียนมากกว่าหรือเท่ากับห้าซึ่งหมายความว่าด้านนี้ชนะกลับมาเป็นจริง } else continueCount = 1; // สำหรับ (int x = xindex+1, y = yindex-1; y> = 0 && x <= cols; x ++, y-) {// ดูที่สีด้านล่างขวา c = isback? color.black: color.white; if (getChess (x, y, c)! = null) {ContinueCount ++; } else break; } สำหรับ (int x = xindex-1, y = yindex+1; y <= แถว && x> = 0; x-, y ++) {// มองหาสี c = isback? color.black: color.white; if (getChess (x, y, c)! = null) {ContinueCount ++; } else break; } ถ้า (ContinueCount> = 5) {// ตัดสินจำนวนระเบียนมากกว่าหรือเท่ากับห้าซึ่งหมายความว่าด้านนี้ชนะ กลับมาจริง; } else continueCount = 1; // สำหรับ (int x = xindex-1, y = yindex-1; y> = 0 && x> = 0; x-, y-) {// มองหาสี c = isback? color.black: color.white; if (getChess (x, y, c)! = null) {ContinueCount ++; } else break; } สำหรับ (int x = xindex+1, y = yindex+1; y <= แถว && x <= cols; x ++, y ++) {// มองหาสี c = isback? color.black: color.white; if (getChess (x, y, c)! = null) {ContinueCount ++; } else break; } if (continueCount> = 5) {// ตัดสินจำนวนระเบียนมากกว่าหรือเท่ากับห้าซึ่งหมายความว่าด้านนี้ชนะกลับมาเป็นจริง } else continueCount = 1; กลับเท็จ; -3.7 กล่องข้อความที่เกี่ยวข้องปรากฏขึ้น (ภายในฟังก์ชั่นกดเมาส์)
if (iswin ()) {string msg = string.format ("ขอแสดงความยินดี, %s win ~", colorname); joptionpane.ShowMessagedialog (นี่, ผงชูรส); gameover = true; } อื่นถ้า (chessCount == (cols+1)*(แถว+1)) // track {String msg = string.format ("หมากรุกกลองค่อนข้างดีเยี่ยมมาก ~"); joptionpane.ShowMessagedialog (นี่, ผงชูรส); gameover = true; -3.8 ฟังก์ชั่นที่ใช้ข้างต้นเพื่อตรวจสอบว่ามีชิ้นหมากรุกในบางจุด
Boolean Private Boolean FindChess (int x, int y) {สำหรับ (จุด C: chesslist) {ถ้า (c! = null && c.getx () == x && c.gety () == y) ส่งคืนจริง; } return false; -3.9 เนื่องจากคลาสกระดานหมากรุกนี้ใช้อินเตอร์เฟสการฟังเมาส์ Monselistener วิธีการทั้งหมดในอินเทอร์เฟซจำเป็นต้องเขียนใหม่ วิธีอื่น ๆ มีดังนี้
@Override โมฆะสาธารณะ mouseclicked (MouseEvent E) {// เรียกว่าเมื่อปุ่มเมาส์ถูกคลิก (กดและปล่อยออกมา) บนส่วนประกอบ} @Override โมฆะสาธารณะ mouserleased (MouseEvent E) {/// CALL เมื่อปุ่มเมาส์ถูกปล่อยออกมา @Override โมฆะสาธารณะ mouseexited (MouseEvent E) {// เรียกว่าเมื่อเมาส์ออกจากส่วนประกอบ}4. ผลการดำเนินงาน
V. สรุปรหัส
เกมดังกล่าวมีสามคลาสทั้งหมดคืออินเตอร์เฟส startChessJFrame หนึ่งในนั้นคือกระดานหมากรุกระดับหมากรุกและอีกอันคือจุดคลาสหมากรุก
5.1StartChessJFrame คลาส
Package Chess.lcc.com; นำเข้า Javax.swing.*; นำเข้า java.awt.event.*; นำเข้า Java.awt.*; /** เฟรมเวิร์กหลักของ Gozi, โปรแกรมเริ่มต้นโปรแกรม*/คลาสสาธารณะ startChessJFrame ขยาย JFrame {กระดานหมากรุกส่วนตัว; // การต่อสู้แผงแผงส่วนตัวแถบเครื่องมือส่วนตัว // แถบเครื่องมือปุ่มส่วนตัวปุ่มเริ่มต้น; // ตั้งปุ่มเริ่มปุ่ม goji "); // ตั้งค่ากระดานหมากรุกชื่อ = New Chessboard (); // เริ่มต้นวัตถุพาเนลสร้างและเพิ่มเมนู MyItemListener LIS = ใหม่ myItemListener (); // เริ่มต้นปุ่มเหตุการณ์การรับฟังการเรียน backbutton = ปุ่มใหม่ ("ตอบกลับ"); exitButton = ปุ่มใหม่ ("ออก"); // เริ่มต้น ToolBar.SetLayout (FlowLayout ใหม่ (flowlayout.left)); // ใช้ flowlayout เพื่อจัดวาง toolbar.add (backbutton); Toolbar.add (StartButton); Toolbar.add (ExitButton); // เพิ่มปุ่มสามปุ่มลงในแผงเครื่องมือเริ่มต้น BUTTON.ADDACTIONLISTENER (LIS); backbutton.addactionListener (lis); ExitButton.AddActionListener (lis); // ลงทะเบียนเหตุการณ์ปุ่มสามครั้งเพื่อฟังเหตุการณ์เพิ่ม (แถบเครื่องมือ, BorderLayout.south); // เลย์เอาต์แผงเครื่องมือไปทางทิศใต้ของอินเทอร์เฟซนั่นคือเพิ่ม (บอร์ด); // เพิ่มวัตถุแผง ขนาด} คลาสส่วนตัว MyItemListener ใช้ ActionListener {โมฆะสาธารณะ ActionPerformed (ActionEvent E) {Object OBJ = E.getSource (); // รับแหล่งที่มาของเหตุการณ์ถ้า (obj == startButton) } อื่นถ้า (obj == exitButton) {system.exit (0); // สิ้นสุดแอปพลิเคชัน} อื่นถ้า (obj == backbutton) {system.out.println ("ตอบกลับ ... "); // ตอบกลับ Chessboard.goback (); }}} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {startChessJFrame f = ใหม่ startChessJFrame (); // สร้างเฟรมหลัก f.setVisible (จริง); // แสดงเฟรมหลัก}}}}}} 5.2chessboard class
Package Chess.lcc.com; นำเข้า Javax.swing.*; นำเข้า Java.awt.*; นำเข้า java.awt.event.mouselistener; นำเข้า java.awt.event.mousemotionlistener; นำเข้า java.awt.event.mousevent; /*กลุ่ม Chess-Chess-Chessboard*/กระดานหมากรุกระดับสาธารณะขยาย JPanel ใช้ Mouselistener {margin int คงที่สาธารณะ = 30; // การแต่งงานสาธารณะคงที่ int grid_span = 35; // grid ระยะห่างสาธารณะ int rows = 15; จุด [(แถว+1)*(cols+1)]; // เริ่มต้นแต่ละองค์ประกอบอาร์เรย์เป็น null boolean isback = true; // การเริ่มต้นเริ่มต้นคือหมากรุกสีดำเกมแรก gameover = false; // คือเกมจบลงในตัวหมากรุก Setbackground (color.light_gray); // ตั้งค่าสีพื้นหลังเป็น addmouselistener สีเหลือง (นี่); // เพิ่มเหตุการณ์ผู้ฟัง addmousemotionListener (ใหม่ mousemotionListener () {// ชั้นเรียนภายใน @Override) y1 = (e.gety ()-มาร์จิ้น+grid_span/2)/grid_span; // แปลงตำแหน่งพิกัดของเมาส์คลิกเข้าไปในดัชนีกริดถ้า (x1 <0 || x1> แถว || y1 <0 || y1> cols || gameover || findchess (x1, y1) ลดลง; มีชิ้นส่วนหมากรุกในตำแหน่ง x และ y ดังนั้นคุณไม่สามารถเป็น setcursor (เคอร์เซอร์ใหม่ (เคอร์เซอร์. default_cursor)); // ตั้งค่าเป็นรูปร่างเริ่มต้น} อื่น {setcursor (เคอร์เซอร์ใหม่ (เคอร์เซอร์ }/*วาด*/โมฆะสาธารณะ PaintComponent (กราฟิก g) {super.paintComponent (g); // วาดกระดานหมากรุกสำหรับ (int i = 0; i <= rows; i ++) {// วาดเส้นแนวนอน g.drawline (ระยะขอบ, ระยะขอบ+i*grid_span, margin } สำหรับ (int i = 0; i <= cols; i ++) {// วาดเส้นตรง g.drawline (มาร์จิ้น+i*grid_span, มาร์จิ้น, ระยะขอบ+i*grid_span, มาร์จิ้น+แถว*grid_span); }/*วาดชิ้นหมากรุก*/สำหรับ (int i = 0; i <chesscount; i ++) {int xpos = chesslist [i] .getx ()*grid_span+margin; // x พิกัดของกริดข้าม ypos = chesslist [i] G.SetColor (chesslist [i] .getColor ()); // ตั้งค่าสี G.Filloval (XPOS-point.Diameter/2, ypos-point.diameter/2, point.diameter, point.diameter); if (i == chessCount-1) {g.setColor (color.red); // ลงทะเบียนชิ้นสุดท้ายเป็นสีแดง g.drawRect (xpos-point.diameter/2, ypos-point.diameter/2, point.diameter, point.diameter); }}} @Override โมฆะสาธารณะ mousepressed (MouseEvent E) {// ถ้า (gameover) ถูกเรียกเมื่อปุ่มเมาส์ถูกกดบนส่วนประกอบ // เกมสิ้นสุดลงคุณไม่สามารถส่งคืนได้ String colorname = isback? "ดำ": "หมากรุกสีขาว"; xindex = (e.getx ()-มาร์จิ้น+grid_span/2)/grid_span; Yindex = (e.gety ()-มาร์จิ้น+grid_span/2)/grid_span; // แปลงตำแหน่งพิกัดของเมาส์คลิกเข้าไปในดัชนีกริดถ้า (xindex <0 || xindex> แถว || yindex <0 || yindex> cols) // ถ้า (FindChess (XINDEX, Yindex)) // ชิ้นส่วนหมากรุกมีอยู่แล้วที่ตำแหน่ง x, y ดังนั้นคุณจึงไม่สามารถส่งคืนได้ จุด CH = จุดใหม่ (XINDEX, YINDEX, ISBACK? COLOR.BLACK: COLOR.WHITE); Chesslist [ChessCount ++] = CH; repaint (); // แจ้งระบบให้ทาสีใหม่ถ้า (iswin ()) {string msg = string.format ("ขอแสดงความยินดี, %s win ~", colorname); joptionpane.ShowMessagedialog (นี่, ผงชูรส); gameover = true; } อื่นถ้า (chessCount == (cols+1)*(แถว+1)) {สตริง msg = string.format ("หมากรุกกลองค่อนข้างดีมาก ~"); joptionpane.ShowMessagedialog (นี่, ผงชูรส); gameover = true; } isback =! isback; } @Override โมฆะสาธารณะ mouseclicked (MouseEvent E) {// เรียกว่าเมื่อปุ่มเมาส์ถูกคลิก (กดและปล่อยออกมา) บนส่วนประกอบ} @Override โมฆะสาธารณะ mouserleased (MouseEvent E) {//// ส่วนประกอบ} @Override โมฆะสาธารณะ mousexited (MouseEvent E) {// เรียกว่าเมื่อเมาส์ออกจากส่วนประกอบ} boolean private boolean findChess (int x, int y) {สำหรับ (จุด C: chesslist) {ถ้า (c! = null && c.getx () == x && } return false; }/*ตัดสินว่าด้านใดที่ชนะ*/บูลีนส่วนตัว iswin () {int continueCount = 1; // จำนวนชิ้นหมากรุกต่อเนื่องสำหรับ (int x = xindex-1; x> = 0; x-) {// มองหาสี c = isback? color.black: color.white; if (getChess (x, yindex, c)! = null) {continueCount ++; } else break; } สำหรับ (int x = xindex+1; x <= rows; x ++) {// มองหาสี c = isback? color.black: color.white; if (getChess (x, yindex, c)! = null) {continueCount ++; } else break; } if (continueCount> = 5) {// ตัดสินจำนวนระเบียนมากกว่าหรือเท่ากับห้าซึ่งหมายความว่าด้านนี้ชนะกลับมาเป็นจริง } else continueCount = 1; // สำหรับ (int y = yindex-1; y> = 0; y-) {// ค้นหาในแนวตั้งกับสี c = isback? color.black: color.white; if (getChess (xindex, y, c)! = null) {continueCount ++; } else break; } สำหรับ (int y = yindex+1; y <= rows; y ++) {// ดูลงในสีแนวตั้งสี c = isback? color.black: color.white; if (getChess (xindex, y, c)! = null) {continueCount ++; } else break; } if (continueCount> = 5) {// ตัดสินจำนวนระเบียนมากกว่าหรือเท่ากับห้าซึ่งหมายความว่าด้านนี้ชนะกลับมาเป็นจริง } else continueCount = 1; // สำหรับ (int x = xindex+1, y = yindex-1; y> = 0 && x <= cols; x ++, y-) {// ดูที่สีด้านล่างขวา c = isback? color.black: color.white; if (getChess (x, y, c)! = null) {ContinueCount ++; } else break; } สำหรับ (int x = xindex-1, y = yindex+1; y <= แถว && x> = 0; x-, y ++) {// มองหาสี c = isback? color.black: color.white; if (getChess (x, y, c)! = null) {ContinueCount ++; } else break; } ถ้า (ContinueCount> = 5) {// ตัดสินจำนวนระเบียนมากกว่าหรือเท่ากับห้าซึ่งหมายความว่าด้านนี้ชนะ กลับมาจริง; } else continueCount = 1; // สำหรับ (int x = xindex-1, y = yindex-1; y> = 0 && x> = 0; x-, y-) {// มองหาสี c = isback? color.black: color.white; if (getChess (x, y, c)! = null) {ContinueCount ++; } else break; } สำหรับ (int x = xindex+1, y = yindex+1; y <= แถว && x <= cols; x ++, y ++) {// มองหาสี c = isback? color.black: color.white; if (getChess (x, y, c)! = null) {ContinueCount ++; } else break; } if (continueCount> = 5) {// ตัดสินว่าจำนวนบันทึกมากกว่าหรือเท่ากับห้านั่นหมายความว่าด้านนี้ชนะกลับมาเป็นจริง } else continueCount = 1; กลับเท็จ; } จุดส่วนตัว getChess (int xindex, int yindex, สีสี) {สำหรับ (จุด C: chesslist) {ถ้า (c! = null && c.getx () == xindex && c.gety () == yindex && c.getColor () == สี) กลับ c; } return null; } โมฆะสาธารณะ retartGame () {// ล้างชิ้นหมากรุกสำหรับ (int i = 0; i <chesslist.length; i ++) chesslist [i] = null; /*กู้คืนค่าตัวแปรที่เกี่ยวข้องกับเกม*/ isback = true; gameover = false; // ไม่ว่าเกมจะจบลง chessCount = 0; // จำนวนชิ้นหมากรุกบนกระดานปัจจุบันคือการทาสีใหม่ (); } โมฆะสาธารณะ goBack () {ถ้า (chessCount == 0) return; Chesslist [ChessCount-1] = NULL; Chesscount-; if (chessCount> 0) {xIndex = chesslist [chessCount-1] .getx (); Yindex = Chesslist [ChessCount-1] .gety (); } isback =! isback; ทาสีใหม่ (); } // Dimension: Rectangle Public Dimension getPreferredSize () {ส่งคืนมิติใหม่ (มาร์จิ้น*2+grid_span*cols, มาร์จิ้น*2+grid_span*แถว); - คลาส 5.3point
Package Chess.lcc.com; นำเข้า Java.awt.*; จุดระดับสาธารณะ {private int x; // x ค่าดัชนีของชิ้นหมากรุกในกระดานหมากรุกส่วนตัว int y; // y ค่าดัชนีของชิ้นส่วนหมากรุกในกระดานหมากรุกสีส่วนตัวสี; // สีเส้นผ่าศูนย์กลาง int สาธารณะคงที่ = 30; // เส้นผ่านศูนย์กลางจุดสาธารณะ (int x, int y, สีสี) this.y = y; this.color = color; } // รับค่าดัชนี X ของชิ้นส่วนหมากรุกในกระดานหมากรุกสาธารณะ int getx () {return x; } // รับค่าดัชนี y ของชิ้นส่วนหมากรุกในคณะกรรมการหมากรุกสาธารณะ int gety () {return y; } // รับหมากรุกสีสาธารณะสีสาธารณะ getColor () {กลับสี; -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น