Java ใช้มินิเกมแบ็คแกมมอน
package Gomoku; import java.awt.Toolkit; import javax.swing.JFrame; คลาสสาธารณะ GomokuFrame ขยาย JFrame { //กำหนดแผงควบคุม OperatorPane op=null; public GomokuFrame() { //ตั้งชื่อ this.setTitle("Gomoku " ); //กำหนดขนาดหน้าต่าง this.setSize(510,510); //กำหนดตำแหน่งหน้าต่าง//รับขนาดหน้าจอคอมพิวเตอร์ int computer_width=Toolkit.getDefaultToolkit().getScreenSize().width; int computer_height=Toolkit.getDefaultToolkit().getScreenSize().height; System.out.println("ความกว้างของหน้าจอคอมพิวเตอร์:/n"+computer_width+"/ ความสูงของหน้าจอคอมพิวเตอร์:/n"+computer_height); //Center this.setLocation((computer_width-510)/2, (computer_height-510)/2); // สร้างอินสแตนซ์ม่าน op=new OperatorPane(); // นำเข้าม่าน this.add(op); เพิ่มการฟังเมาส์ this.addMouseListener(op); //ตั้งค่าหน้าต่างแสดง this.setVisible(true); //ตั้งค่าการปิดหน้าต่างตามปกติ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //ดำเนินการทดสอบ public static void main(String[] args) { new GomokuFrame() }
แพ็คเกจ Gomoku; นำเข้า java.awt.Color; นำเข้า java.awt.Font; นำเข้า java.awt.Graphics; นำเข้า java.awt.Image; นำเข้า java.awt.event.MouseEvent; นำเข้า java.awt.event.MouseListener; java.awt.image.BufferedImage;นำเข้า java.awt.image.BufferedImageFilter; javax.swing.ImageIcon;import javax.swing.JOptionPane;import javax.swing.JPanel; //กำหนดจำนวนแถวของ ตารางหมากรุก int boardrows=18; //กำหนดจำนวนคอลัมน์ของตารางกระดานหมากรุก int boardcols=18; //กำหนดขนาดของตารางหมากรุก int boardssize=20; //บันทึกพิกัดของตัวหมากรุก int x=0,y=0; //บันทึกพิกัดของตัวหมากรุกทั้งหมดที่เล่นก่อนหน้า//เนื้อหาข้อมูล 0: หมายความว่าไม่มีตัวหมากรุกในส่วนนี้ จุด 1: หมายความว่าจุดนี้เป็นหมากสีดำ 2: ระบุว่าจุดนี้เป็นหมากสีขาว int allchess[][]=new int [19][19]; //ทำเครื่องหมายว่าขั้นตอนต่อไปเป็นสีดำหรือไม่ หรือบูลีนสีขาว isBlack=true; // ตัดสินว่าเกมสามารถดำเนินการต่อบูลีน canPlay=true ; //บันทึกข้อมูลที่แสดง String message = "สีดำไปก่อน"; // ประหยัดเวลาสูงสุด (วินาที) int maxTime = 0; // คลาสเธรดสำหรับการนับถอยหลัง เธรด t = เธรดใหม่ (สิ่งนี้); ด้วย White int blackTime = 0; int whiteTime = 0; // บันทึกข้อมูลการแสดงผลของเวลาที่เหลืออยู่ของทั้งสองฝ่าย String blackMessage = "Unlimited"; String whiteMessage = "Unlimited"; @SuppressWarnings("deprecation") OperatorPane() { t.start(); t.suspend(); imageBackground=new ImageIcon("image/พื้นหลัง.jpg").getImage(); } โมฆะสาธารณะ (กราฟิก g) { //เทคโนโลยีบัฟเฟอร์สองเท่า BufferedImage b1=ใหม่ BufferedImage(495,475,BufferedImage.TYPE_INT_ARGB); กราฟิก g2=b1.createGraphics(); // วาดภาพพื้นหลัง g2.drawImage(imageBackground, 0, 0,495,475,null); // วาดเส้นตารางหมากรุก Color c=g2.getColor( ); g2.setColor(สี.สีดำ); i=0;i<=boardrows;i++) { g2.drawLine(10,50+boardsize*i,10+boardsize*boardrows,50+boardsize*i); } สำหรับ(int i=0;i<=boardcols; i++) { g2.drawLine(10+ขนาดบอร์ด*i,50,10+ขนาดบอร์ด*i,50+ขนาดบอร์ด*คอลัมน์); //วาดตำแหน่งสามในสาม g2.fillOval(67, 107, 6, 6); g2.fillOval(67, 347, 6, 6); g2.fillOval(307, 107, 6, 6); ( 307, 347, 6, 6); // วาดคะแนนเพิ่มเติม g2.fillOval(67, 227, 6, 6); g2.fillOval(307, 227, 6, 6); g2.fillOval(187, 107, 6, 6); g2.fillOval(187, 347, 6, 6); fillOval(187, 227, 6, 6); //วาดข้อความพร้อมท์/*แบบอักษร f=new Font("黑体", Font.BOLD, 24); g.setFont(f);*/ g2.setFont(แบบอักษรใหม่("黑体", Font.BOLD, 20)); g2.setColor(Color.BLACK); g2.drawString("ข้อมูลเกม:"+ข้อความ, 130, 40); g2.setFont(แบบอักษรใหม่("宋体", Font.ITALIC, 15)); g2.drawString("เวลาสีดำ:"+blackMessage,25, 445); g2.drawString("เวลาสีขาว:"+whiteMessage,245, 445); //วาดตัวหมากรุกทั้งหมดสำหรับ(int i= 0 ;i<=boardrows;i++) { for(int j=0;j<=boardcols;j++) { //เก็บหมากรุกสีดำ if(allchess[i][j]==1) { int tempX=i*20-10; int tempY=j*20+30; //วาดสีดำ g2.setColor(Color.BLACK); g2.fillOval(tempX+12, tempY+13, 15, 15) ; //จัดเก็บหมากรุกสีขาว if(allchess[i][j]==2) { int tempX=i*20-10; tempY=j*20+30; //วาดชิ้นสีขาว g2.setColor(Color.BLACK); g2.drawOval(tempX+12, tempY+13, 15, 15); g2.setColor(Color.WHITE); .fillOval(tempX+12, tempY+13, 15, 15); } } } g2.setColor(c); g.drawImage(b1,0,0,this); } บูลีนส่วนตัว checkWin() { boolean flag=false; int color = allchess[x][y]; เหมือนกัน จำนวนหมากที่เชื่อมต่อกัน int count1=1; int count2=1; int count4=1; // ตรวจสอบว่ามีหมาก 5 ชิ้นเชื่อมต่อกันในแนวนอนหรือไม่ ลักษณะจะเหมือนกัน นั่นคือค่า y ใน allChess[x][y] เหมือนกัน // ใช้ลูปเพื่อตรวจสอบว่าตัวหมากรุกเชื่อมต่อกันหรือไม่ int i = 1; while (color == allchess[x+i][y ]) { count1++; i++; } / /รีเซ็ต i ค่า i = 1; while (color == allchess[xi][y]) { count1++; //ตัดสินทิศทางแนวตั้ง นั่นคือค่า x ใน allChess[x][y] เหมือนกัน int j = 1; while (color == allchess[x][y+j]) { count2++; ; } //รีเซ็ตค่า j j = 1; while (color == allchess[x][yj]) { count2++; j++; } if(count2>= 5) { flag = true; "/" int m1=1; int n1=1; while (สี == allchess[x+m1]) { count3++; m1=1; -m1][y-n1]) { count3++; n1++; } if(count3>= 5) { flag = true; } // ตัดสินทิศทางเฉียง "/" int m2=1; int n2=1; while (สี == allchess[x+m2]) { count4++; m2++; } n2=1; x-m2][y+n2]) { count4++; m2++; } if(count4>= 5) { flag = true; } */ int นับ; // การตัดสินแนวนอน count = this.checkCount (1, 0, color); if (count> = 5) { flag = true; } else { // การตัดสินแนวตั้ง = this.checkCount (0, 1, color); (นับ>=5) { flag = true; } else { //Slant "/" count=this.checkCount(1, 1, color); if(count>=5) { flag = true; เอียง "/" count=this.checkCount(1, -1, color); if(count>=5) { flag = true; } } } กลับค่าสถานะ; } ส่วนตัว int checkCount(int xChange,int yChange,int color) { int count =1; int tempX=xChange; int tempY=yChange; while (color==allchess[x+xChange][y+yChange]) { นับ++; if(xChange!=0) { xChange++; } if(yChange!=0) { if(yChange--; } else { yChange++; } } //รีเซ็ต xChange=tempX; (สี==allchess[x-xChange][y-yChange]) { count++; if(xChange!=0) { xChange++; } if(yChange!=0) { if(yChange<0) { yChange--; } else { yChange++; } } โมฆะสาธารณะ mouseClicked(MouseEvent e) { System.out.println("x:" +e.getX()+"y:"+e.getY()); x=e.getX(); if(x>=10&&x<=(10+boardsize*boardrows+20)&&y>=50&&y<=(50+boardsize*boardcols+40)) { //System.out.println("ประเด็นอยู่ที่บอร์ด "); ==0) { if(isBlack==true) { allchess[x][y]=1; isBlack=false; message="White's turn"; } else { allchess[x][y]=2; isBlack =จริง; message="Black's Turn"; } // ตรวจสอบว่าตัวหมากรุกนี้เชื่อมต่อกับตัวหมากรุกอื่น ๆ ในการเชื่อมต่อแบบ 5 ตัวหรือไม่ นั่นคือ บูลีน winFlag=this.checkWin(); จริง) { JOptionPane.showMessageDialog (นี่ "จบเกม!"+ (allchess[x][y]==1?"Black:"White")+"Win"); canPlay=false; JOptionPane.showMessageDialog(นี่คือ "มีตัวหมากรุกอยู่ที่ตำแหน่งปัจจุบันแล้ว กรุณาวางใหม่อีกครั้ง!"); } } this.repaint(); } //คลิกปุ่มเริ่มเกม //เริ่มเกมใหม่ถ้า( e.getX() >=400&&e.getX()<=470&&e.getY()>=80&&e.getY()<=110) { int result=JOptionPane.showConfirmDialog(นี่คือ "การตั้งค่าเสร็จสมบูรณ์ คุณต้องการรีสตาร์ทเกมหรือไม่?"); if(result==0) { //รีสตาร์ท ข้อมูลทั้งหมดในอาร์เรย์ allchess[] จะเป็น 0 // ล้างกระดานหมากรุกสำหรับ (int i = 0; i < 19; i++) { for (int j = 0; j < 19; j++) { allchess[i][j] = 0; // อีกวิธีหนึ่ง allChess = new int[19][19]; blackTime = maxTime; * 60) + ″ + (maxTime - maxTime / 60 * 60); whiteMessage = maxTime / 3600 + ″ + (maxTime / 60 - maxTime / 3600 * 60) + /// + (maxTime - maxTime / 60 * 60); t.resume(); } else { blackMessage = "ไม่จำกัด"; whiteMessage = "ไม่จำกัด"; "ดำไปก่อน"; isBlack = true; this.canPlay = true; //คลิกปุ่มตั้งค่าเกม if(e.getX()>=400&&e.getX()<=470&&e.getY()>=130&&e.getY()<=160) { String input = JOptionPane .showInputDialog("Please enter เกม เวลาสูงสุด (หน่วย: นาที) ถ้าคุณป้อน 0 หมายความว่าไม่มีการจำกัดเวลา: "); ลอง { maxTime = Integer.parseInt(input) * 60; if (maxTime < 0) { JOptionPane.showMessageDialog(นี่คือ "โปรดป้อนข้อมูลที่ถูกต้อง ไม่อนุญาตให้ใช้ตัวเลขติดลบ!"); } if (maxTime == 0) { int result = JOptionPane.showConfirmDialog(นี่คือ "การตั้งค่า เสร็จสิ้น รีสตาร์ทเกม?"); if (result == 0) { for (int i = 0; i < 19; i++) { for (int j = 0; j < 19; j++) { allchess[i][j] = 0; } } // allChess = new int[19][19]; blackTime = maxTime; whiteTime = maxTime; blackMessage = "ไม่มีขีดจำกัด"; whiteMessage = "ไม่มีขีดจำกัด"; this.canPlay = true; 0) { int result = JOptionPane.showConfirmDialog(นี่ "การตั้งค่าเสร็จสมบูรณ์ คุณต้องการรีสตาร์ทเกมหรือไม่"); if (result == 0) { for (int i = 0; i < 19; i++) { for (int j = 0; j < 19; j++) { allchess[i][j] = 0; } } // อีกวิธีหนึ่ง allChess = new int[19][19]; message = "สีดำไปก่อน"; isBlack = true; blackTime = maxTime; ) + /// + (maxTime - maxTime / 60 * 60); whiteMessage = maxTime / 3600 + /// + (maxTime / 60 - maxTime / 3600 * 60) + (maxTime - maxTime / 60 * 60); this.canPlay = true; this.repaint(); } } } catch (NumberFormatException e1) { / / TODO catch block ที่สร้างขึ้นอัตโนมัติ JOptionPane.showMessageDialog(นี่คือ "กรุณาป้อนข้อมูลให้ถูกต้อง!"); //คลิกปุ่มคำอธิบายเกม if(e.getX()>=400&&e.getX()<=470&&e.getY()>=180&&e.getY()<=210) { JOptionPane.showMessageDialog(this, "นี่คือ โปรแกรมเกมแบ็คแกมมอน ฝ่ายขาวดำผลัดกันเล่นหมากรุก เมื่อฝ่ายหนึ่งถึงห้าหมากติดต่อกัน เกมจะจบลง "); } //คลิกปุ่มยอมรับความพ่ายแพ้ if(e.getX()>=400&&e.getX()<=470&&e.getY()>=280&&e.getY()<=310) { int result=JOptionPane.showConfirmDialog (นี่ ,"คุณแน่ใจหรือว่าต้องการยอมรับความพ่ายแพ้?"); if (result == 0) { if (isBlack) { JOptionPane.showMessageDialog(นี่คือ "แบล็กยอมแพ้แล้ว!" } canPlay = false; //คลิกปุ่มเกี่ยวกับ if(e.getX()>=400&&e.getX()<=470&&e.getY()>=330&&e.getY()<=360) { JOptionPane.showMessageDialog(this,"เกมนี้มีให้) โดย Nanmu ผลิตโดยสตูดิโอ หากคุณมีคำถามที่เกี่ยวข้อง โปรดไปที่ www.yiyiinformation.com"); } //คลิกปุ่มออก if(e.getX()>=400&&e.getX()<=470&&e.getY()>=380&&e.getY()<=410) { JOptionPane.showMessageDialog(this, "Game Over") ; System.exit (0); } } //************************// @Override โมฆะสาธารณะ mouseEntered (MouseEvent arg0) { // TODO stub เมธอดที่สร้างอัตโนมัติ } @แทนที่ public void mouseExited(MouseEvent arg0) { // TODO stub เมธอดที่สร้างอัตโนมัติ } @Override public void mousePressed(MouseEvent arg0) { // TODO stub เมธอดที่สร้างขึ้นอัตโนมัติ } @แทนที่ public void mouseReleased (MouseEvent arg0) { // TODO stub วิธีการสร้างอัตโนมัติ } @Override โมฆะสาธารณะ run() { if (maxTime > 0) { while (true) { if (isBlack) { blackTime--; if (blackTime == 0) { JOptionPane.showMessageDialog(นี่ "สีดำหมดเวลาแล้ว เกมจบลงแล้ว! "); } } else { whiteTime--; if (whiteTime == 0) { JOptionPane.showMessageDialog(นี่ "สีขาวหมดเวลา เกมจะจบลง!"); } } blackMessage = blackTime / 3600 + ซิลิโคน + (blackTime / 60 - blackTime / 3600 * 60) + ซิลิโคน + (blackTime - blackTime / 60 * 60); whiteMessage = whiteTime / 3600 + marin + (whiteTime / 60 - whiteTime / 3600 * 60) + /// + (whiteTime - whiteTime / 60 * 60); this.repaint(); ลอง { Thread.sleep(1000); } catch (InterruptedException e) { // TODO catch block ที่สร้างขึ้นโดยอัตโนมัติ e.printStackTrace(); } System.out.println(blackTime + " -- " + ไวท์ไทม์);
ภาพสาธิต:
ข้างต้นคือเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคนในการเรียนรู้ Java อย่างเชี่ยวชาญ