专栏文章

minesweeper

科技·工程参与者 2已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
2 条
当前快照
1 份
快照标识符
@min7t8ag
此快照首次捕获于
2025/12/01 21:58
3 个月前
此快照最后确认于
2025/12/01 21:58
3 个月前
查看原文

-1.x

-1.0.0

CPP
/*
Compiler: C++17 +
*/

#include<iostream>
#include<windows.h>
#include<conio.h>
#include<ctime>
#include<cstdlib>
#include<cstring> 
using namespace std;

struct game_set{
	int n,m,cnt;
};

int fl[60][60];
int status[60][60];

bool judgeAdj(int x1,int y1,int x2,int y2){
	return max(abs(x1-x2),abs(y1-y2))<=1;
}

int limit(int mod){
	return RAND_MAX-RAND_MAX%mod;
}

bool judgeKdLt(char ch,char tgt){
	return ch==tgt||ch==tgt-32;
}

bool judgeKd(char ch,char tgt){
	return ch==tgt;
}

game_set menu(){
	cout<<"Minesweeper -1.0.\n";
	cout<<"[0] Easy   (9,9,10)\n";
	cout<<"[1] Medium (16,16,40)\n";
	cout<<"[2] Expert (16,30,99)\n";
	cout<<"[3] Custom\n";
	char ch=getch();
	while(1){
		if(judgeKd(ch,'0'))return {9,9,10};
		else if(judgeKd(ch,'1'))return {16,16,40};
		else if(judgeKd(ch,'2'))return {16,30,99};
		else if(judgeKd(ch,'3')){
			system("clear");
			game_set gs;
			cout<<"Row:";cin>>gs.n;
			cout<<"Column:";cin>>gs.m;
			cout<<"Mine count:";cin>>gs.cnt;
			return gs;
		}else{
			system("clear");
			cout<<"Minesweeper 0.0.\n";
			cout<<"[0] Easy   (9,9,10)\n";
			cout<<"[1] Medium (16,16,40)\n";
			cout<<"[2] Expert (16,30,99)\n";
			cout<<"[3] Custom\n";
			cout<<"(Invaild operation)\n";
			ch=getch();
		}
	}
}

void game_init(game_set gs,int fx,int fy){
	auto [n,m,cnt]=gs;
	system("clear");
	memset(fl,0,sizeof fl);
	memset(status,0,sizeof status);
	while(cnt--){
		int cx,cy;
		do{
			cx=rand(),cy=rand(); 
		}while(cx<limit(n)&&cy<limit(m)&&!judgeAdj(cx,cy,fx,fy));
		fl[cx][cy]=-1;
		cnt--;
	}
	for(int i=0;i<n;i++)for(int j=0;j<m;j++){
		if(fl[i][j]==-1)continue;
		for(int ii=max(0,i-1);ii<=min(n-1,i+1);ii++)for(int jj=max(0,j-1);jj<=min(m-1,j+1);jj++){
			if(fl[ii][jj]==-1)fl[i][j]++;
		}
	}
}

int main(){
	game_set gs=menu();
	game_init(gs,0,0);
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(fl[i][j]==-1)cout<<"* ";
			else if(fl[i][j]==0)cout<<". ";
			else cout<<fl[i][j]<<" ";
		}
		cout<<"\n\n";
	} 
}

-1.0.1

CPP
/*
Compiler: C++17 +
*/

#include<iostream>
#include<windows.h>
#include<conio.h>
#include<ctime>
#include<cstdlib>
#include<cstring> 
using namespace std;
#define c++14

struct game_set{
	int n,m,cnt;
};

int fl[60][60];
int status[60][60];

bool judgeAdj(int x1,int y1,int x2,int y2){
	return max(abs(x1-x2),abs(y1-y2))<=1;
}

int limit(int mod){
	return RAND_MAX-RAND_MAX%mod;
}

bool judgeKdLt(char ch,char tgt){
	return ch==tgt||ch==tgt-32;
}

bool judgeKd(char ch,char tgt){
	return ch==tgt;
}

game_set menu(){
	cout<<"Minesweeper -1.0.\n";
	cout<<"[0] Easy   (9,9,10)\n";
	cout<<"[1] Medium (16,16,40)\n";
	cout<<"[2] Expert (16,30,99)\n";
	cout<<"[3] Custom\n";
	char ch=getch();
	while(1){
		if(judgeKd(ch,'0'))return {9,9,10};
		else if(judgeKd(ch,'1'))return {16,16,40};
		else if(judgeKd(ch,'2'))return {16,30,99};
		else if(judgeKd(ch,'3')){
			system("clear");
			game_set gs;
			cout<<"Row:";cin>>gs.n;
			cout<<"Column:";cin>>gs.m;
			cout<<"Mine count:";cin>>gs.cnt;
			return gs;
		}else{
			system("clear");
			cout<<"Minesweeper 0.0.\n";
			cout<<"[0] Easy   (9,9,10)\n";
			cout<<"[1] Medium (16,16,40)\n";
			cout<<"[2] Expert (16,30,99)\n";
			cout<<"[3] Custom\n";
			cout<<"(Invaild operation)\n";
			ch=getch();
		}
	}
}

