没错这是我本人编的一个无聊的小程序
规则:你操控一个小人到达百分号(是黄色的),其他自己发掘
代码也就这么点:
#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
#define init register int
#define inf 1000000000
#define LL long long
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
#define teacher 1
#define student 2
using namespace std;
char mp[1005][1005]={};
bool cango[1005][1005]={};
int n=10,m=20,fx[5]={0,-1,0,1,0},fy[5]={0,0,1,0,-1};
int tc[4][4]={},QUE[1000005][3]={},vvv=10000;
int xx,yy,ct;
void gotoXY(short x, short y)
{
x^=y^=x^=y;
COORD pos = {x, y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
bool pdst(int,int);
void GO();
void BFS(int,int);
void WIN();
void LOSE();
void BAD();
int pre();
int main()
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
srand(time(NULL));
printf("The classroom bigs:");
cin>>n>>m;
printf("The number of teachers:");
cin>>ct;
system("cls");
for(int i=0;i<=n;i++)
{
for(int j=0;j<=m;j++)
{
if(i==0||j==0||i==n||j==m)mp[i][j]='+';
else mp[i][j]=' ';
}
}
back:;
int vx=rand()%n+1,vy=rand()%m+1;
if(mp[vx][vy]==' ')mp[vx][vy]='%';
else goto back;
BFS(vx,vy);
backc:;
xx=rand()%n+1,yy=rand()%m+1;
if(mp[xx][yy]!=' '&&pdst(xx,yy))goto backc;
for(int i=0;i<=n;i++)
{
for(int j=0;j<=m;j++)
{
if(mp[i][j]==' '&&rand()%5==0)mp[i][j]='+';
if(mp[i][j]=='%')SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
putchar(mp[i][j]);
if(mp[i][j]=='%')SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
putchar('\n');
}
for(int i=1;i<=ct;i++)
{
back2:;
tc[i][1]=rand()%n+1,tc[i][2]=rand()%m+1;
if(mp[tc[i][1]][tc[i][2]]!=' ')goto back2;
if(tc[i][1]==xx||tc[i][2]==yy)goto back2;
if(abs(tc[i][1]-xx)+abs(tc[i][2]-yy)<n/2)goto back2;
tc[i][3]=vvv;
tc[i][4]=rand()%4+1;
gotoXY(tc[i][1],tc[i][2]),putchar(teacher);
}
gotoXY(xx,yy);
putchar(student);
while(1)
{
GO();
int lx=xx,ly=yy;
if(_kbhit())
{
char ch=_getch();
if(ch=='w')
{
if(mp[xx-1][yy]==' ')xx--;
else if(mp[xx-1][yy]=='%')WIN();
gotoXY(lx,ly);
putchar(' ');
gotoXY(xx,yy);
putchar(student);
}
if(ch=='s')
{
if(mp[xx+1][yy]==' ')xx++;
else if(mp[xx+1][yy]=='%')WIN();
gotoXY(lx,ly);
putchar(' ');
gotoXY(xx,yy);
putchar(student);
}
if(ch=='a')
{
if(mp[xx][yy-1]==' ')yy--;
else if(mp[xx][yy-1]=='%')WIN();
gotoXY(lx,ly);
putchar(' ');
gotoXY(xx,yy);
putchar(student);
}
if(ch=='d')
{
if(mp[xx][yy+1]==' ')yy++;
else if(mp[xx][yy+1]=='%')WIN();
gotoXY(lx,ly);
putchar(' ');
gotoXY(xx,yy);
putchar(student);
}
}
}
}
int pre(int xx1,int yy1,int xx2,int yy2,int ff)
{
if(mp[xx1][yy1]!=' ')return -inf;
if(xx1==xx2&&yy1==yy2)return 1;
return pre(xx1+fx[ff],yy1+fy[ff],xx2,yy2,ff)+1;
}
void BAD()
{
system("color 04");
vvv=10;
}
void GO()
{
for(int i=1;i<=ct;i++)
{
tc[i][3]--;
if(tc[i][1]==xx&&tc[i][2]==yy)LOSE();
if(tc[i][3]>vvv)tc[i][3]=vvv;
if(tc[i][3]==0)
{
tc[i][3]=vvv;
if(mp[tc[i][1]+fx[tc[i][4]]][tc[i][2]+fy[tc[i][4]]]==' ')
{
gotoXY(tc[i][1],tc[i][2]);
putchar(' ');
tc[i][1]+=fx[tc[i][4]];
tc[i][2]+=fy[tc[i][4]];
gotoXY(tc[i][1],tc[i][2]);
putchar(teacher);
}
else
{
tc[i][4]=rand()%4+1;
}
}
if(pre(xx,yy,tc[i][1],tc[i][2],1)>0||pre(xx,yy,tc[i][1],tc[i][2],3)>0)BAD();
if(pre(xx,yy,tc[i][1],tc[i][2],2)>0||pre(xx,yy,tc[i][1],tc[i][2],4)>0)BAD();
}
}
void BFS(int cx,int cy)
{
int head=0,tail=1;
QUE[1][1]=cx;QUE[1][2]=cy;
cango[cx][cy]=1;
while(head<=tail)
{
head++;
for(int i=1;i<=4;i++)
{
int rx=QUE[head][1]+fx[i],ry=QUE[head][2]+fy[i];
if(rx>=1&&rx<=n&&ry>=1&&ry<=m&&mp[rx][ry]==' ')
{
if(!cango[rx][ry])
{
cango[rx][ry]=1;
tail++;
QUE[tail][1]=rx;
QUE[tail][2]=ry;
}
}
}
}
}
bool pdst(int cx,int cy)
{
return cango[cx][cy];
}
void WIN()
{
system("cls");
system("color 02");
printf("YOU WIN!\n\n");
system("pause");
exit(0);
}
void LOSE()
{
system("cls");
printf("YOU LOSE\n\n");
system("pause");
exit(0);
}
看完还不点赞