• 大小: 7KB
    文件类型: .cpp
    金币: 2
    下载: 0 次
    发布日期: 2024-01-27
  • 语言: C/C++
  • 标签: C++  课程设计  

资源简介

扫雷游戏.cpp C++ 课程设计,注释详细,可以快速复制出一篇实习报告

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
using namespace std;
class Mine
{
public:
char mine; //结点信息‘.‘为未翻开的结点,‘*‘为地雷,数字字符为个点翻开后周边地雷数目 
bool flg; //是否标记为雷
Mine() : mine(‘.‘) flg(false) { }
};
class CGame
{
public:
CGame(unsigned int x = 8 unsigned int y = 8 unsigned int m = 20); //默认8行8列20个地雷 
virtual ~CGame() 
{
if(!map)
{
for(int i = 0; i != row; ++i)
delete []map[i];
}
delete []map;
}
void initGame(); //初始化地图 
void print(); //显示地图 
bool DoStep(); //是否继续游戏 
void FlgMine(int x int y) //标记雷
{
if(map[x][y].mine == ‘*‘ || map[x][y].mine == ‘.‘)
map[x][y].flg = !map[x][y].flg;
}
void Open(int x int y); //打开该结点
bool Judge(); //判断是否结束
void Run(); //游戏运行
int getmine(int x int y); //获取结点周边地雷数目 
private:
unsigned int row col; //地图行列数 
unsigned int mines; //地雷数目  
 Mine **map; //保存地图的二维数组 
};
CGame::CGame(unsigned int x unsigned int y unsigned int m)
: row(x) col(y) mines(m) map(nullptr)
{
initGame();
}
void CGame::initGame()
{
//根据行列数分配一个模拟的二维数组 
map = new Mine*[row];
for(int i = 0; i != row; ++i)
map[i] = new Mine[col];
//随机布雷 
for(int j = 0; j < mines; ++j) 
{
int x = 0 y = 0;
do
{
x = rand() % row;
y = rand() % col;
}while(map[x][y].mine == ‘*‘);
map[x][y].mine = ‘*‘;
}
}

void CGame::print()
{
//打印列序号作为第一行 
cout << “    “;
for(int i = 0; i != col; ++i)
cout << setw(4) << i;
cout << endl;
//打印表格第一行 
cout << “    “;
cout << “┌“;
for(int i = 0; i != col; ++i)
{
if(i != col - 1)
cout << “─┬“;
else
cout << “─┐“;
}
cout << endl;
//打印地图信息 
for(int i = 0; i != row; ++i)
{
cout << setw(4) << i <<“│“ ; //打印行号 
for(int j = 0; j != col; ++j)
{
if(map[i][j].flg == true) //如果这个点被标记为地雷,就输出一个五角星号代表地雷 
cout << “★│“;
else //没有被标记 
{
if(map[i][j].mine == ‘.‘ || map[i][j].mine == ‘*‘) //没有被翻开的状态显示空白 
cout << “  “ << “│“;
else //被翻开状态,就显示它周边地雷数目 
cout << map[i][j].mine << “ │“;
}
}
cout << endl;
if(i != row - 1)
{
cout << “    ├“;
for(int i = 0; i != col; ++i)
{
if(i != col - 1)
cout << “─┼“;
else
cout << “─┤“;
}
cout << endl;
}
}
//打印表格最后一行 
cout << “    “;
cout << “└“;
for(int i = 0; i != col; ++i)
{
if(i != col - 1)
cout << “─┴“;
else
cout << “─┘“;
}
cout << endl;
}
int CGame::getmine(int x int y)
{
//变量一个格子周边8个格子,计算周边地雷数目 
int num = 0;
//确定周边格子的坐标以确保不会小于0和大于等于行列数 
int x1 = x - 1 > 0 ? x - 1 : 0;
int x2 = x + 1 < row ? x + 1 : row - 1;
int y1 = y - 1 > 0 ? y - 1 : 0;
int y2 = y + 1 < col ? y + 1 : col - 1;
for(int i = x1; i <= x2; ++i)
{
for(int j = y1; j <= y2; ++j)
{
if(map[i][j].mine == ‘*‘) //计数 
++num;
}
}
return num;
}
//打开一个格子,如果打开的格子周边地雷数目为0,递归调用以打开跟它相连的格子 
void CGame::Open(int x int y) //打开该

评论

共有 条评论