JavaSwing实现简单连连看小游戏

先给大家看看效果图片
第一张游戏开始界面在这里插入图片描述
第二战是游戏进入界面
在这里插入图片描述
第三张是游戏结束界面
在这里插入图片描述

连连看实现难点:

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) 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值