按Y无法进行下步直接就退出了,可以告诉我是什么地方出问题了吗?
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
class CGame
{
public:
CGame(); //初始化
virtual ~CGame();
void Print(); //打印当前图
bool DoStep();
void FlgMine(int x,int y); //标记雷
void Open(int x,int y); //打开该结点
bool Judge(); //判断是否结束
void Run(); //游戏运行
private:
int grid[8][8]; //生成雷图,0表示无雷,1表示有雷
int state[8][8]; //状态,0表示未翻开,1表示标雷,2表示已翻开
bool mflag; //是否触雷
bool bover; //游戏是否结束
};
CGame::CGame()
{
int i,j;
mflag = false;
bover = false;
for (i=0;i<8;i++)
{
for (j=0;j<8;j++)
{
grid[i][j] = rand()%2; //生成0-1的随机数
state[i][j] = 0;
}
}
}
void CGame::Print()
{
int i,j;
system("cls");
for (i=0;i<8;i++)
{
for (j=0;j<8;j++)
{
if (state[i][j] == 0)
cout << "□";
else if(state[i][j] == 1)
cout << "m";
else
cout << grid[i][j]<<" "; //打开
}
cout << endl;
}
}
//
bool CGame::DoStep()
{
int x,y,op;
cout << "请输入行列数:";
cin >>x>>y;
cout << "请选择:1.标雷 2.翻开";
while(1)
{
cin >> op;
if(op==1)
{
FlgMine(x,y);
break;
}
else
{
Open(x,y);
if(mflag) return false;
break;
}
}
fflush(stdin);
cout << "是否继续(按y继续/按q退出):";
char ch = getchar();
getchar();
if(ch == 'Y' || ch == 'y')
return true;
return false;
}
//标记雷
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; //结束游戏
cout << "翻到雷了";
}
}
//判断是否结束
bool CGame::Judge()
{
if(mflag) return true;
//判断是否都已经翻出
for (int i=0;i<8;i++)
{
for (int j=0;j<8;j++)
{
if (state[i] == 0)
{
return false;
}
}
}
return true;
}
//游戏运行
void CGame::Run()
{
Print();
while(!bover)
{
if( DoStep() )
Judge();
else
break;
}
}
CGame::~CGame(){}
int main()
{
srand((unsigned int)time(NULL));
CGame game;
game.Run();
cout << "游戏运行结束"<<endl;
system("pause");
return 0;
}