java连连看源代码 您所在的位置:网站首页 连连看PPT图片 java连连看源代码

java连连看源代码

2024-02-08 09:12| 来源: 网络整理| 查看: 265

import javax.swing.*; import java.awt.*; import java.awt.event.*;

public class lianliankan implements ActionListener {  JFrame mainFrame; // 主面板  Container thisContainer;  JPanel centerPanel, southPanel, northPanel; // 子面板  JButton diamondsButton[][] = new JButton[6][5];// 游戏按钮数组  JButton exitButton, resetButton, newlyButton; // 退出,重列,重新开始按钮  JLabel fractionLable = new JLabel("0"); // 分数标签  JButton firstButton, secondButton; // 分别记录两次被选中的按钮  int grid[][] = new int[8][7];// 储存游戏按钮位置  static boolean pressInformation = false; // 判断是否有按钮被选中  int x0 = 0, y0 = 0, x = 0, y = 0, fristMsg = 0, secondMsg = 0, validateLV; // 游戏按钮的位置坐标  int i, j, k, n;// 消除方法控制

 public void init() {   mainFrame = new JFrame("JKJ连连看");   thisContainer = mainFrame.getContentPane();   thisContainer.setLayout(new BorderLayout());   centerPanel = new JPanel();   southPanel = new JPanel();   northPanel = new JPanel();   thisContainer.add(centerPanel, "Center");   thisContainer.add(southPanel, "South");   thisContainer.add(northPanel, "North");   centerPanel.setLayout(new GridLayout(6, 5));   for (int cols = 0; cols < 6; cols++) {    for (int rows = 0; rows < 5; rows++) {     diamondsButton[cols][rows] = new JButton(String       .valueOf(grid[cols + 1][rows + 1]));     diamondsButton[cols][rows].addActionListener(this);     centerPanel.add(diamondsButton[cols][rows]);    }   }   exitButton = new JButton("退出");   exitButton.addActionListener(this);   resetButton = new JButton("重列");   resetButton.addActionListener(this);   newlyButton = new JButton("再来一局");   newlyButton.addActionListener(this);   southPanel.add(exitButton);   southPanel.add(resetButton);   southPanel.add(newlyButton);   fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable     .getText())));   northPanel.add(fractionLable);   mainFrame.setBounds(280, 100, 500, 450);   mainFrame.setVisible(true);  }

 public void randomBuild() {   int randoms, cols, rows;   for (int twins = 1; twins     cols = (int) (Math.random() * 6 + 1);     rows = (int) (Math.random() * 5 + 1);     while (grid[cols][rows] != 0) {      cols = (int) (Math.random() * 6 + 1);      rows = (int) (Math.random() * 5 + 1);     }     this.grid[cols][rows] = randoms;    }   }  }

 public void fraction() {   fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable     .getText()) + 100));  }

 public void reload() {   int save[] = new int[30];   int n = 0, cols, rows;   int grid[][] = new int[8][7];   for (int i = 0; i     if (this.grid[i][j] != 0) {      save[n] = this.grid[i][j];      n++;     }    }   }   n = n - 1;   this.grid = grid;   while (n >= 0) {    cols = (int) (Math.random() * 6 + 1);    rows = (int) (Math.random() * 5 + 1);    while (grid[cols][rows] != 0) {     cols = (int) (Math.random() * 6 + 1);     rows = (int) (Math.random() * 5 + 1);    }    this.grid[cols][rows] = save[n];    n--;   }   mainFrame.setVisible(false);   pressInformation = false; // 这里一定要将按钮点击信息归为初始   init();   for (int i = 0; i < 6; i++) {    for (int j = 0; j < 5; j++) {     if (grid[i + 1][j + 1] == 0)      diamondsButton[i][j].setVisible(false);    }   }  }

 public void estimateEven(int placeX, int placeY, JButton bz) {   if (pressInformation == false) {    x = placeX;    y = placeY;    secondMsg = grid[x][y];    secondButton = bz;    pressInformation = true;   } else {    x0 = x;    y0 = y;    fristMsg = secondMsg;    firstButton = secondButton;    x = placeX;    y = placeY;    secondMsg = grid[x][y];    secondButton = bz;    if (fristMsg == secondMsg && secondButton != firstButton) {     xiao();    }   }  }

 public void xiao() { // 相同的情况下能不能消去。仔细分析,不一条条注释   if ((x0 == x && (y0 == y + 1 || y0 == y - 1))     || ((x0 == x + 1 || x0 == x - 1) && (y0 == y))) { // 判断是否相邻    remove();   } else {    for (j = 0; j < 7; j++) {     if (grid[x0][j] == 0) { // 判断第一个按钮同行哪个按钮为空      if (y > j) { // 如果第二个按钮的Y坐标大于空按钮的Y坐标说明第一按钮在第二按钮左边       for (i = y - 1; i >= j; i--) { // 判断第二按钮左侧直到第一按钮中间有没有按钮        if (grid[x][i] != 0) {         k = 0;         break;        } else {         k = 1;        } // K=1说明通过了第一次验证       }       if (k == 1) {        linePassOne();       }      }      if (y < j) { // 如果第二个按钮的Y坐标小于空按钮的Y坐标说明第一按钮在第二按钮右边       for (i = y + 1; i         k = 1;        }       }       if (k == 1) {        linePassOne();       }      }      if (y == j) {       linePassOne();      }     }     if (k == 2) {      if (x0 == x) {       remove();      }      if (x0 < x) {       for (n = x0; n         k = 0;         break;        }        if (grid[n][j] == 0 && n == x - 1) {         remove();        }       }      }      if (x0 > x) {       for (n = x0; n >= x + 1; n--) {        if (grid[n][j] != 0) {         k = 0;         break;        }        if (grid[n][j] == 0 && n == x + 1) {         remove();        }       }      }     }    }    for (i = 0; i < 8; i++) { // 列     if (grid[i][y0] == 0) {      if (x > i) {       for (j = x - 1; j >= i; j--) {        if (grid[j][y] != 0) {         k = 0;         break;        } else {         k = 1;        }       }       if (k == 1) {        rowPassOne();       }      }      if (x < i) {       for (j = x + 1; j         k = 0;         break;        } else {         k = 1;        }       }       if (k == 1) {        rowPassOne();       }      }      if (x == i) {       rowPassOne();      }     }     if (k == 2) {      if (y0 == y) {       remove();      }      if (y0 < y) {       for (n = y0; n         k = 0;         break;        }        if (grid[i][n] == 0 && n == y - 1) {         remove();        }       }      }      if (y0 > y) {       for (n = y0; n >= y + 1; n--) {        if (grid[i][n] != 0) {         k = 0;         break;        }        if (grid[i][n] == 0 && n == y + 1) {         remove();        }       }      }     }    }   }  }

 public void linePassOne() {   if (y0 > j) { // 第一按钮同行空按钮在左边    for (i = y0 - 1; i >= j; i--) { // 判断第一按钮同左侧空按钮之间有没按钮     if (grid[x0][i] != 0) {      k = 0;      break;     } else {      k = 2;     } // K=2说明通过了第二次验证    }   }   if (y0 < j) { // 第一按钮同行空按钮在与第二按钮之间    for (i = y0 + 1; i      k = 0;      break;     } else {      k = 2;     }    }   }  }

 public void rowPassOne() {   if (x0 > i) {    for (j = x0 - 1; j >= i; j--) {     if (grid[j][y0] != 0) {      k = 0;      break;     } else {      k = 2;     }    }   }   if (x0 < i) {    for (j = x0 + 1; j      k = 0;      break;     } else {      k = 2;     }    }   }  }

 public void remove() {   firstButton.setVisible(false);   secondButton.setVisible(false);   fraction();   pressInformation = false;   k = 0;   grid[x0][y0] = 0;   grid[x][y] = 0;  }

 public void actionPerformed(ActionEvent e) {   if (e.getSource() == newlyButton) {    int grid[][] = new int[8][7];    this.grid = grid;    randomBuild();    mainFrame.setVisible(false);    pressInformation = false;    init();   }   if (e.getSource() == exitButton)    System.exit(0);   if (e.getSource() == resetButton)    reload();   for (int cols = 0; cols < 6; cols++) {    for (int rows = 0; rows < 5; rows++) {     if (e.getSource() == diamondsButton[cols][rows])      estimateEven(cols + 1, rows + 1, diamondsButton[cols][rows]);    }   }  }

 public static void main(String[] args) {   lianliankan llk = new lianliankan();   llk.randomBuild();   llk.init();  } }



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有