经典简易扫雷游戏

自制的扫雷游戏,有点粗糙

有改进建议的小伙伴可以在评论区给出建议

#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";
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值