准备工具:VS +EasyX
目的:通过扫雷游戏项目,复习和掌握二维数组的使用;
1.基本框架
建立一个10*10的数组供游戏展示(绿框游戏区),后续步骤中为了防止访问数组越界情况添加边框数组(黄框)
目标
数组表示
代码展示
int map[12][12];//定义二维数组
//全部初始化为0
for (int j = 0; j < 12; j++)
{
for (int i = 0; i < 12; i++)
{
map[i][j] = 0;
}
}
2.埋雷
假定-1为雷,用随机函数埋雷,注意添加头文件
#include<time.h>
#include<stdlib.h>
代码展示:
srand((unsigned int)time(NULL));//随机数的种子
//有雷,-1为雷;随机放置10个;
for (int j = 1; j < 11; j++)
{
int r = rand() % 10+1;//从1-10下标选取
int c = rand() % 10+1;
if (map[r][c] == 0)
{
map[r][c] = -1;
}
else j--; //解决重复放置问题
}
3.扫雷提示,表示出非雷区周边雷的个数(0-9)
目标
代码展示:
//根据当前雷的发布,反推其他不是雷的数据
for (int i = 1; i < 11; i++)//绿框内
{
for (int j=1; j < 11; j++)
{
if (map[i][j] != -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]++;
}
}
}
}
}
}
4.实现对区域操作前后,数组会发生变化
//数据加密+10
for (int i = 1; i < 11; i++)
{
for (int j = 1; j < 11; j++)
{
map[i][j] += 10;
}
}//后续通过减去10恢复
5.图形文件导入
VS中选择文件右键,在文件资源管理器中打开文件夹,将文件放置于此
6.Easy-X使用
EasyX 是针对 C++ 的图形库,可以帮助 C 语言初学者快速上手图形和游戏编程。
基本代码:
IMAGE img[12];//定义图片
initgraph(500, 500,SHOWCONSOLE);//开辟一个图像界面,注意左上角为起始,向右为X,向下Y
setbkcolor(RED);//设置默认背景为红色
//加载图片到img数组里面
loadimage(&img[0], L"./res/0.jpg", 50, 50);
loadimage(&img[1], L"./res/1.jpg", 50, 50);
loadimage(&img[2], L"./res/2.jpg", 50, 50);
loadimage(&img[3], L"./res/3.jpg", 50, 50);
loadimage(&img[4], L"./res/4.jpg", 50, 50);
loadimage(&img[5], L"./res/5.jpg", 50, 50);
loadimage(&img[6], L"./res/6.jpg", 50, 50);
loadimage(&img[7], L"./res/7.jpg", 50, 50);
loadimage(&img[8], L"./res/8.jpg", 50, 50);
loadimage(&img[9], L"./res/9.jpg", 50, 50);
loadimage(&img[10], L"./res/10.jpg", 50, 50);
loadimage(&img[11], L"./res/11.jpg", 50, 50);
7.输入
获取鼠标键入
MOUSEMSG msg;//定义鼠标
msg = GetMouseMsg();
switch (msg.uMsg)
{
case WM_LBUTTONDOWN :
row = msg.x / 50 + 1;//50个像素点为1格,从1开始要加1
col = msg.y / 50 + 1;
if (map[row][col] >= 9 && map[row][col] <= 18) map[row][col] -= 10;
break;
}
8.输出
if (map[j][i] == -1)
{
putimage((i-1)*50,(j-1)*50,&img[9]);//输出图片雷
}//雷
else if (map[i][j] >= 0 && map[i][j] <= 8)
{
putimage((i - 1) * 50, (j - 1) * 50, &img[map[i][j]]);
}//点后显示0-8的类型
else putimage((i - 1) * 50, (j - 1) * 50, &img[10]);/*看不出 */
通过将输入、输出放置在while(1)函数里面实现输入刷新;
至此简易的扫雷就完成了。