[Java] java实现五子棋 →→→→→进入此内容的聊天室

来自 , 2019-06-25, 写在 Java, 查看 109 次.
URL http://www.code666.cn/view/d10ec7c1
  1. import java.awt.Color;
  2. import java.awt.Font;
  3. import java.awt.Graphics;
  4. import java.awt.Toolkit;
  5. import java.awt.event.MouseEvent;
  6. import java.awt.event.MouseListener;
  7.  
  8. import javax.swing.JFrame;
  9. import javax.swing.JOptionPane;
  10.  
  11. public class FiveChessFrame extends JFrame implements MouseListener {
  12.  
  13.         int width = Toolkit.getDefaultToolkit().getScreenSize().width;//屏幕宽度
  14.         int height = Toolkit.getDefaultToolkit().getScreenSize().height;//屏幕高度
  15.         int[][] allChess = new int[19][19];//用来保存全部棋子
  16.         boolean canPlay = true;//判断游戏是否能继续
  17.         int x = 0;//棋子的坐标
  18.         int y = 0;
  19.         boolean isBlack = true;//判断当前棋子的颜色
  20.  
  21.         //对窗口进行初始化
  22.         public FiveChessFrame() {
  23.                 setTitle("五子棋");
  24.                 setSize(500, 500);
  25.                 setLocation((width - 500) / 2, (height - 500) / 2);
  26.                 setResizable(false);
  27.                 addMouseListener(this);
  28.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  29.                 setVisible(true);
  30.         }
  31.  
  32.         //画五子棋
  33.         public void paint(Graphics g) {
  34.                 g.setFont(new Font("黑体", Font.BOLD, 20));
  35.                 g.drawString("游戏信息", 120, 60);
  36.                 g.setFont(new Font("宋体", Font.BOLD, 12));
  37.                 g.drawString("黑方时间", 60, 480);
  38.                 g.drawString("白方时间", 260, 480);
  39.  
  40.                 //画棋盘
  41.                 //画19条横线
  42.                 int y_index = 0;
  43.                 for (int i = 0; i < 19; i++) {
  44.                         g.drawLine(12, 73 + y_index, 372, 73 + y_index);
  45.                         y_index += 20;
  46.                 }
  47.  
  48.                 //画19条纵线
  49.                 int x_index = 0;
  50.                 for (int i = 0; i < 19; i++) {
  51.                         g.drawLine(12 + x_index, 73, 12 + x_index, 433);
  52.                         x_index += 20;
  53.                 }
  54.  
  55.                 //画四个点
  56.                 g.fillOval(70, 131, 4, 4);
  57.                 g.fillOval(310, 131, 4, 4);
  58.                 g.fillOval(70, 371, 4, 4);
  59.                 g.fillOval(310, 371, 4, 4);
  60.  
  61.                 //画全部棋子
  62.                 for (int i = 0; i < 19; i++) {
  63.                         for (int j = 0; j < 19; j++) {
  64.                                 if (this.allChess[i][j] == 1) {
  65.                                         //画黑子
  66.                                         int tempX = i * 20 + 12;
  67.                                         int tempY = j * 20 + 73;
  68.                                         g.fillOval(tempX - 7, tempY - 7, 14, 14);
  69.                                 }
  70.                                 if (this.allChess[i][j] == 2) {
  71.                                         //画白子
  72.                                         int tempX = i * 20 + 12;
  73.                                         int tempY = j * 20 + 73;
  74.                                         g.setColor(Color.WHITE);
  75.                                         g.fillOval(tempX - 7, tempY - 7, 14, 14);
  76.                                         g.setColor(Color.BLACK);
  77.                                         g.drawOval(tempX - 7, tempY - 7, 14, 14);
  78.                                 }
  79.                         }
  80.                 }
  81.         }
  82.  
  83.         @Override
  84.         public void mouseClicked(MouseEvent e) {
  85.                 // TODO Auto-generated method stub
  86.  
  87.         }
  88.  
  89.         @Override
  90.         public void mousePressed(MouseEvent e) {
  91.                 // TODO Auto-generated method stub
  92.                 if (canPlay == false) {
  93.                         return;
  94.                 }
  95.                 System.out.println(e.getX() + "---" + e.getY());
  96.                 x = e.getX();
  97.                 y = e.getY();
  98.                 if (x >= 12 && x <= 372 && y >= 73 && y < 433) {
  99.                         x = (x - 12) / 19;
  100.                         y = (y - 73) / 19;
  101.                         if (allChess[x][y] == 0) {
  102.                                 if (this.isBlack == true) {
  103.                                         allChess[x][y] = 1;
  104.                                         isBlack = false;
  105.                                 } else {
  106.                                         allChess[x][y] = 2;
  107.                                         isBlack = true;
  108.                                 }
  109.                                 //判断这个棋子是否和其他棋子连成5个
  110.                                 boolean winFlag = this.Check_Win();
  111.                                 if (winFlag) {
  112.                                         JOptionPane.showMessageDialog(this, "游戏结束,"
  113.                                                         + (allChess[x][y] == 1 ? "黑方" : "白方") + "获胜");
  114.                                         canPlay = false;
  115.                                 }
  116.                         } else {
  117.                                 JOptionPane.showMessageDialog(this, "当前已有棋子,不能再下了!");
  118.                         }
  119.  
  120.                         this.repaint();
  121.                 }
  122.         }
  123.  
  124.         //判断是否获胜
  125.         private boolean Check_Win() {
  126.                 boolean flag = false;
  127.                 //保存共有多少相同颜色的棋子相连
  128.                 int count = 1;
  129.                 //先判断横向,特点,y坐标相同,即allChess[x][y]中y相同
  130.                 //判断这个棋子的颜色
  131.                 int color = this.allChess[x][y];
  132.                 count = Check_Count(1, 0, color);
  133.                 if (count >= 5) {
  134.                         flag = true;
  135.                 } else {
  136.                         //判断纵向
  137.                         count = Check_Count(0, 1, color);
  138.                         if (count >= 5) {
  139.                                 flag = true;
  140.                         } else {
  141.                                 //判断右上,左下
  142.                                 count = Check_Count(1, -1, color);
  143.                                 if (count >= 5) {
  144.                                         flag = true;
  145.                                 } else {
  146.                                         //判断左上,右下
  147.                                         count = Check_Count(1, 1, color);
  148.                                         if (count >= 5) {
  149.                                                 flag = true;
  150.                                         }
  151.                                 }
  152.                         }
  153.                 }
  154.                 return flag;
  155.         }
  156.        
  157.         //得到棋子的数目
  158.         private int Check_Count(int xChange, int yChange, int color) {
  159.                 int count = 1;
  160.                 int tempX = xChange;
  161.                 int tempY = yChange;
  162.                 while (color == this.allChess[x + xChange][y + yChange]) {
  163.                         count++;
  164.                         if (xChange != 0) {
  165.                                 xChange++;
  166.                         }
  167.                         if (yChange != 0) {
  168.                                 if (yChange > 0)
  169.                                         yChange++;
  170.                                 if (yChange < 0)
  171.                                         yChange--;
  172.                         }
  173.                 }
  174.                 xChange = tempX;
  175.                 yChange = tempY;
  176.                 while (color ==
  177.                                
  178.                                 this.allChess[x - xChange][y - yChange]) {
  179.                         count++;
  180.                         if (xChange != 0) {
  181.                                 xChange++;
  182.                         }
  183.                         if (yChange != 0) {
  184.                                 if (yChange > 0)
  185.                                         yChange++;
  186.                                 if (yChange < 0)
  187.                                         yChange--;
  188.                         }
  189.                 }
  190.                 return count;
  191.         }
  192.  
  193.         @Override
  194.         public void mouseReleased(MouseEvent e) {
  195.                 // TODO Auto-generated method stub
  196.  
  197.         }
  198.  
  199.         @Override
  200.         public void mouseEntered(MouseEvent e) {
  201.                 // TODO Auto-generated method stub
  202.  
  203.         }
  204.  
  205.         @Override
  206.         public void mouseExited(MouseEvent e) {
  207.                 // TODO Auto-generated method stub
  208.  
  209.         }
  210.  
  211. }
  212.  
  213. //测试类
  214. public class Test {
  215.         public static void main(String[] args){
  216.                 new FiveChessFrame();
  217.         }
  218. }

回复 "java实现五子棋"

这儿你可以回复上面这条便签

captcha