扫雷游戏源代码

扫雷代码

未登录的用户可以在代码段下方复制扫雷源码;

代码解析见扫雷_代码+解析_齐弈的博客-CSDN博客

扫雷游戏代码如下: 

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
using namespace std;
int x,y,l,l2;
bool s,c[11][11];
char a[11][11],b[11][11],f;
int dx[]={0,-1,1,-1,1,0,-1,1};
int dy[]={-1,-1,-1,0,0,1,1,1};
int q[150][2],hh,tt,kx,ky;
bool Map[11][11];
int statistics_1(int j,int i);
int statistics_2(int j,int i);
void around(int j,int i);
void csh();
void color(int r);
void gotoxy(int xx,int yy);
void _cout();
void _cin();
void _move();
void _cout2();
int main(){
	system("title 扫雷");
	while(true){
	    csh();
	    while(true){
	        _cout();
	        if(s){
	        	color(4);
	            printf("\nGame over!\n\n");
	            break;
	        }
	        if(l==0&&l==l2){
	        	color(14);
	            printf("\nWin!\n\n");
	            break;
	        }
	        _cin();
	        if(f=='1'||f==' '){
	        	for(int i=0;i<11;i++)
					for(int j=0;j<11;j++)
						Map[i][j]=true;
				q[0][0]=y;
	    		q[0][1]=x;
	    		hh=0;
	    		tt=1;
	    		_move();
			}
	    }
	    color(7);
	    system("pause");
	    _cout2();
		getch();
		system("cls"); 
	}
    return 0;
}
int statistics_1(int j,int i){
    return ((b[i+1][j]=='*')+(b[i-1][j]=='*')+(b[i][j+1]=='*')+(b[i][j-1]=='*')+(b[i+1][j+1]=='*')+(b[i+1][j-1]=='*')+(b[i-1][j+1]=='*')+(b[i-1][j-1]=='*'));
}
int statistics_2(int j,int i){
    return ((a[i+1][j]=='+')+(a[i-1][j]=='+')+(a[i][j+1]=='+')+(a[i][j-1]=='+')+(a[i+1][j+1]=='+')+(a[i+1][j-1]=='+')+(a[i-1][j+1]=='+')+(a[i-1][j-1]=='+'));
}
void around(int j,int i){
	for(int yy=-1;yy<=1;yy++){
		for(int xx=-1;xx<=1;xx++){
			if(b[i+yy][j+xx]!='*'&&c[i+yy][j+xx]&&statistics_1(j+xx,i+yy)<=statistics_2(j+xx,i+yy)&&i+yy<10&&i+yy>0&&j+xx<10&&j+xx>0){
				c[i+yy][j+xx]=false;
				around(j+xx,i+yy);
			}
			if(a[i+yy][j+xx]!='+'){
				a[i+yy][j+xx]=b[i+yy][j+xx];
				c[i+yy][j+xx]=false;
			}
		}
	}
    return;
}
void csh(){
    l=15;
	l2=15;
	s=false;
    CONSOLE_CURSOR_INFO cursor_info={1,0};
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
    for(int i=0;i<11;i++){
    	for(int j=0;j<11;j++){
        	a[i][j]='#';
			b[i][j]='0';
			c[i][j]=true;
		}
	} 
    srand(time(NULL));
    for(int i=0;i<l;){
        x=rand()%9+1;
		y=rand()%9+1;
        if(b[y][x]!='*'){
        	i++;
			b[y][x]='*';
		}
    }
    for(int i=1;i<=9;i++){
    	for(int j=1;j<=9;j++){
    		if(b[i][j]!='*'){
    			b[i][j]+=statistics_1(j,i);
			}
		}
	}
    x=5;
	y=5;
    color(7);
    gotoxy(3,42);
    printf("w , a , s , d 控 制 坐 标 移 动");
	gotoxy(7,42);
	printf("    1 键 插 旗 , 2 键 拔 旗 ."); 
	gotoxy(11,42);
	printf("      按 空 格 键 有 惊 喜");
    return;
}
void gotoxy(int i,int j){
    COORD position={j,i};
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),position);
    return;
}
void color(int r){
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),r);
	return;
}
void _cout(){
    for(int i=1;i<=9;i++){
        for(int j=1;j<=9;j++){
        	gotoxy(i*2-1,j*4-2);
            switch(a[i][j]){
                case '0':{
                	color(7);
					printf("□");
					break;
				}
                case '#':{
                	color(1);
					printf("■");
					break;
				}
                case '+':{
                	color(4);
					printf("◆");
					break;
				}
                case '*':{
                	color(4);
					printf("*");
					s=true;
					break;
				}
                case '1':{
                	color(1);
					printf("1");
					break;
				}
                case '2':{
                	color(2);
					printf("2");
					break;
				}
                case '3':{
                	color(4);
					printf("3");
					break;
				}
                case '4':{
                	color(1);
					printf("4");
					break;
				}
                case '5':{
                	color(4);
					printf("5");
					break;
				}
                case '6':{
                	color(1);
					printf("6");
					break;
				}
                case '7':{
                	color(7);
					printf("7");
					break;
				}
                case '8':{
                	color(7);
					printf("8");
					break;
				}
            }
        }
    }
    color(14);
    gotoxy(y*2-2,x*4-2);
    printf("┅");
    gotoxy(y*2-1,x*4-4);
    printf("┇");
    gotoxy(y*2-1,x*4);
    printf("┇");
    gotoxy(y*2,x*4-2);
    printf("┅");
    gotoxy(y*2-2,x*4-4);
    printf("◢");
    gotoxy(y*2-2,x*4);
    printf("◣");
    gotoxy(y*2,x*4-4);
    printf("◥");
    gotoxy(y*2,x*4);
    printf("◤");
    gotoxy(19,25);
    color(4);
    printf("剩余雷数:%d \n",l2);
    return;
}
void _cin(){
    f=getch();
    color(14);
    gotoxy(y*2-2,x*4-2);
    printf("  ");
    gotoxy(y*2-1,x*4-4);
    printf("  ");
    gotoxy(y*2-1,x*4);
    printf("  ");
    gotoxy(y*2,x*4-2);
    printf("  ");
    gotoxy(y*2-2,x*4-4);
    printf("  ");
    gotoxy(y*2-2,x*4);
    printf("  ");
    gotoxy(y*2,x*4-4);
    printf("  ");
    gotoxy(y*2,x*4);
    printf("  ");
    switch(f){
        case 'W':case 'w':{
        	if(y>1)
				y--;
			break;
		}
        case 'S':case 's':{
        	if(y<9)
				y++;
			break;
		}
        case 'A':case 'a':{
        	if(x>1)
				x--;
			break;
		}
        case 'D':case 'd':{
        	if(x<9)
				x++;
			break;
		}
        case '1':{
        	if(c[y][x]){
        		if(b[y][x]=='*')
					l--;
	        	l2--;
				a[y][x]='+';
				c[y][x]=false;
			}
			break;
		}
        case '2':{
        	if(a[y][x]=='+'){
        		c[y][x]=true;
        		a[y][x]='#';
        		l2++;
        		if(b[y][x]=='*')
        			l++;
        		c[y][x]=true;
        	}
			break;
		}
        case ' ':{
        	if(a[y][x]!='+'){
        		a[y][x]=b[y][x];
				c[y][x]=false;
	            if(b[y][x]=='*')
					s=true;
	            if(statistics_1(x,y)<=statistics_2(x,y)&&b[y][x]!='*')
					around(x,y);
			}
			break;
		}
        default:break;
    }
    return;
}
void _move(){
	if(hh==tt)
        return;
    kx=q[hh][1];
    ky=q[hh][0];
    hh++;
    for(int i=0;i<8;i++){
        int xx=kx+dx[i];
        int yy=ky+dy[i];
        if(xx>0&&xx<10&&yy>0&&yy<10&&Map[yy][xx]){
            tt++;
            q[tt-1][0]=yy;
            q[tt-1][1]=xx;
            Map[yy][xx]=false;
            if(c[yy][xx]){
            	y=yy;
            	x=xx;
            	return;
			}
        }
    }
    _move();
    return;
}
void _cout2(){
	color(14);
    gotoxy(y*2-2,x*4-2);
    printf("  ");
    gotoxy(y*2-1,x*4-4);
    printf("  ");
    gotoxy(y*2-1,x*4);
    printf("  ");
    gotoxy(y*2,x*4-2);
    printf("  ");
    gotoxy(y*2-2,x*4-4);
    printf("  ");
    gotoxy(y*2-2,x*4);
    printf("  ");
    gotoxy(y*2,x*4-4);
    printf("  ");
    gotoxy(y*2,x*4);
    printf("  ");
    for(int i=1;i<=9;i++){
        for(int j=1;j<=9;j++){
        	gotoxy(i*2-1,j*4-2);
            switch(b[i][j]){
                case '0':{
                	color(7);
					printf("□");
					break;
				}
                case '#':{
                	color(1);
					printf("■");
					break;
				}
                case '*':{
                	color(4);
					printf("*");
					break;
				}
                case '1':{
                	color(1);
					printf("1");
					break;
				}
                case '2':{
                	color(2);
					printf("2");
					break;
				}
                case '3':{
                	color(4);
					printf("3");
					break;
				}
                case '4':{
                	color(1);
					printf("4");
					break;
				}
                case '5':{
                	color(4);
					printf("5");
					break;
				}
                case '6':{
                	color(1);
					printf("6");
					break;
				}
                case '7':{
                	color(7);
					printf("7");
					break;
				}
                case '8':{
                	color(7);
					printf("8");
					break;
				}
            }
        }
    }
    return;
}

