扫雷游戏

有的时候闲下来写小游戏,挺不错的。扫雷游戏主要是二维数组,和图片加载,音乐播放,等实现。
思想:
比如 是12x12的扫雷区域,实际数组是14x14 二维数组的四周都有一个一个空格,,采用九宫格的思想。进行赋值,让后递归,便历
思想示意图如下

在这里插入图片描述
完成图如下:
在这里插入图片描述

核心代码如下:

//初始化数组为0
	for (int i = 0; i < ROW + 2; i++){
		for (int j = 0; j < COL + 2; j++){
			map[i][j] = 0;
		}
	}

	//随机设置一些雷 -1代表雷  多少个雷NUM
	for (int i = 0; i < NUM;){    //10次
		int r = rand() % ROW + 1;   //随机得到行  //1-10
		int c = rand() % COL + 1;   //随机得到列  //1-10

		if (map[r][c] == 0)			//0
		{
			map[r][c] = -1;
			i++;
		}
	}

	//根据雷的分布  填充数组的数据  
	for (int i = 1; i <= ROW; i++){  //12  0-11   1-10
		for (int j = 1; j <= COL; j++){  //遍历所有数组的元素
			if (map[i][j] != -1){
				//遍历9宫格 9宫格里面有多少个-1
				for (int m = i - 1; m <= i + 1; m++){
					for (int n = j - 1; n <= j + 1; n++){
						//视频  源码  素材
						if (map[m][n] == -1)
							map[i][j]++;
					}
				}
			}
		}
	}

	//先给数组加密
	for (int i = 1; i <= ROW; i++){   //辅助区  根据雷填充数字的时候
		for (int j = 1; j <= COL; j++){
			map[i][j] += 20;
		}
	}

	win = 0;   //点开一个格子  win+1   ROW*COL(格子的总数) - win点开的 = 雷的数量NUM
	hwnd = GetHWnd();
}

//游戏的绘制
void GameDraw()
{
	//打印数组  贴图
	for (int i = 1; i <= ROW; i++){
		for (int j = 1; j <= COL; j++){
			if (map[i][j] >= 0 && map[i][j] <= 8)  //0-8
				putimage((i - 1)*SIZE, (j - 1)*SIZE, &img[map[i][j]]);
			else if (map[i][j] == -1)
				putimage((i - 1)*SIZE, (j - 1)*SIZE, &img[9]);  //雷
			else if (map[i][j] >= 19 && map[i][j]<=28)
				putimage((i - 1)*SIZE, (j - 1)*SIZE, &img[10]);  //加密
			else if (map[i][j] >= 30)  //只有在这种情况下
				putimage((i - 1)*SIZE, (j - 1)*SIZE, &img[11]);   //标记
		}
	}
}

//递归打开0
void OpenZero(int x,int y)
{
	map[x][y] -= 20;   //先翻开
	win++;

	//遍历9宫格
	for (int i = x - 1; i <= x + 1; i++){
		for (int j = y - 1; j <= y + 1; j++){
			if (i >= 1 && i <= ROW&&j >= 1 && j <= COL)
			{
				if (map[i][j] >= 19 && map[i][j] <= 28)
				{
					if (map[i][j] != 20)  //非0
					{
						map[i][j] -= 20;
						win++;
					}
					else
					{
						OpenZero(i, j);
					}
				}
			}
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值