这是原始的扫雷界面,那么,我们能不能用C++实现一个类似的扫雷游戏呢?
扫雷游戏的在线网站:MineSweeper.cn
通过观察扫雷游戏,我们发现,显示分为三种:未扫雷区、数字(空白区可以用0代替)和插旗
于是,便有了以下代码:
代码实现#includeusing namespace std; int ui[12][12],b[12][12]; int main(){ srand(time(NULL)); //random seed system("color 1B"); system("title MineSweeper"); int cnt=10; while(cnt){ int x=1+rand()%10;//a+rand()%b = [a, a+b-1] int y=1+rand()%10; if(!ui[x][y]){//if(ui[x][y]==0){ ui[x][y]=9; cnt--; } } for(int i=1;i<=10;i++){ for(int j=1;j<=10;j++){ int sum=0; if(ui[i][j]!=9){ if(ui[i-1][j-1]==9) sum++;//sum=!(a[i-1][j-1]-9)+!(a[i-1][j]-9)... if(ui[i-1][j]==9) sum++; if(ui[i-1][j+1]==9) sum++; if(ui[i][j-1]==9) sum++; if(ui[i][j+1]==9) sum++; if(ui[i+1][j-1]==9) sum++; if(ui[i+1][j]==9) sum++; if(ui[i+1][j+1]==9) sum++; ui[i][j]=sum; } } } int k=0,k1=0; while(true){ for(int i=1;i<=10;i++){ for(int j=1;j<=10;j++){ if(b[i][j]==0){ cout<<"#"<<' '; }else if(b[i][j]==1){ cout< cout<<"P"<<' '; } } cout< >op; int x,y; cin>>x>>y; system("cls"); if(op=='q'){ if(ui[x][y]==9){ cout<<"You died !"; return 0; } else{ b[x][y]=1; } } else if(op=='p'){ k1++; if(ui[x][y]==9){ k++; } b[x][y]=2; } else if(op=='c'){ k1--; if(ui[x][y]==9){ k--; } b[x][y]=0; } if(k==10 && k==k1){ cout<<"You win !"; return 0; } } return 0; }
共100行代码
游戏规则游戏一开始首先会打印一个10×10的井号(#)方阵,表示扫雷区,接下来让用户输入一个操作命令,再输入横纵坐标,表示要操作的区域。
将雷全部扫完即为胜利,否之,踩到雷即为失败
操作符:
- q代表翻开坐标处的井号
- p代表在坐标处插旗(标雷)
- c代表取消坐标位的旗
也可以在这里下载源码
运行效果(背景颜色可以自行修改):



