在最终的程序项目中,您需要使用 C 语言设计和实现一个扫雷游戏。 详细要求如下:
(一)矿场设置
你必须从键盘输入雷区的宽度和高度,建立一个地雷
地雷的可能位置由白色方块显示的字段。 为了
例如,一个宽度为10,高度为20的雷区如下所示
(2) 矿场设置
您必须在地雷字段中输入您要设置的地雷数量,并输入
这些矿山的位置。 例如,地雷数量为 2,位置
其中是 (1,2) 和 (3,4),这意味着我们必须挖掘,一个放在
矿场的第二行第三列,第四行还有一个
和第五列
在 Mine Weep 过程中,你不断猜测地雷可能的位置,如果你
猜对了,那么我对应的白色就换成“”,否则
不断输入地雷的可能位置,直到找到所有地雷。 例如,如果我们
输入一个位置 (1,2),那么放置在位置 (1,2) 的地雷被“”替换,如果我们
输入一个位置(5,6),意思是猜错了,那么我们需要输入
另一个位置,直到两个地雷被扫出来
巨佬们,请写一点注释在里面,真的不会
使用ege图形界面画图,定义一个二维数组,根据数组的数据画出矩形。
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
运行结果:
参考如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
class CGame
{
public:
CGame(); //初始化
virtual ~CGame();
void setRowandCol(int row,int col)
{
int i,j;
mrow = row;
mcol = col;
for (i=0;i<row;i++)
{
for (j=0;j<col;j++)
{
grid[i][j] = rand()%2; //生成0-1的随机数
state[i][j] = 0;
}
}
}
void Print(); //打印当前图
int DoStep();
void FlgMine(int x,int y); //标记雷
void Open(int x,int y); //打开该结点
int Judge(); //判断是否结束
void Run(); //游戏运行
private:
//最大30*30
int grid[30][30]; //生成雷图,0表示无雷,1表示有雷
int state[30][30]; //状态,0表示未翻开,1表示标雷,2表示已翻开
int mrow,mcol; //保存实际行数和列数
int mflag; //是否触雷
int bover; //游戏是否结束
};
CGame::CGame()
{
mflag = 0;
bover = 0;
}
void CGame::Print()
{
int i,j;
//system("cls");
printf("\n");
for (i=0;i<mrow;i++)
{
for (j=0;j<mcol;j++)
{
if (state[i][j] == 0)
printf("□");
else if(state[i][j] == 1)
printf("m"); //标记累
else
printf("%d ",grid[i][j]);//打开
}
printf("\n");
}
}
//
int CGame::DoStep()
{
int x,y,op;
char ch;
printf("请输入行列数:");
scanf("%d %d",&x,&y);
printf("请选择:1.标雷 2.翻开 ");
while(1)
{
scanf("%d",&op);
if(op==1)
{
FlgMine(x,y);
break;
}
else
{
Open(x,y);
if(mflag) return 0;
break;
}
}
fflush(stdin);
printf("是否继续(按y继续/按q退出):");
ch = getchar();
getchar();
if(ch == 'Y' || ch == 'y')
return 1;
return 0;
}
//标记雷
void CGame::FlgMine(int x,int y)
{
state[x-1][y-1] = 1; //标记雷
Print(); //刷新雷图
}
//打开该结点
void CGame::Open(int x,int y)
{
state[x-1][y-1] = 2;//翻开
Print();//刷新雷图
if(grid[x-1][y-1] == 1)//是雷
{
mflag = true; //结束游戏
printf("翻到雷了");
}
}
//判断是否结束
int CGame::Judge()
{
if(mflag) return 1;
//判断是否都已经翻出
for (int i=0;i<mrow;i++)
{
for (int j=0;j<mcol;j++)
{
if (state[i] == 0)
{
return 0;
}
}
}
return 1;
}
//游戏运行
void CGame::Run()
{
printf("This is MINE block ...\n");
Print();
while(!bover)
{
if( DoStep() )
Judge();
else
break;
}
}
CGame::~CGame(){}
int main()
{
CGame game;
int row,col;
srand((unsigned int)time(NULL));
printf("Input MINE block width:");
scanf("%d",&col);
printf("Input MINE block height:");
scanf("%d",&row);
game.setRowandCol(row,col);
game.Run();
printf("游戏运行结束\n");
system("pause");
return 0;
}