说到扫雷,确实是许多人的童年回忆(当时还不知道怎么玩,一通乱点,全凭运气),今天心血来潮,就做了一个,下面是代码:
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int main(){
char a[50][50]={0},b[50][50]={0};
int n,m,c,i,j,t,x,f,u,s=0;
while(1){
cout<<"最多输入五十行,五十列:";
cin>>n>>m>>c;
if(n>50||m>50)cout<<"小子不听劝是不是!重输!\n";//火气太重了呵呵
else if(c>=n*m)cout<<"地雷数不可以大于等于格数!\n";
else if(c==0)cout<<"地雷数不能是0!\n";
else break;
}//分别输入行、列与地雷数
srand(time(0));//随机种子
for(i=0;i<c;){
t=rand()%n,x=rand()%m;
if(a[t][x]!='*')a[t][x]='*',i++;
}//放雷!
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(a[i][j]!='*'){
if(i>0&&i<n-1){
if(j>0&&j<m-1){
b[i][j]='0'+bool(a[i-1][j-1]=='*')+bool(a[i-1][j]=='*')+bool(a[i-1][j+1]=='*')+bool(a[i][j-1]=='*')+bool(a[i][j+1]=='*')+bool(a[i+1][j-1]=='*')+bool(a[i+1][j]=='*')+bool(a[i+1][j+1]=='*');
}
else{
if(j==0){
b[i][j]='0'+bool(a[i-1][j]=='*')+bool(a[i-1][j+1]=='*')+bool(a[i][j+1]=='*')+bool(a[i+1][j]=='*')+bool(a[i+1][j+1]=='*');
}
else{
b[i][j]='0'+bool(a[i-1][j-1]=='*')+bool(a[i-1][j]=='*')+bool(a[i][j-1]=='*')+bool(a[i+1][j-1]=='*')+bool(a[i+1][j]=='*');
}
}
}else{
if(i==0){
if(j>0&&j<m){
b[i][j]='0'+bool(a[i][j-1]=='*')+bool(a[i][j+1]=='*')+bool(a[i+1][j-1]=='*')+bool(a[i+1][j]=='*')+bool(a[i+1][j+1]=='*');
}
else {
if(j==0){
b[i][j]='0'+bool(a[i][j+1]=='*')+bool(a[i+1][j]=='*')+bool(a[i+1][j+1]=='*');
}
else{
b[i][j]='0'+bool(a[i][j-1]=='*')+bool(a[i+1][j-1]=='*')+bool(a[i+1][j]=='*');
}
}
}
else{
if(j>0&&j<m){
b[i][j]='0'+bool(a[i-1][j-1]=='*')+bool(a[i-1][j]=='*')+bool(a[i-1][j+1]=='*')+bool(a[i][j-1]=='*')+bool(a[i][j+1]=='*');
}else{
if(j==0){
b[i][j]='0'+bool(a[i-1][j]=='*')+bool(a[i-1][j+1]=='*')+bool(a[i][j+1]=='*');
}
else{
b[i][j]='0'+bool(a[i-1][j-1]=='*')+bool(a[i-1][j]=='*')+bool(a[i][j-1]=='*');
}
}
}
}
}else b[i][j]='*';
}
}//计算周边地雷数
memset(a,'?',sizeof(a));
bool flag=1;
while(flag){
for(i=0;i<n;i++){
for(j=0;j<m;j++)cout<<a[i][j];
cout<<'\n';
}//当前状态
cout<<"请输入需要翻开的格子坐标:";
cin>>f>>u;
if(f<1||f>n||u<1||u>m||a[f-1][u-1]!='?'){
cout<<"请重新输入!\n";
}
else if(b[f-1][u-1]=='*'){
cout<<"翻到地雷,游戏结束\n";
flag=0;
continue;
}
else{
cout<<"附近地雷数:"<<b[f-1][u-1]<<'\n';
a[f-1][u-1]=b[f-1][u-1];
s++;
}
if((n*m-c)==s){
cout<<"恭喜通关!\n";
flag=0;
}//只剩地雷时通关
}
cout<<"复盘:\n";
for(i=0;i<n;i++){
for(j=0;j<m;j++)cout<<b[i][j];
cout<<'\n';
}
system("pause");//请按任意键继续...
return 0;
}
我保证,只要有那么一丢丢C++的知识,都能看懂的。
如需转载,请注明原处。