独自制作的第一个较大的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";
}