C++扫雷游戏

独自制作的第一个较大的C++游戏
扫雷

#include<iostream>
#include<string>
#include<ctime>
using namespace std;
#include<stdlib.h>
#include <windows.h>
int situation[12][12][5];//记录每个点的状态,包括周围几颗地雷、有无地雷、有无树旗、是否被排了。1有  0无 
int over=0;
int x=0;
	int sumopen=100;
	int sumsign=0;
class person
{
	private:
		string name;
	public:
		int sign;
};
void hello();
void lei(); 
void around();
void begin();
void involve(int m,int n);
void map();
void input();
void ifend();
void voermap();
void win();
void lose(); 
void SetColor(unsigned short ForeColor=7,unsigned short BackGroundColor=0)
{HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor);}

main()
{
	int asd;
	system("color 0D");
	hello();
	begin();
	while(!over)
	{map();
	input();
	ifend();}
	voermap();
	if(over==1)
	win();
	else 
	lose();
	cin>>asd;
}
void hello()
{
	
	int sign;
	system("cls");
	cout<<"\t\t    (*^_^*)    欢迎进入扫雷游戏\n\n";
    cout<<"\t\t╔-8---◎---8---*--- 菜单 ---☆---8---◎---☆-╗\n";
    cout<<"\t\t|!|\t\t               \t\t\t|!|\n";
	cout<<"\t\t|!|\t\t               \t\t\t|!|\n";
	cout<<"\t\t|!|\t\t 1.开始游戏    \t\t\t|!|\n";
    cout<<"\t\t|!|\t\t 2.退出游戏    \t\t\t|!|\n";
	cout<<"\t\t|!|\t\t               \t\t\t|!|\n";
	cout<<"\t\t|!|\t\t               \t\t\t|!|\n";
	cout<<"\t\t|!|\t\t               \t\t\t|!|\n";
	cout<<"\t\t|!|\t\t               \t\t\t|!|\n";
	cout<<"\t\t╚-8---◎---8---*---…………… ---◎---8---8 -╝\n\n";
    cout<<"\t\t请选择您要实现的功能选项 (1-3): [ ]\b\b";
	cin>>sign;
	if(sign==2)
		exit(0);
	
}
void lei()
{srand((int)time(0));
	for(int i=1;i<=6;i++)
	{	
		int x=rand()%10+1;
		int y=rand()%10+1;
		if(	situation[x][y][1]==1)
		i--;
		situation[x][y][1]=1;
	}
}
void around()
{
	for(int x=1;x<=10;x++)
		for(int y=1;y<=10;y++)
			situation[x][y][0]=situation[x-1][y-1][1]+situation[x-1][y][1]+situation[x-1][y+1][1]+situation[x][y-1][1]+situation[x][y+1][1]+situation[x+1][y-1][1]+situation[x+1][y][1]+situation[x+1][y+1][1]; 
}
void begin()
{
	for(int i=0;i<=11;i++)
		for(int j=0;j<=11;j++)
			for(int k=0;k<=4;k++)
			situation[i][j][k]=0;
	lei();
	around();
}
void involve(int m,int n)
{
	if((m>=1&&m<=10)&&(n>=1&&n<=10)) 
	if (situation[m][n][0]==0){
	if(situation[m][n+1][3]==0)
		{situation[m][n+1][3]=1;
		involve(m,n+1);}
	if(situation[m+1][n][3]==0){
		situation[m+1][n][3]=1;
		involve(m+1,n);}
	if(situation[m][n-1][3]==0){
		situation[m][n-1][3]=1;
		involve(m,n-1);}
	if(situation[m-1][n][3]==0){
		situation[m-1][n][3]=1;
		involve(m-1,n);}
	/*if(situation[m+1][n+1][3]==0)
		{situation[m+1][n+1][3]=1;
		involve(m+1,n+1);}
	if(situation[m+1][n-1][3]==0){
		situation[m+1][n-1][3]=1;
		involve(m+1,n+1);}
	if(situation[m-1][n-1][3]==0){
		situation[m-1][n-1][3]=1;
		involve(m-1,n-1);}
	if(situation[m-1][n+1][3]==0){
		situation[m-1][n+1][3]=1;
		involve(m-1,n+1);}*/
	} 
}
void input()
{
	int a,b,c; 
	cout<<"\n\n\t\t";
	cout<<"请输入您要操作的点的坐标和操作方式(1:排雷 2:树旗)\n \t\t\t输入模板: 3 2 1 表示第三列,第二行排雷\n"; 
	cout<<"\t\t\t\t\t";
	cin>>a;
	cin>>b;
	cin>>c;
	if((a>=1&&a<=10)&&(b>=1&&b<=10))	
	{
		if(c==1){
		situation[a][b][3]=1;
		involve(a,b);
			if(situation[a][b][1])
			over=2; //结束函数
				}
		else if(c==2)
		situation[a][b][2]=1;
		else 
		cout<<"\n 对不起,您的输入有误,请重新输入"; 
	}
	else
		cout<<"\n 对不起,您的输入有误,请重新输入"; 
}
void map()
{
	system("cls");
	cout<<"\n\n\n";
	cout<<"\t\t\t"<<" 注:本游戏为10×10地图,一共有6个地雷";
	cout<<"\n";
	SetColor(9);
	cout<<"\t\t\t\t"<<" ";
	for(int k=1;k<=10;k++)
	{
	cout<<" "<<k;}
	SetColor();
	cout<<"\n";
	for(int j=1;j<=10;j++)
	{	cout<<"\t\t\t|\t";
		SetColor(9);
		cout<<j;
		if(j!=10)
		cout<<" ";
		SetColor();
		for(int i=1;i<=10;i++)
		{	if(situation[i][j][2])
				cout<<"★";
			else if(situation[i][j][3])
				{
					cout<<situation[i][j][0]<<" ";
				}
			else
			cout<<"█";
		}
		cout<<"\t     |\n";
	}
}

