自制的扫雷游戏,有点粗糙
有改进建议的小伙伴可以在评论区给出建议
#include<stdio.h>
#include<iostream>
#include<iomanip>
#include<math.h>
#include<string>
#include<cstring>
#include<stdlib.h>
#include<time.h>
using namespace std;
int n,c,b,d,e,f,g,h,l,o,u,v=1,j;
int main(){
cout<<"注:本扫雷第一次是有几率是雷的,如果遇到是因为你是非酋"<<endl;
cout<<"请输入你想玩多少行多少列的扫雷(行数大于10,列数大于10):"<<endl;
cin>>o>>u;
char p[o][u];
int a[o][u];
for(int i=0;i<o;i++)
for(int k=0;k<u;k++)
a[i][k]=-1;
for(int i=0;i<o;i++)
for(int k=0;k<u;k++)
p[i][k]='*';
cout<<"请输入难度(雷的数量)(不能小于5个,不能大于100个):"<<endl;
cin>>n;
if(n>100||n<=5){
cout<<"爬" ;
return 0;
}
for(int i=0;i<o;i++){
for(int k=0;k<u;k++)
cout<<p[i][k];
cout<<endl;
}
srand(time(0));
for(int i=0;i<n;i++){
b=rand()%(o-i);
c=rand()%(u-i);
a[c][b]=11;
}
for(d=1;d<=o;d++)
for(e=1;e<=u;e++){
f=0;
if(a[d-1][e-1]==11)
continue;
if((d-2)>=0)
if((e-2)>=0)
if(a[d-2][e-2]==11)
f++;
if((d-2)>=0)
if(a[d-2][e-1]==11)
f++;
if((d-2)>=0)
if(e<u)
if(a[d-2][e]==11)
f++;
if((e-2)>=0)
if(a[d-1][e-2]==11)
f++;
if(e<u)
if(a[d-1][e]==11)
f++;
if((e-2)>=0)
if(d<o)
if(a[d][e-2]==11)
f++;
if(d<o)
if(a[d][e-1]==11)
f++;
if(e<u)
if(d<o)
if(a[d][e]==11)
f++;
a[d-1][e-1]=f;
}
do{
cout<<"请输入行数和列数,然后输入是否为雷,是则输入1,否则输入0:"<<endl;
cin>>g>>h>>j;
if(g>o||g<1||h>u||h<1){
cout<<"爬" <<endl;
return 0;
}
if((a[g-1][h-1]==11||p[g-1][h-1]=='#'||p[g-1][h-1]=='$')&&j==0){
cout<<"菜鸡,你不行啊";
return 0;
}
else{
if(j==1)
p[g-1][h-1]='@';
else{
p[g-1][h-1]='#';
if(a[g-1][h-1]!=0){
if((g-2)>=0)
if(a[g-2][h-1]==0){
l=1;
p[g-2][h-1]='#';
}
if((g-2)>=0&&(h-2)>=0)
if(a[g-2][h-2]==0){
l=1;
p[g-2][h-2]='#';
}
if((g-2)>=0&&h<u)
if(a[g-2][h]==0){
l=1;
p[g-2][h]='#';
}
if((h-2)>=0)
if(a[g-1][h-2]==0){
p[g-1][h-2]='#';
}
if(h<u)
if(a[g-1][h]==0){
p[g-1][h]='#';
}
if(g<o)
if(a[g][h-1]==0){
p[g][h-1]='#';
}
if(g<o&&(h-2)>=0)
if(a[g][h-2]==0){
p[g][h-2]='#';
}
if(g<o&&h<u)
if(a[g][h]==0){
p[g][h]='#';
}
p[g-1][h-1]='$';
}
do{
l=0;
for(int x=1;x<=o;x++)
for(int y=1;y<=u;y++){
if(p[x-1][y-1]=='#'&&a[x-1][y-1]==0){
if((x-2)>=0)
if(a[x-2][y-1]!=11&&a[x-2][y-1]!=12&&p[x-2][y-1]!='$'&&p[x-2][y-1]!='@'){
l=1;
p[x-2][y-1]='#';
}
if((x-2)>=0&&(y-2)>=0)
if(a[x-2][y-2]!=11&&a[x-2][y-2]!=12&&p[x-2][y-2]!='$'&&p[x-2][y-2]!='@'){
l=1;
p[x-2][y-2]='#';
}
if((x-2)>=0&&y<u)
if(a[x-2][y]!=11&&a[x-2][y]!=12&&p[x-2][y]!='$'&&p[x-2][y]!='@'){
l=1;
p[x-2][y]='#';
}
if((y-2)>=0)
if(a[x-1][y-2]!=11&&a[x-1][y-2]!=12&&p[x-1][y-2]!='$'&&p[x-1][y-2]!='@'){
l=1;
p[x-1][y-2]='#';
}
if(y<u)
if(a[x-1][y]!=11&&a[x-1][y]!=12&&p[x-1][y]!='$'&&p[x-1][y]!='@'){
l=1;
p[x-1][y]='#';
}
if(x<o)
if(a[x][y-1]!=11&&a[x][y-1]!=12&&p[x][y-1]!='$'&&p[x][y-1]!='@'){
l=1;
p[x][y-1]='#';
}
if(x<o&&(y-2)>=0)
if(a[x][y-2]!=11&&a[x][y-2]!=12&&p[x][y-2]!='$'&&p[x][y-2]!='@'){
l=1;
p[x][y-2]='#';
}
if(x<o&&y<o)
if(a[x][y]!=11&&a[x][y]!=12&&p[x][y]!='$'&&p[x][y]!='@'){
l=1;
p[x][y]='#';
}
a[x-1][y-1]=12;
}
}
}while(l==1);
}
for(int i=0;i<o;i++){
for(int k=0;k<u;k++){
if(p[i][k]=='#'){
if(a[i][k]==12)
cout<<"0";
else
cout<<a[i][k];
}else if(p[i][k]=='$'){
if(a[i][k]==12)
cout<<"0";
else
cout<<a[i][k];
}
else
cout<<p[i][k];
}
cout<<endl;
}
}
for(int i=0;i<o;i++){
for(int k=0;k<u;k++)
if(a[i][k]==11||p[i][k]=='#'||p[i][k]=='$'){
v=0;
}else{
v=1;
break;
}
if(v==1)
break;
}
}while(v==1);
cout<<"nb";
}