---------------------------------------------------------------------------------------------------------------------------------

未登录用户复制

扫雷游戏代码如下:

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
using namespace std;
int x,y,l,l2;
bool s,c[11][11];
char a[11][11],b[11][11],f;
int dx[]={0,-1,1,-1,1,0,-1,1};
int dy[]={-1,-1,-1,0,0,1,1,1};
int q[150][2],hh,tt,kx,ky;
bool Map[11][11];
int statistics_1(int j,int i);
int statistics_2(int j,int i);
void around(int j,int i);
void csh();
void color(int r);
void gotoxy(int xx,int yy);
void _cout();
void _cin();
void _move();
void _cout2();
int main(){
    system("title 扫雷");
    while(true){
        csh();
        while(true){
            _cout();
            if(s){
                color(4);
                printf("\nGame over!\n\n");
                break;
            }
            if(l==0&&l==l2){
                color(14);
                printf("\nWin!\n\n");
                break;
            }
            _cin();
            if(f=='1'||f==' '){
                for(int i=0;i<11;i++)
                    for(int j=0;j<11;j++)
                        Map[i][j]=true;
                q[0][0]=y;
                q[0][1]=x;
                hh=0;
                tt=1;
                _move();
            }
        }
        color(7);
        system("pause");
        _cout2();
        getch();
        system("cls"); 
    }
    return 0;
}
int statistics_1(int j,int i){
    return ((b[i+1][j]=='*')+(b[i-1][j]=='*')+(b[i][j+1]=='*')+(b[i][j-1]=='*')+(b[i+1][j+1]=='*')+(b[i+1][j-1]=='*')+(b[i-1][j+1]=='*')+(b[i-1][j-1]=='*'));
}
int statistics_2(int j,int i){
    return ((a[i+1][j]=='+')+(a[i-1][j]=='+')+(a[i][j+1]=='+')+(a[i][j-1]=='+')+(a[i+1][j+1]=='+')+(a[i+1][j-1]=='+')+(a[i-1][j+1]=='+')+(a[i-1][j-1]=='+'));
}
void around(int j,int i){
    for(int yy=-1;yy<=1;yy++){
        for(int xx=-1;xx<=1;xx++){
            if(b[i+yy][j+xx]!='*'&&c[i+yy][j+xx]&&statistics_1(j+xx,i+yy)<=statistics_2(j+xx,i+yy)&&i+yy<10&&i+yy>0&&j+xx<10&&j+xx>0){
                c[i+yy][j+xx]=false;
                around(j+xx,i+yy);
            }
            if(a[i+yy][j+xx]!='+'){
                a[i+yy][j+xx]=b[i+yy][j+xx];
                c[i+yy][j+xx]=false;
            }
        }
    }
    return;
}
void csh(){
    l=15;
    l2=15;
    s=false;
    CONSOLE_CURSOR_INFO cursor_info={1,0};
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
    for(int i=0;i<11;i++){
        for(int j=0;j<11;j++){
            a[i][j]='#';
            b[i][j]='0';
            c[i][j]=true;
        }
    } 
    srand(time(NULL));
    for(int i=0;i<l;){
        x=rand()%9+1;
        y=rand()%9+1;
        if(b[y][x]!='*'){
            i++;
            b[y][x]='*';
        }
    }
    for(int i=1;i<=9;i++){
        for(int j=1;j<=9;j++){
            if(b[i][j]!='*'){
                b[i][j]+=statistics_1(j,i);
            }
        }
    }
    x=5;
    y=5;
    color(7);
    gotoxy(3,42);
    printf("w , a , s , d 控 制 坐 标 移 动");
    gotoxy(7,42);
    printf("    1 键 插 旗 , 2 键 拔 旗 ."); 
    gotoxy(11,42);
    printf("      按 空 格 键 有 惊 喜");
    return;
}
void gotoxy(int i,int j){
    COORD position={j,i};
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),position);
    return;
}
void color(int r){
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),r);
    return;
}
void _cout(){
    for(int i=1;i<=9;i++){
        for(int j=1;j<=9;j++){
            gotoxy(i*2-1,j*4-2);
            switch(a[i][j]){
                case '0':{
                    color(7);
                    printf("□");
                    break;
                }
                case '#':{
                    color(1);
                    printf("■");
                    break;
                }
                case '+':{
                    color(4);
                    printf("◆");
                    break;
                }
                case '*':{
                    color(4);
                    printf("*");
                    s=true;
                    break;
                }
                case '1':{
                    color(1);
                    printf("1");
                    break;
                }
                case '2':{
                    color(2);
                    printf("2");
                    break;
                }
                case '3':{
                    color(4);
                    printf("3");
                    break;
                }
                case '4':{
                    color(1);
                    printf("4");
                    break;
                }
                case '5':{
                    color(4);
                    printf("5");
                    break;
                }
                case '6':{
                    color(1);
                    printf("6");
                    break;
                }
                case '7':{
                    color(7);
                    printf("7");
                    break;
                }
                case '8':{
                    color(7);
                    printf("8");
                    break;
                }
            }
        }
    }
    color(14);
    gotoxy(y*2-2,x*4-2);
    printf("┅");
    gotoxy(y*2-1,x*4-4);
    printf("┇");
    gotoxy(y*2-1,x*4);
    printf("┇");
    gotoxy(y*2,x*4-2);
    printf("┅");
    gotoxy(y*2-2,x*4-4);
    printf("◢");
    gotoxy(y*2-2,x*4);
    printf("◣");
    gotoxy(y*2,x*4-4);
    printf("◥");
    gotoxy(y*2,x*4);
    printf("◤");
    gotoxy(19,25);
    color(4);
    printf("剩余雷数:%d \n",l2);
    return;
}
void _cin(){
    f=getch();
    color(14);
    gotoxy(y*2-2,x*4-2);
    printf("  ");
    gotoxy(y*2-1,x*4-4);
    printf("  ");
    gotoxy(y*2-1,x*4);
    printf("  ");
    gotoxy(y*2,x*4-2);
    printf("  ");
    gotoxy(y*2-2,x*4-4);
    printf("  ");
    gotoxy(y*2-2,x*4);
    printf("  ");
    gotoxy(y*2,x*4-4);
    printf("  ");
    gotoxy(y*2,x*4);
    printf("  ");
    switch(f){
        case 'W':case 'w':{
            if(y>1)
                y--;
            break;
        }
        case 'S':case 's':{
            if(y<9)
                y++;
            break;
        }
        case 'A':case 'a':{
            if(x>1)
                x--;
            break;
        }
        case 'D':case 'd':{
            if(x<9)
                x++;
            break;
        }
        case '1':{
            if(c[y][x]){
                if(b[y][x]=='*')
                    l--;
                l2--;
                a[y][x]='+';
                c[y][x]=false;
            }
            break;
        }
        case '2':{
            if(a[y][x]=='+'){
                c[y][x]=true;
                a[y][x]='#';
                l2++;
                if(b[y][x]=='*')
                    l++;
                c[y][x]=true;
            }
            break;
        }
        case ' ':{
            if(a[y][x]!='+'){
                a[y][x]=b[y][x];
                c[y][x]=false;
                if(b[y][x]=='*')
                    s=true;
                if(statistics_1(x,y)<=statistics_2(x,y)&&b[y][x]!='*')
                    around(x,y);
            }
            break;
        }
        default:break;
    }
    return;
}
void _move(){
    if(hh==tt)
        return;
    kx=q[hh][1];
    ky=q[hh][0];
    hh++;
    for(int i=0;i<8;i++){
        int xx=kx+dx[i];
        int yy=ky+dy[i];
        if(xx>0&&xx<10&&yy>0&&yy<10&&Map[yy][xx]){
            tt++;
            q[tt-1][0]=yy;
            q[tt-1][1]=xx;
            Map[yy][xx]=false;
            if(c[yy][xx]){
                y=yy;
                x=xx;
                return;
            }
        }
    }
    _move();
    return;
}
void _cout2(){
    color(14);
    gotoxy(y*2-2,x*4-2);
    printf("  ");
    gotoxy(y*2-1,x*4-4);
    printf("  ");
    gotoxy(y*2-1,x*4);
    printf("  ");
    gotoxy(y*2,x*4-2);
    printf("  ");
    gotoxy(y*2-2,x*4-4);
    printf("  ");
    gotoxy(y*2-2,x*4);
    printf("  ");
    gotoxy(y*2,x*4-4);
    printf("  ");
    gotoxy(y*2,x*4);
    printf("  ");
    for(int i=1;i<=9;i++){
        for(int j=1;j<=9;j++){
            gotoxy(i*2-1,j*4-2);
            switch(b[i][j]){
                case '0':{
                    color(7);
                    printf("□");
                    break;
                }
                case '#':{
                    color(1);
                    printf("■");
                    break;
                }
                case '*':{
                    color(4);
                    printf("*");
                    break;
                }
                case '1':{
                    color(1);
                    printf("1");
                    break;
                }
                case '2':{
                    color(2);
                    printf("2");
                    break;
                }
                case '3':{
                    color(4);
                    printf("3");
                    break;
                }
                case '4':{
                    color(1);
                    printf("4");
                    break;
                }
                case '5':{
                    color(4);
                    printf("5");
                    break;
                }
                case '6':{
                    color(1);
                    printf("6");
                    break;
                }
                case '7':{
                    color(7);
                    printf("7");
                    break;
                }
                case '8':{
                    color(7);
                    printf("8");
                    break;
                }
            }
        }
    }
    return;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值