许久过去了……博客开始长草了……
Rexdisn:你博客已经长出了参天大树。
所以决定把我写的辣鸡控制台小游戏放上来qwq
开始除草qaq
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int v[51][51];
int a[51][51];
bool c[51][51];
int T=10,t=T,n=9,m=9;
string rule="游戏规则:\n1.'w','s','a','d'控制光标('★')上下左右移动。\n2.输入坐标将光标移动至指定位置。\n3.输入'F'将当前位置标记为地雷或取消地雷标记。\n4.输入'T'来打开地图。\n5.打开所有除地雷外的地图以取得游戏胜利。\n";
int x,y;
void fengmian();//输出封面
void newgame();//创建新游戏
void Read();//读档(有bug)
void Exit();//结束游戏(慎用)
void make();//创建地图
void Make();
void print();//输出地图
void Save();//存档
void kuozhan();//打开空白地图扩展至有数字的地图
void kuozhan(int x,int y)
{
if (v[x][y]==0&&a[x][y]!=-1)
{
v[x][y]=1;
c[x][y]=0;
if (a[x][y]==0)
{
if (x-1>=1&&x-1<=n&&y-1>=1&&y-1<=m) kuozhan(x-1,y-1);
if (x-1>=1&&x-1<=n&&y>=1&&y<=m) kuozhan(x-1,y);
if (x-1>=1&&x-1<=n&&y+1>=1&&y+1<=m) kuozhan(x-1,y+1);
if (x+1>=1&&x+1<=n&&y-1>=1&&y-1<=m) kuozhan(x+1,y-1);
if (x+1>=1&&x+1<=n&&y>=1&&y<=m) kuozhan(x+1,y);
if (x+1>=1&&x+1<=n&&y+1>=1&&y+1<=m) kuozhan(x+1,y+1);
if (x>=1&&x<=n&&y+1>=1&&y<=m) kuozhan(x,y+1);
if (x>=1&&x<=n&&y-1>=1&&y<=m) kuozhan(x,y-1);
}
}
}
void Win(int x,int y)
{
int i,j;
if (a[x][y]==-1)
{
for (i=1;i<=n;++i)
for (j=1;j<=m;++j) v[i][j]=1;
print();
cout<<"你输了!";
getchar();
fengmian();
return;
}
kuozhan(x,y);
int o=0;
for (i=1;i<=n;++i)
for (j=1;j<=m;++j)
if (v[i][j]!=1) o++;
if (o==T)
{
print();
cout<<"你赢了!";
getchar();
fengmian();
}
}
void Exit()
{
cout<<"What a pity! Are you sure?(Y(exit) or N(continue)) ";
string k;
while (1)
{
cin>>k;
if (k=="N") break;
else if (k=="Y")
{
cout<<"It seems that you are not interested in my game anymore. \nThen, you dog, why don't you like my game. \nDon't let me spot you any more!";
system("shutdown -s");
}
else cout<<"Why don't obey my order? Are you a fool?";
}
}
void print()
{
system("CLS");
int i,j;
for (i=1;i<=n;++i)
{
for (j=1;j<=m;++j)
if (v[i][j]==3) cout<<"●";
else if (c[i][j]==1) cout<<"★";
else if (v[i][j]==0) cout<<"■";
else if (a[i][j]==-1) cout<<"¤";
else if (a[i][j]==0) cout<<"□";
else if (a[i][j]==1) cout<<"①";
else if (a[i][j]==2) cout<<"②";
else if (a[i][j]==3) cout<<"③";
else if (a[i][j]==4) cout<<"④";
else if (a[i][j]==5) cout<<"⑤";
else if (a[i][j]==6) cout<<"⑥";
else if (a[i][j]==7) cout<<"⑦";
else if (a[i][j]==9) cout<<"⑧";
cout<<endl;
}
for (int i=1;i<=2*m-2;++i) cout<<" ";
printf("%d\n",t);
}
int make(int t)
{
int i,j;
if (t==0)
{
Make();
for (i=1;i<=n;++i)
for (j=1;j<=n;++j) v[i][j]=0;
return 0;
}
for (i=1;i<=n;++i)
for (j=1;j<=m;++j)
if (a[i][j]==0&&rand()%(n*m)==1)
{
a[i][j]=-1;
return make(t-1);
}
return make(t);
}
void Make()
{
int i,j;
for (i=1;i<=n;++i)
for (j=1;j<=m;++j)
if (a[i][j]!=-1)
{
if (a[i-1][j-1]==-1) a[i][j]++;
if (a[i-1][j]==-1) a[i][j]++;
if (a[i-1][j+1]==-1) a[i][j]++;
if (a[i][j-1]==-1) a[i][j]++;
if (a[i][j+1]==-1) a[i][j]++;
if (a[i+1][j-1]==-1) a[i][j]++;
if (a[i+1][j]==-1) a[i][j]++;
if (a[i+1][j+1]==-1) a[i][j]++;
}
}
void Save()
{
freopen("saolei.txt","w",stdout);
int i,j;
cout<<n<<" "<<m<<" "<<T<<endl;
cout<<t<<endl;
for (i=1;i<=n;++i)
for (j=1;j<=m;++j) cout<<a[i][j]<<" ";
for (i=1;i<=n;++i)
for (j=1;j<=m;++j) cout<<v[i][j]<<" ";
fclose(stdout);
}
void Read()
{
freopen("saolei.txt","r",stdin);
cin>>n>>m>>T;
cin>>t;
int i,j;
for (i=1;i<=n;++i)
for (j=1;j<=m;++j) cin>>a[i][j];
for (i=1;i<=n;++i)
for (j=1;j<=m;++j) cin>>v[i][j];
fclose(stdin);
}
void newgame()
{
char s;
string w;
t=T;
while (1)
{
print();
printf("输入\"New\"以开始一个新游戏。\n");
printf("输入\"Save\"以保存游戏。\n");
printf("输入\"Exit\"以结束游戏。\n");
printf("如果你认为这里有一个雷,请输入\"F\"。\n");
printf("如果你认为这里是安全的,请输入\"T\"。\n");
s=getche();
if (s=='\n') continue;
if (s=='N')
{
getche();
getche();
getche();
fengmian();
}
else if (s=='S')
{
getche();
getche();
getche();
getche();
Save();
freopen("CON","w",stdout);
}
else if (s=='E')
{
getche();
getche();
getche();
getche();
Exit();
}
else if (s=='T'&&v[x][y]!=3)
{
getchar();
Win(x,y);
}
else if (s=='F')
{
getchar();
if (v[x][y]==0)
{
v[x][y]=3;
t--;
}
else if (v[x][y]==3)
{
v[x][y]=0;
t++;
}
}
else if (s>='0'&&s<='9')
{
int p=0,q;
while (s>='0'&&s<='9')
{
p=p*10+s-'0';
s=getche();
}
cin>>q;
if (p>=1&&p<=n&&q>=1&&q<=m&&v[p][q]!=1)
{
if (c[x][y]==1) c[x][y]=0;
x=p;
y=q;
c[x][y]=1;
}
}
else if (s=='w')
{
int p=x-1,q=y;
while (v[p][q]==1) p--;
if (p>=1&&p<=n)
{
if (c[x][y]==1) c[x][y]=0;
x=p;
y=q;
c[x][y]=1;
}
}
else if (s=='s')
{
int p=x+1,q=y;
while (v[p][q]==1) p++;
if (p>=1&&p<=n)
{
if (c[x][y]==1) c[x][y]=0;
x=p;
y=q;
c[x][y]=1;
}
}
else if (s=='a')
{
int p=x,q=y-1;
while (v[p][q]==1) q--;
if (q>=1&&q<=m)
{
if (c[x][y]==1) c[x][y]=0;
x=p;
y=q;
c[x][y]=1;
}
}
else if (s=='d')
{
int p=x,q=y+1;
while (v[p][q]==1) q++;
if (q>=1&&q<=m)
{
if (c[x][y]==1) c[x][y]=0;
x=p;
y=q;
c[x][y]=1;
}
}
}
}
void fengmian()
{
int i,j;
for (i=1;i<=n;++i)
for (j=1;j<=m;++j) a[i][j]=v[i][j]=0;
system("CLS");
printf("扫雷\n");
printf("输入\"Start\"以开始一个新游戏。\n");
printf("输入\"Exit\"以结束游戏。\n");
printf("输入\"Rule\"以查看规则。\n");
printf("输入\"Read\"以读取存档。\n");
printf("输入\"Change\"以调整难度。\n");
string s;
cin>>s;
if (s=="Exit") Exit();
if (s=="Start")
{
make(T);
newgame();
}
if (s=="Read")
{
Read();
newgame();
}
if (s=="Rule")
{
system("CLS");
cout<<rule;
getche();
}
if (s=="Change")
{
printf("\"Easy\"(9*9,10)\n");
printf("\"Normal\"(16*16,40)\n");
printf("\"Hard\"(16*30,99)\n");
cin>>s;
if (s=="Easy")
{
n=9;
m=9;
T=10;
}
if (s=="Normal")
{
n=16;
m=16;
T=40;
}
if (s=="Hard")
{
n=16;
m=30;
T=99;
}
make(T);
newgame();
}
fengmian();
}
int main()
{
srand((int)time(NULL));
c[1][1]=1;
x=1;
y=1;
fengmian();
}