先给大家看看效果图片
第一张游戏开始界面
第二战是游戏进入界面
第三张是游戏结束界面
连连看实现难点:
1.因为连连看每次要点击两张图片进行删除,所以随机生成的图片是要成双的出现在界面
实现代码如下
public void suiji() {
int x1;
int x2;
int y1;
int y2;
for (int i = 0; i < shuzu.length; i++) {
for (int j = 0; j < shuzu[i].length; j++) {
shuzu[i][j] = 0;
}
}
Random rand = new Random();
for (int i = 0; i < shuzu.length * shuzu[0].length / 2; i++) {
int type = rand.nextInt(10) + 1;// 值是1,2,...,10 数组1-10对应图片0-9
do {
x1 = (int) ((12 * Math.random()));// x1范围是0,1,2,。。。12
y1 = (int) ((10 * Math.random()));// y1范围是0,10
} while (shuzu[x1][y1] != 0);
shuzu[x1][y1] = type;
do {
x2 = (int) ((12 * Math.random()));
y2 = (int) ((10 * Math.random()));
} while (shuzu[x2][y2] != 0);
shuzu[x2][y2] = type;
}
}
2.对二维数组随机生成以后,二维数组中的每个数字代表一个图片。然后就可以将图片插入,实现每次打开界面都会是新的连连看界面。生成图片的代码要写进重绘里面,不然会导致图片无故刷新。随机数组的代码不能写进重绘,因为不能当把界面拉一下,就会让界面刷新。
因为是12x10的图片放置,所以本人首先画了一个13x11条线的棋盘辅助,后面实现功能后,将棋盘重绘代码注释,初学者可以借用棋盘辅助线。
重绘代码如下:
public void paint(Graphics g) {
super.paint(g);
ImageIcon image = new ImageIcon(getClass().getResource("A梦.png"));
int width = getWidth();// 获取图片组件宽
int height = getHeight();
g.drawImage(image.getImage(), 0, 0, width , height, this);
Font font = new Font("黑体", Font.BOLD, 135);// 创建体字
g.setFont(font);// 使用字体
g.setColor(Color.WHITE);// 使用白色
/*
* // 重绘棋盘 for (int i = 0; i < Cow; i++) { g.drawLine(leftX + SIZE * i, leftY,
* leftX + SIZE * i, leftY + SIZE * (Lum - 1));// 竖线 g.drawLine(leftX, leftY +
* SIZE * i, leftX + SIZE * (Cow - 1), leftY + SIZE * i);// 横线 }
*/
// int[][] shuzu = new int[12][10];//二维数组用来表示12*10地图
Image[] imagArr = new Image[10];
for (int i = 0; i < imagArr.length; i++) {
imagArr[i] = new ImageIcon("C:\\Users\\TANGNAN\\Desktop\\连连看\\ameng\\" + i + ".png").getImage();
}
System.out.println(shuzu[1][1] + "png");
for (int i = 0; i < shuzu.length; i++) {
for (int j = 0; j < shuzu[i].length; j++) {
if (0 < shuzu[i][j]) {
g.drawImage(imagArr[shuzu[i][j] - 1], leftX + i * 80, leftY + j * 80, 80, 80, this);
}
}
}
}
3.整个连连看界面实现后,就是实现连连看的规则。连连看里面最多只能设置两个拐角的线条才能消除方块。所以现在要写四个方法,分别实现连连看的水平连接,竖直连接,单拐点连接,双拐点连接,以及还有一个最边缘的两个相同方块的边缘连接。其中单拐点连接和双拐点连接较难,水平垂直边缘连接比较基础。
代码如下:
水平连接
水平连接代码,用的拼音还见谅
public boolean shuipingLink(int clickX1, int clickY1, int clickX2, int clickY2)