0
已解决
董子墨
中级天翼
中级天翼
扫雷2.1版本上线!
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int x1,x2,cnt=0,xx,c,d,cs_;
char a[10][10];
char w[10][10];
bool tw[10][10];
int dir[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
int nx,ny,t;
void out(string);
bool pd();
void xz(int,int);
int main(){
system("color 2E");
out("您已进入扫雷游戏,是否继续?\n1.继续 2.不继续\n");
cin>>t;
if(t==2)
return 0;
int sl,tt;
system("cls");
out("请输入你要玩几次(不能超过100):");
cin>>cs_;
system("cls");
if(cs_>100)cs_=1;
while(cs_--){
memset(a,'?',sizeof(a));
memset(w,' ',sizeof(w));
out("请输入你需要地雷的数量(不能超过63个,不能低于5个):");
cin>>sl;
if(sl<5||sl>63){
system("cls");
out("您的地雷数量不符合要求,请重新输入(不能超过63个,不能低于5个):");
cin>>sl;
if(sl<5||sl>63){
out("看不懂中文的不要玩我的游戏!!!");
Sleep(2000);
return 0;
}
}
srand(time(0));
system("cls");
out("请稍后.");
Sleep(29);
while(sl){
sl--;
nx=rand()%8+1;
ny=rand()%8+1;
if(w[nx][ny]!='h')w[nx][ny]='h';
else sl++;
}
cout<<".";
Sleep(30);
cout<<'.';
system("cls");
while(1){
if(pd())break;
for(int i=1;i<=8;i++){
cout<<"第"<<i<<"行 ";
for(int j=1;j<=8;j++)
cout<<' '<<a[i][j];
cout<<endl;
}
cout<<" ";
for(int i=1;i<=8;i++){
cout<<i;
cout<<' ';
}
cout<<endl;
out("请确定一个你选中的格子\n");
Sleep(1000);
out("请输入这个格子所在的行:");
cin>>x1;
cout<<"\n";
out("请输入这个格子所在的列:");
cin>>x2;
if(w[x1][x2]=='h'){
system("cls");
out("地雷爆炸了!!!");
Sleep(3000);
break;
}
else{
memset(tw,0,sizeof(tw));
xz(x1,x2);
}
system("cls");
}
out("成功啦!!!");
Sleep(3000);
system("cls");
}
out("你成功的完成了扫雷游戏,欢迎下次再来!!!");
return 0;
}//30
void out(string cut){
for(int i=0;i<cut.size();i++){
cout<<cut[i];
Sleep(30);
}
}
bool pd(){
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
if(a[i][j]=='?'&&w[i][j]==' ')return 0;
return 1;
}
void xz(int x,int y){
cnt=0;
for(int i=0;i<8;i++){
nx=x+dir[i][0];
ny=y+dir[i][1];
if(w[nx][ny]=='h')cnt++;
}
a[x][y]=cnt+'0';
if(cnt!=0)
return ;
tw[x][y]=1;
for(int i=0;i<8;i++){
nx=x+dir[i][0];
ny=y+dir[i][1];
if(nx>=1&&nx<=8&&ny>=1&&ny<=8&&!tw[nx][ny])
xz(nx,ny);
}
}
请大家提出建议,以便改进。
董子墨在2019-12-27 16:53:26追加了内容
2.2版本上线!
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int x1,x2,cnt=0,xx,c,d,cs_;
char a[10][10];
char w[10][10];
bool tw[10][10];
int dir[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
int nx,ny,t;
void out(string);
bool pd();
void xz(int,int);
bool k=1;
int main(){
system("color 2E");
out("您已进入扫雷游戏,是否继续?\n1.继续 2.不继续\n");
cin>>t;
if(t==2)
return 0;
int sl,tt;
system("cls");
out("请输入你要玩几次(不能超过100):");
cin>>cs_;
system("cls");
if(cs_>100||cs_<1)cs_=1;
while(cs_--){
memset(a,'?',sizeof(a));
memset(w,' ',sizeof(w));
out("请输入你需要地雷的数量(不能超过63个,不能低于5个):");
cin>>sl;
if(sl<5||sl>63){
system("cls");
out("您的地雷数量不符合要求,请重新输入(不能超过63个,不能低于5个):");
cin>>sl;
if(sl<5||sl>63){
out("看不懂中文的不要玩我的游戏!!!");
Sleep(2000);
return 0;
}
}
srand(time(0));
system("cls");
out("请稍后.");
Sleep(29);
while(sl){
sl--;
nx=rand()%8+1;
ny=rand()%8+1;
if(w[nx][ny]!='h')w[nx][ny]='h';
else sl++;
}
cout<<".";
Sleep(30);
cout<<'.';
system("cls");
k=1;
while(1){
if(pd())break;
for(int i=1;i<=8;i++){
cout<<"第"<<i<<"行 ";
for(int j=1;j<=8;j++)
cout<<' '<<a[i][j];
cout<<endl;
}
cout<<" ";
for(int i=1;i<=8;i++){
cout<<i;
cout<<' ';
}
cout<<endl;
out("请确定一个你选中的格子\n");
Sleep(1000);
out("请输入这个格子所在的行和列(格式:行 列):");
cin>>x1>>x2;
if(x1>8||x1<1||x2>8||x2<1){
cout<<"超出了地图范围!!!";
Sleep(1500);
system("cls");
continue;
}
if(w[x1][x2]=='h'){
system("cls");
for(int i=1;i<=8;i++){
for(int j=1;j<=8;j++){
if(w[i][j]=='h')
cout<<"雷";
else cout<<" ";
}
cout<<endl;
}
Sleep(3000);
break;
}
else{
memset(tw,0,sizeof(tw));
xz(x1,x2);
}
system("cls");
}
if(pd()){
out("成功啦!!!");
Sleep(3000);
}
system("cls");
}
out("你成功的完成了扫雷游戏,欢迎下次再来!!!");
return 0;
}//30
void out(string cut){
for(int i=0;i<cut.size();i++){
cout<<cut[i];
Sleep(30);
}
}
bool pd(){
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
if(a[i][j]=='?'&&w[i][j]==' ')return 0;
return 1;
}
void xz(int x,int y){
cnt=0;
for(int i=0;i<8;i++){
nx=x+dir[i][0];
ny=y+dir[i][1];
if(w[nx][ny]=='h')cnt++;
}
a[x][y]=cnt+'0';
if(cnt!=0)
return ;
tw[x][y]=1;
for(int i=0;i<8;i++){
nx=x+dir[i][0];
ny=y+dir[i][1];
if(nx>=1&&nx<=8&&ny>=1&&ny<=8&&!tw[nx][ny])
xz(nx,ny);
}
}
1
已采纳
乔俊驰
资深守护
资深守护
给个建议:
1.输入以确定位置的时候,建议用空格一起写上去,举个例子,比如说5 5(Enter)而不是5(Enter)5(Enter)
2扫雷扫雷就得“扫”,但这个只是把没有雷的格子点完就行了
3第一次点击的格子不能有雷!!!(这个走不能忍,扫雷最基本规则)
总的来说还是挺不错的
0
0
0