用C++实现一个简易版本的扫雷游戏

写的代码较烂,仅供参考

#include <iostream>
#include <vector>
#include<time.h>
#include<algorithm>

using namespace std;

vector<vector<char>> platform;


int ShowPlatform(vector<vector<char>> &platform){
	for(int i=0;i<platform.size();++i){
		for(int j=0;j<platform[0].size();++j){
			cout<<platform[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
}

// vector<vector<char>> GenerateLandMine(int k,vector<vector<char>> platform){
vector<int> GenerateLandMine(int k){
	vector<int> landmine1d;
	// vector<vector<char>> res;
	for(int i=0;i<100;++i){
		// int n=(rand())%100;
		landmine1d.push_back(i);
	}
	random_shuffle(landmine1d.begin(),landmine1d.end());
	// res=platform;
	// for(int i=0;i<10;++i){
	// 	res[landmine1d[i]/10][landmine1d[i]%10]='x';
		
	// }	
	vector<int> res;
	for(int i=0;i<10;++i){
		res.push_back(landmine1d[i]);
	}
	return res;
}


int get_cow(int sum){
	return sum%10;
}
int get_rol(int sum){
	return sum/10;
}

int IsSame(vector<vector<int>> mychose,vector<vector<int>> mine){
	int hash[100]={0};
	int res=0;
	vector<int> chose1d;
	for(int i=0;i<mychose.size();++i){
		chose1d.push_back( mychose[i][0]*10+mychose[i][1]);
		++hash[mychose[i][0]*10+mychose[i][1]];
	}
	vector<int> mine1d;
	for(int i=0;i<mine.size();++i){
		mine1d.push_back( mine[i][0]*10+mine[i][1]);
		++hash[mine[i][0]*10+mine[i][1]];
	}
	for(int i=0;i<100;++i){
		if(hash[i]==2){
			++res;
		}
	}
	
	

	
	return res;
}


vector<vector<int>> Choosen_9_dot(int choosen){
	vector<vector<int>> choosen_9_dot;
	int x1=get_cow(choosen);
	int y1=get_rol(choosen);
	for(int i=-1;i<2;++i){
		for(int j=-1;j<2;++j){
			vector<int> vec={};
			int x21=0;
			int y21=0;
			x21=x1+i;
			y21=y1+j;
			if(i==0 && j==0){
				continue;
			}
			if(x21<0 || y21<0){
				continue;
			}
			vec.push_back(x21);
			vec.push_back(y21);
			choosen_9_dot.push_back(vec);
		}
	}
	return choosen_9_dot;
}




int Is_land_mine(int choosen,vector<int>landmine){
	int res=0;
	int x1=get_cow(choosen);
	int y1=get_rol(choosen);
	vector<vector<int>> choosen_9_dot;
	choosen_9_dot=Choosen_9_dot(choosen);


	vector<vector<int>> landmine2d;
	for(int i=0;i<landmine.size();++i){
		int x=get_cow(landmine[i]);
		int y=get_rol(landmine[i]);
		vector<int> vec={};
		vec.push_back(x);
		vec.push_back(y);
		if(x1==x && y1==y){
			cout<<"踩到雷了!"<<endl;
			cout"x:"<<x1<<"  y:"<<y1<<endl;
			cout<<"游戏结束!"<<endl;
			for(int j=0;j<10;++j){
				platform[landmine[j]/10][landmine[j]%10]='x';

				
			}	
			cout<<"--------------------------"<<endl;
			cout<<"0 1 2 3 4 5 6 7 8 9 "<<endl;
			cout<<"----------------------------------"<<endl;
			ShowPlatform(platform);
			cout<<"----------------------------------"<<endl;
			return -1;
		}
		landmine2d.push_back(vec);
	}

	

	res=IsSame(choosen_9_dot,landmine2d);

	if(res==0){
		for(int i=0;i<choosen_9_dot.size();++i){
			int m=choosen_9_dot[i][0];
			int n=choosen_9_dot[i][1];
			int k=m*10+n;

			platform[m][n]=IsSame(Choosen_9_dot(k),landmine2d)+'0';
		}
	}
	return res;
}

int main()
{	
	srand((int) time(0));
	for(int i=0;i<10;++i){
		vector<char> vec;
		for(int j=0;j<10;++j){
			vec.push_back('*');
		}
		platform.push_back(vec);
	}
	ShowPlatform(platform);
	vector<int> landmine1d= GenerateLandMine(10);
	while (1)
	{
		
		cout<<"--------------------------------"<<endl;
	
		cout<<"请输入行和列: "<<endl;
		int i=0,j=0;
		cin>>i>>j;
		int chosen1d=i*10+j;
		int n_mines=Is_land_mine(chosen1d,landmine1d);
		// cout<<n_mines<<endl;
		if(n_mines==-1){
			return 0;
		}
		platform[i][j]=(char) n_mines+'0';
		cout<<"----------------------------------"<<endl;
		cout<<"0 1 2 3 4 5 6 7 8 9 "<<endl;
		cout<<"----------------------------------"<<endl;
		ShowPlatform(platform);

	}
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunshinnnny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值