资源描述:
《C++ 扫雷程序输出报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、程序输出报告程序设计时使用环境----Win10VS20151程序设计思路模块化设计一个扫雷游戏。要实现埋雷,计算一个格子周围雷数,打开雷位,显示雷区几个功能.需要以下几个主要数据,判断雷位的雷是否存在,雷位周围的雷数,是否已经被打开,游戏是否结束,雷区大小,布雷量(本程序中非必须保存于类中数据)2功能的具体实现为了方便计算和理解先分出类classOneMine{OneMine();//雷位构造函数voidInitOneMine();//初始化一个雷位boolIsMine;//是否是雷boolOpened;//是否已经打开shortA
2、roundMines;//周边的雷数friendclassOperation;friendclassMines;};classMines//创建雷区类{boolGameOver;//扫雷是否结束shortRows;//雷区的行数shortCols;//雷区的列数shortMinesCount;//布设雷的数量OneMine*pos[50][50];//存放雷对象的数组指针public:Mines();//雷区类构造函数~Mines();//析构函数friendclassOperation;};classOperation:public
3、Mines//操作类{public:voidReInitMine(shortrow,shortcol,shortmines);//重新初始化雷区voidLayOneMines();//布置一个地雷voidCalculateAroundMine(intx,inty);//计算每个雷周边的雷数voidShowOneMine(intx,inty);//触雷时的执行函数voidShowMine();//显示未触雷时的雷区情况voidShowAllMine();//触雷时的触发函数voidOpenOneMine(intx,inty);//打开一
4、个雷位};实现埋雷//布一个地雷voidOperation::LayOneMines()//布一个地雷{intm,n;do{m=rand()%Cols+1;n=rand()%Rows+1;//随机产生雷位坐标}while(pos[m][n]->IsMine);pos[m][n]->IsMine=true;}PS:rand()函数的输出是依赖于默认输入数据的,需要使用windows.h中的GetTickCount()函数来初始化实现计算格子周围雷数voidOperation::CalculateAroundMine(intx,inty)
5、//计算雷位周边雷数{intmines=0;for(inti=x-1;i<=x+1;i++)for(intj=y-1;j<=y+1;j++)mines=mines+pos[i][j]->IsMine;//利用IsMine数据的特性计算周围雷数pos[x][y]->AroundMines=mines;}实现打开雷位voidOperation::OpenOneMine(intx,inty)//打开一个雷位{if(x>Cols
6、
7、x<1
8、
9、y>Rows
10、
11、y<1)return;//如果点的位置不在雷区,则返回if(GameOver)retu
12、rn;//如果扫雷结束,则返回if(pos[x][y]->Opened)return;//如果该位置已经打开,则返回if(pos[x][y]->IsMine)//如果该雷位是地雷{ShowAllMine();//找出所有的地雷,并显示出来cout<<"BOOM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";GameOver=true;return;}else//如果该雷位不是地雷{pos[x][y]->Opened=true;if(pos[x][y]->AroundMines==0)//如果该雷位周边的雷数为零,打
13、开周边的雷位,采用递归调用的方法{if(x!=1)OpenOneMine(x-1,y);//打开左边if(x!=Cols)OpenOneMine(x+1,y);//打开右边if(y!=1)OpenOneMine(x,y-1);//打开上边if(y!=Rows)OpenOneMine(x,y+1);//打开下边if(x!=1&&y!=1)OpenOneMine(x-1,y-1);//打开左上if(x!=1&&y!=Rows)OpenOneMine(x-1,y+1);//打开左下if(x!=Cols&&y!=1)OpenOneMine(x
14、+1,y-1);//打开右上if(x!=Cols&&y!=Rows)OpenOneMine(x+1,y+1);//打开右下}}}}实现输出未触雷的雷区voidOperation::ShowMine()//显示雷区{int