数字连连消
游戏规则很简单,点击选中两个相同的数字即可消除这两个数字,没有做复杂的判断。
效果图
下面开始代码
首先是MapTool.java
,用于产生数字和判断选中的两个数字是否相同
package com.feonix;
import java.util.Random;
public class MapTool {
public static int[][] createMap() {
int[][] map = new int[10][10];
Random rand = new Random();
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
map[i][j] = rand.nextInt(9) + 1;
}
}
return map;
}
public static int[][] removed(int[][] map, int pi, int pj, int ci, int cj) {
if (map[pi][pj] == map[ci][cj] && (pj != cj || pi != ci)) {
System.out.println("消除:map[" + ci + "][" + cj + "],map[" + pi + "][" + pj + "]");
map[pi][pj] = 0;
map[ci][cj] = 0;
}
return map;
}
}
然后是GamePanel.java
,游戏布局,游戏核心逻辑代码
package com.feonix;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashSet;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.Timer;
public class GamePanel extends JPanel {
private static final long serialVersionUID = 2L;
private static final int sx = 50;// 左边距
private static final int sy = 50;// 上边距
private static final int w = 40; // 小方格宽高
private static final int rw = 400; // 网格总宽高
private int pj = 0, pi = 0; // 记录两个点击选中的按钮,第一个被点击的按钮坐标
private int cc = 0;// 被点击选中的按钮个数
private int[][] map;// 存放游戏数据的二维数组
private boolean isEnd = false; // 游戏结束标志
private JButton[][] btnMap; // 存放按钮的二维数组,与map对应
private int score; // 记录分数
private JButton restart; // 重新开始按钮
private Timer timer; // 定时器
private int timestamp; // 时间戳
public GamePanel() {
// 设置布局为不使用预设的布局
setLayout(null);
}
/**
* 开始游戏
*/
public void start() {