【小游戏】C++实现扫雷 |
您所在的位置:网站首页 › 无火香薰香水的缺点和优点 › 【小游戏】C++实现扫雷 |
实现扫雷
一、扫雷游戏模式
二、代码实现
1.绘制地图场景
2.鼠标点击
3.递归
4.初始化游戏
5.main
总结及运行
一、扫雷游戏模式
在确定大小的矩形雷区中随机布置一定数量的地雷,玩家需要尽快找出雷区中的所有不是地雷的方块,而不许踩到地雷。 游戏的基本操作包括左键单击和右键单击。其中左键用于打开安全的格子,推进游戏进度;右键用于标记地雷,以辅助判断。 左键单击:在判断出不是雷的方块上按下左键,可以打开该方块。如果方块上出现数字,则该数字表示其周围3×3区域中的地雷数(一般为8个格子,对于边块为5个格子,对于角块为3个格子。所以扫雷中最大的数字为8);如果方块上为空(相当于0),则可以递归地打开与空相邻的方块;如果不幸触雷,则游戏结束。 右键单击:在判断为地雷的方块上按下右键,可以标记地雷(显示为小红旗)。重复一次或两次操作可取消标记。 二、代码实现 1.绘制地图场景根据每一块地区的数据进行图形输出。 void drawmap(int map[][12],IMAGE *img) { int i, j; for (i = 1; i int x = 50 * (i - 1);//得到位置 int y = 50 * (j - 1); if (map[i][j]>25) { putimage(x, y, &img[9]);//标记flag } else { switch (map[i][j]) { case 9: putimage(x, y, &img[11]);//输出图片雷 break; case 10: putimage(x, y, &img[0]);//0 break; case 11: putimage(x, y, &img[1]);//1 break; case 12: putimage(x, y, &img[2]);//2 break; case 13: putimage(x, y, &img[3]);//3 break; case 14: putimage(x, y, &img[4]);//4 break; case 15: putimage(x, y, &img[5]);//5 break; case 16: putimage(x, y, &img[6]);//6 break; case 17: putimage(x, y, &img[7]);//7 break; case 18: putimage(x, y, &img[8]);//8 break; default: putimage(x, y, &img[10]);//地图 break; } } } } } 2.鼠标点击鼠标左键点击翻开格子,右键点击标记flag,再次点击可以进行取消。 sum记录翻开格子的数量,点击后对每个位置的数据进行加减操作。 int mousedown(int map[][12]) { MOUSEMSG m; //定义鼠标消息变量 while (1) { //获取鼠标消息 m = GetMouseMsg(); int mi = m.x / 50 + 1; int mj = m.y / 50 + 1; //判断鼠标消息 switch (m.uMsg) { case WM_LBUTTONDOWN: if (map[mi][mj] > 9) //已翻开的情况 { continue; } if (map[mi][mj] == 0) //如果点击为0,则翻开一片。 { //使用递归函数 swap(map, mi, mj); } else { map[mi][mj] += 10; sum += 1; } return map[mi][mj]; break; case WM_RBUTTONDOWN: if (map[mi][mj] > 9&& map[mi][mj] map[mi][mj] -= 30; } else { map[mi][mj] += 30; } return map[mi][mj]; break; } } } 3.递归当我们点到为0的地区时,将会打开周围的部分地区,外围为非0数或到达边界,内部为0. 如图: 运行结果如图: |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |