控制台扫雷程序C++源代码(Dim版V0.10)

很久很久以前(感觉上),我们算法课上的老师就说给我们现场编个扫雷游戏看看。可过了N周后还是没见行动。郁闷了,就想自己写个出来算了,不过又还没学会编图形界面,所以只好做一个控制台的实现了。经过几个小时从无到有的思考和编程,这样一个简单版的扫雷从这里诞生。至今为止还没看到别人的相关代码,所以也许这里面的算法很烂,不过好歹是完完全全地从咱手中写出来的,小骄傲一下哈。最近还只是在考虑究竟学不学图形编程的问题,所以近期内是不会对程序做什么大的改进了,先发贴出来吧,版本V0.10嘻嘻~~以后学到了新的东西再改进改进。
//这是Windows 下的程序,移到Linux请把清屏函数由cls改为clear

#include<iostream> #include<string> #include<iomanip> #include<ctime> #include<cmath> using namespace std; struct MnSwp { public: char MineNum; char Flag; char Logo; MnSwp(); }; MnSwp::MnSwp() { MineNum='0'; Flag='N'; Logo='#'; } const int N=9; int X,Y; MnSwp Sweeping[N][N]; int ExceptMine(int S,int T); void AddMineNum(int XX,int YY); void IfNotW(int XXX,int YYY); int Iter=0; int main() { /////////////////////Initialization And Print/////////////////////// for(int i=0;i!=N;++i) { for(int j=0;j!=N;++j) { cout<<setw(2)<<Sweeping[i][j].Logo; } cout<<endl; } ////////////////////Random Creat the Mines And Put num around Mines/////////////////////// int Random=0,m=0,n=0; srand((unsigned) time(NULL)); for(int k=0;k!=10;++k) { Random=rand()%(N*N); m=Random/N; n=Random%N; if(Sweeping[m][n].Flag!='Y') { Sweeping[m][n].Flag='Y'; AddMineNum(m-1,n-1); AddMineNum(m-1,n); AddMineNum(m-1,n+1); AddMineNum(m,n-1); AddMineNum(m,n+1); AddMineNum(m+1,n-1); AddMineNum(m+1,n); AddMineNum(m+1,n+1); } else --k; } //////////////////Let user Enter Coordinates////////////////// while(N==N) { if(Iter==(N*N-10)) { cout<<"Congratulations!You succeed to debar all the Mines!"<<endl; return 0; } else { cout<<"Please enter the Row Number(1~"<<N<<"):"; cin>>X; cout<<"Please enter the Arrange Number(1~"<<N<<"):"; cin>>Y; --X; --Y; //////////////////When user Stamp on a Mine//////////////////// if(Sweeping[X][Y].Flag=='Y') { system("cls"); for(int i=0;i!=N;++i) { for(int j=0;j!=N;++j) { if(Sweeping[i][j].Flag!='Y') cout<<setw(2)<<Sweeping[i][j].MineNum; else cout<<setw(2)<<'X'; } cout<<endl; } cout<<"Your cess is Bad!!!You Stamped on a Mine!"<<endl; return 0; } /////////////////Not Stamp on a Mine////////////////////// else { system("cls"); ExceptMine(X,Y); for(int a=0;a!=N;++a) { for(int b=0;b!=N;++b) { cout<<setw(2)<<Sweeping[a][b].Logo; } cout<<endl; } } } } return 0; } int ExceptMine(int S,int T) { if(Sweeping[S][T].MineNum=='0') { Sweeping[S][T].Logo=Sweeping[S][T].MineNum; Sweeping[S][T].Flag='W'; ++Iter; IfNotW(S-1,T-1); IfNotW(S-1,T); IfNotW(S-1,T+1); IfNotW(S,T-1); IfNotW(S,T+1); IfNotW(S+1,T-1); IfNotW(S+1,T); IfNotW(S+1,T+1); } else { Sweeping[S][T].Logo=Sweeping[S][T].MineNum; Sweeping[S][T].Flag='W'; ++Iter; } return 0; } void AddMineNum(int XX,int YY) { if(XX>=0&&XX<N&&YY>=0&&YY<N) ++Sweeping[XX][YY].MineNum; } void IfNotW(int XXX,int YYY) { if((XXX>=0&&XXX<N&&YYY>=0&&YYY<N)&&Sweeping[XXX][YYY].Flag!='W') ExceptMine(XXX,YYY); }

你可能感兴趣的:(编程,C++,算法,Random,System,图形)