void voermap()
{
	system("cls");
	cout<<"\n\n\n";
	cout<<"\t\t\t"<<" 注:本游戏为10×10地图,一共有6个地雷";
	cout<<"\n";
	SetColor(9);
	cout<<"\t\t\t\t"<<" ";
	for(int k=1;k<=10;k++){
	cout<<k<<" ";}
	SetColor();
	cout<<"\n";
	for(int j=1;j<=10;j++)
	{	cout<<"\t\t\t|\t";
		SetColor(9);
		cout<<j;
		SetColor();
		if(j!=10)
		cout <<" ";
		for(int i=1;i<=10;i++)
		{
			if(situation[i][j][2])
				cout<<"★";  
			else if(situation[i][j][3])
				{
					if (situation[i][j][1])
						{SetColor(4);
						cout <<"※" ;
						SetColor();
						}	
						else 
					cout<<situation[i][j][0]<<" "; 	 
				}
			else if(situation[i][j][1])
			cout<<"※";
			else
			cout<<"█";
		}
		cout<<"\t |\n";
	}
	cout <<"\n\t\t\t游戏已结束";	
}
void ifend()
{
	sumopen=100;
	sumsign=0;
	for(int j=1;j<=10;j++)
		for(int i=1;i<=10;i++)
		{
		sumopen-=situation[i][j][1];
		sumsign+=situation[i][j][1]*situation[i][j][2];
	}
	if(sumopen==6||sumsign==6)
	over=1;
}
void win()
{
		system("cls");
	cout<<"\t\t          (。^▽^)      \n\n";
    cout<<"\t\t╔-8---◎---8---*--- 菜单 ---☆---8---◎---☆-╗\n";
    cout<<"\t\t|★|\t\t               \t\t\t|★|\n";
	cout<<"\t\t|☆|\t\t               \t\t\t|☆|\n";
	cout<<"\t\t|★|\t\t 恭喜你        \t\t\t|★|\n";
    cout<<"\t\t|☆|\t\t 你赢得了      \t\t\t|☆|\n";
	cout<<"\t\t|★|\t\t               \t\t\t|★|\n";
	cout<<"\t\t|☆|\t\t               \t\t\t|☆|\n";
	cout<<"\t\t|★|\t\t               \t\t\t|★|\n";
	cout<<"\t\t|☆|\t\t               \t\t\t|☆|\n";
	cout<<"\t\t╚-8---◎---8---*---…………… ---◎---8---8 -╝\n\n";
}
void lose()
{
		system("cls");
	cout<<"\t\t           ~~>_<~~   \n\n";
    cout<<"\t\t╔-8---◎---8---*--- 菜单 ---☆---8---◎---☆-╗\n";
    cout<<"\t\t|★|\t\t               \t\t\t|★|\n";
	cout<<"\t\t|☆|\t\t               \t\t\t|☆|\n";
	cout<<"\t\t|★|\t\t 很遗憾        \t\t\t|★|\n";
    cout<<"\t\t|☆|\t\t 你输了        \t\t\t|☆|\n";
	cout<<"\t\t|★|\t\t 你排了";
	cout<<sumsign;
	
	cout<<"个地雷  \t\t|★|\n";

	cout<<"\t\t|☆|\t\t               \t\t\t|☆|\n";
	cout<<"\t\t|★|\t\t               \t\t\t|★|\n";
	cout<<"\t\t|☆|\t\t               \t\t\t|☆|\n";
	cout<<"\t\t╚-8---◎---8---*---…………… ---◎---8---8 -╝\n\n";
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值