void game_init(game_set gs,int fx,int fy){
	int n=gs.n,m=gs.m,cnt=gs.cnt;
	system("cls");
	memset(fl,0,sizeof fl);
	memset(status,0,sizeof status);
	while(cnt--){
		int cx,cy;
		do{
			cx=rand(),cy=rand(); 
			cout<<cx<<" "<<cy<<"\n";
		}while(cx<limit(n)&&cy<limit(m)&&!judgeAdj(cx,cy,fx,fy));
		fl[cx][cy]=-1;
		cnt--;
	}
	for(int i=0;i<n;i++)for(int j=0;j<m;j++){
		if(fl[i][j]==-1)continue;
		for(int ii=max(0,i-1);ii<=min(n-1,i+1);ii++)for(int jj=max(0,j-1);jj<=min(m-1,j+1);jj++){
			if(fl[ii][jj]==-1)fl[i][j]++;
		}
	}
}

int main(){
	srand(time(0));
	game_set gs=menu();
	game_init(gs,0,0);
	int n=gs.n,m=gs.m,cnt=gs.cnt;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(fl[i][j]==-1)cout<<"* ";
			else if(fl[i][j]==0)cout<<". ";
			else cout<<fl[i][j]<<" ";
		}
		cout<<"\n\n";
	} 
}

-1.2.0

CPP
/*
Compiler: C++14 +
*/

#include<iostream>
#include<windows.h>
#include<conio.h>
#include<ctime>
#include<cstdlib>
#include<cstring> 
using namespace std;
#define c++14

struct game_set{
	int n,m,cnt;
};

int fl[1010][1010];
int status[1010][1010];

bool judgeAdj(int x1,int y1,int x2,int y2){
	return max(abs(x1-x2),abs(y1-y2))<=1;
}

int limit(int mod){
	return RAND_MAX-RAND_MAX%mod;
}

bool judgeKdLt(char ch,char tgt){
	return ch==tgt||ch==tgt-32;
}

bool judgeKd(char ch,char tgt){
	return ch==tgt;
}

game_set menu(){
	cout<<"Minesweeper -1.0.2.\n";
	cout<<"[1] Easy   (9,9,10)\n";
	cout<<"[2] Medium (16,16,40)\n";
	cout<<"[3] Expert (16,30,99)\n";
	cout<<"[4] Custom\n";
	char ch=getch();
	while(1){
		if(judgeKd(ch,'1'))return {9,9,10};
		else if(judgeKd(ch,'2'))return {16,16,40};
		else if(judgeKd(ch,'3'))return {16,30,99};
		else if(judgeKd(ch,'4')){
			system("cls");
			game_set gs;
			cout<<"Row:";cin>>gs.n;
			cout<<"Column:";cin>>gs.m;
			cout<<"Mine count:";cin>>gs.cnt;
			while(gs.n>=100||gs.m>=100||gs.cnt>gs.n*gs.m-9){
				system("cls");
				cout<<"Too large!\n";
				cout<<"Row:";cin>>gs.n;
				cout<<"Column:";cin>>gs.m;
				cout<<"Mine count:";cin>>gs.cnt;
			}
			return gs;
		}else{
			system("cls");
			cout<<"Minesweeper -1.0.2.\n";
			cout<<"[1] Easy   (9,9,10)\n";
			cout<<"[2] Medium (16,16,40)\n";
			cout<<"[3] Expert (16,30,99)\n";
			cout<<"[4] Custom\n\n";
			cout<<"(Invaild operation)\n";
			ch=getch();
		}
	}
}

void game_init(game_set gs,int fx,int fy){
	int n=gs.n,m=gs.m,cnt=gs.cnt;
	system("cls");
	memset(fl,0,sizeof fl);
	memset(status,0,sizeof status);
	while(cnt--){
		int cx,cy;
		do{
			cx=rand(),cy=rand(); 
//			cout<<cx<<" "<<cy<<" "<<limit(n)<<" "<<limit(m)<<"\n";
		}while(!(cx<limit(n)&&cy<limit(m)&&!judgeAdj(cx%n,cy%m,fx,fy)));
		fl[cx%n][cy%m]=-1;
//		cout<<"[ok] "<<cnt<<"\n";
	}
	for(int i=0;i<n;i++)for(int j=0;j<m;j++){
		if(fl[i][j]==-1)continue;
		for(int ii=max(0,i-1);ii<=min(n-1,i+1);ii++)for(int jj=max(0,j-1);jj<=min(m-1,j+1);jj++){
			if(fl[ii][jj]==-1)fl[i][j]++;
		}
	}
}

int main(){
	srand(time(0));
	game_set gs=menu();
	game_init(gs,8,15);
	int n=gs.n,m=gs.m,cnt=gs.cnt;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(fl[i][j]==-1)cout<<"*  ";
			else if(fl[i][j]==0)cout<<".  ";
			else cout<<fl[i][j]<<"  ";
		}
		cout<<"\n\n";
	} 
}

评论

2 条评论,欢迎与作者交流。

正在加载评论...