C++无聊之作-扫雷

听说发布自编游戏可以刷阅读量。。。

我*这么玄学的吗,那我也试一试~~

希望不要被老师骂不正经。。。

《扫雷》这款游戏大家都听说过吧,就是很益智的一个游戏。

我用C++编写了一个《扫雷》的代码,有编译器的可以copy下来玩玩~

#include<conio.h>
#include<bits/stdc++.h>
#include<windows.h>
#include<ctime>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)//KEY_DOWN(MOUSE_MOVED)
using namespace std;//GetCursorPos(&p)
//SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
//GetAsyncKeyState('W') & 0x8000
double x,y; 
void gt(int y,int x){
	COORD c;
	c.X=x;
	c.Y=y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}
void getAddofMouse() {	
/**/POINT pt;HWND h=GetForegroundWindow(); GetCursorPos(&pt); ScreenToClient(h,&pt);
/**/x=double(pt.y)/16,y=double(pt.x)/16;
/**/return;
}
bool a[50][50],f[50][50];
int b[50][50],i,j,h,k=225,d[8][2]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};
void dfs(int c,int g){
	if(c<1||c>15||g<1||g>15)return;
	if(b[c][g]==-1)return;
	if(f[c][g])return;
	f[c][g]=1;
	a[c][g]=1;
	gt(c-1,g*2-2);
	printf(" %c",b[c][g]==0?' ':char(b[c][g]+48));
	if(b[c][g]>0)return;
	for(int o=0;o<8;o++){
		dfs(c+d[o][0],g+d[o][1]);
	}
}
int main()
{
	srand(time(0));
	for(i=1;i<=7;i++)printf("\n");
	for(i=1;i<=7;i++)printf(" ");
	printf("新版扫雷\n");
	system("pause");
	system("cls");
	for(i=1;i<=25;i++){
		int u=rand()%15+1,v=rand()%15+1;
		while(b[u][v]==-1)u=rand()%15+1,v=rand()%15+1;
		b[u][v]=-1;
	}
	for(i=1;i<=15;i++){
		for(j=1;j<=15;j++){
			if(b[i][j]==0)
				for(h=0;h<8;h++)
					if(b[i+d[h][0]][j+d[h][1]]==-1)b[i][j]++;
			printf("■");
		}
		printf("\n");
	}
	while(k!=25){
		if(KEY_DOWN(MOUSE_MOVED)){
			getAddofMouse();
			//gt(16,0);
			//printf("%d %d   ",int(x),int(y));
			a[int(x)+1][int(y)+1]=1;
			if(b[int(x)+1][int(y)+1]==-1){
				printf(">>");
				gt(int(x),int(y)*2);
				printf("·");
				Sleep(100);
				gt(int(x),int(y)*2);
				printf("●");
				Sleep(100);
				gt(int(x),int(y)*2);
				printf("○");
				Sleep(100);
				gt(15,32);
				return 0;
			}
			else{
				memset(f,0,sizeof(f));
				//printf("------");
				dfs(int(x)+1,int(y)+1);
			}
		}
		//gt(16,0);
		//printf("%d %d   ",int(x),int(y));
		k=0;
		for(i=1;i<=15;i++)
			for(j=1;j<=15;j++)
				if(!a[i][j])k++;
		gt(15,32);
	}
	gt(0,0);
	for(i=1;i<=15;i++){
		for(j=1;j<=15;j++){
			if(b[i][j]==-1)printf("¥");
			else printf("  ");
		}
		Sleep(50);
		printf("\n");
	}
	printf("成功!!");
	return 0;
}

运行:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值