大二上学期发假之前,闲来无事,做个小游戏
1,手动挡
#include<iostream>
#include<bits/stdc++.h>
#include<stdlib.h>
#include<cstdlib>
#include<set>
#include<queue>
#define PII pair<int,int>
using namespace std;
char arr[500][500];
int x=1,y=1,fl=1,aimx,aimy;
set<PII> ss;
queue<PII> q;
int main()
{
system("color F9");
for(int i=1;i<=15;i++)
for(int j=1;j<=15;j++)
arr[i][j]='.';
arr[1][1]='@';
ss.insert({1,1});
q.push({1,1});
while(1)
{
if(fl)
{
int xx,yy;
while(1)
{
xx=rand(),yy=rand();
if(1<=xx&&xx<=15&&1<=yy&&yy<=15)
if(!ss.count({xx,yy}))
{
aimx=xx,aimy=yy;
arr[aimx][aimy]='+';
break;
}
}
fl=0;
}
system("cls");
for(int i=1;i<=15;i++)
{
for(int j=1;j<=15;j++)
cout<<arr[i][j];
cout<<endl;
}
char op;cin>>op;
PII dir;
if(op=='w')
dir={x-1,y};
else if(op=='s')
dir={x+1,y};
else if(op=='a')
dir={x,y-1};
else if(op='d')
dir={x,y+1};
if(dir.first<1||dir.first>15||dir.second<1||dir.second>15) //不能撞墙
continue;
if(ss.count({dir.first,dir.second}))//不能追尾
continue;
x=dir.first,y=dir.second;
if(x==aimx&&y==aimy)
{
arr[x][y]='@';
ss.insert({x,y});
q.push({x,y});
fl=1;
continue;
}
arr[q.front().first][q.front().second]='.';
ss.erase({q.front().first,q.front().second});//擦除痕迹
q.pop();//去尾巴
ss.insert({x,y});//添加痕迹
q.push({x,y});//加头
arr[x][y]='@';
}
return 0;
}
'w' 往上走
's' 往下走
'a' 往左走
'd' 往右走
每走一步需要点回车
2,自动挡
#include<iostream>
#include<bits/stdc++.h>
#include<stdlib.h>
#include<cstdlib>
#include<set>
#include<queue>
#include<unistd.h>
#define PII pair<int,int>
using namespace std;
char arr[20][20];
int fl=1,aimx,aimy;
int to[5][2]={{0,1},{1,0},{0,-1},{-1,0}};
set<PII> ss;
queue<PII> q;
void f()
{
if(fl)
{
int xx,yy;
while(1)
{
xx=rand(),yy=rand();
if(1<=xx&&xx<=8&&1<=yy&&yy<=8)
if(!ss.count({xx,yy}))
{
aimx=xx,aimy=yy;
arr[aimx][aimy]='+';
break;
}
}
fl=0;
}
}
int ff(int x,int y)
{
int num;
while(1)
{
num=rand();
if(0<=num&&num<4)
{
int xx=x+to[num][0],yy=y+to[num][1];
if(1<=xx&&xx<=8&&1<=yy&&yy<=8&&!ss.count({xx,yy}))
return num;
}
}
}
void dfs(int x,int y)
{
f();
system("cls");
for(int i=1;i<=8;i++)
{
for(int j=1;j<=8;j++)
cout<<arr[i][j];
cout<<endl;
}
sleep(1);
int dd=ff(x,y);
int dirx=x+to[dd][0],diry=y+to[dd][1];
if(dirx==aimx&&diry==aimy)
{
if(q.size())
arr[q.back().first][q.back().second]='#';
q.push({dirx,diry});ss.insert({dirx,diry});
arr[dirx][diry]='@';
fl=1;
dfs(dirx,diry);
}
else if(!ss.count({dirx,diry}))
{
if(q.size())
arr[q.back().first][q.back().second]='#';
q.push({dirx,diry});ss.insert({dirx,diry});
arr[dirx][diry]='@';
ss.erase({q.front().first,q.front().second});
arr[q.front().first][q.front().second]='.';
q.pop();
dfs(dirx,diry);
}
}
int main()
{
system("color F9");
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
arr[i][j]='.';
arr[1][1]='@';
ss.insert({1,1});
q.push({1,1});
dfs(1,1);
return 0;
}
游戏图片