#include<bits/stdc++.h>
#include<windows.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME)&0x8000)?1:0)
using namespace std;
int N=15,Numk=50,Numl=5,Numd=100,Nan=40,Hp=10,Bebc=15,Bebh=16,Bebb=10,squ=3;
struct node
{
int x,y,vf,bv;
inline void init() {
x=rand()%N+1,y=rand()%N+1,bv=rand()%3+1;}
inline void move() {
x++;if(x>N) init(),x=1;}
}k[10005],l[10005],d[10005];
int x,y,hp,score,mp[25][25],udf,numc,numh,numb,bulc,bulh,bulb,lanf;
inline void add(int &x,int y) {
x+=y,x=max(x,1),x=min(x,N);}
void color(int a) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);}
inline int read()
{
int r=0;char c=getchar();
while(c>'9'||c<'0') c=getchar();
while(c>='0'&&c<='9') (r*=10)+=c-'0',c=getchar();
return r;
}
inline void print(int x,int y,string s)
{
HANDLE hOut;COORD pos;
hOut=GetStdHandle(STD_OUTPUT_HANDLE),pos.X=y,pos.Y=x;
SetConsoleCursorPosition(hOut,pos),cout<<s;
}
inline char check_press(int x)
{
Sleep(100);
for(int i=1;i<=10;i++) {
if(KEY_DOWN(x)) return 1;Sleep(10);}
return 0;
}
inline void set_windows(int x1,int y1,int x2,int y2)
{
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);SMALL_RECT rc;
rc.Left=x1,rc.Top=y1,rc.Right=x2,rc.Bottom=y2;
SetConsoleWindowInfo(hOut, TRUE, &rc);
}
inline void disap_mouse()
{
ShowCursor(false);
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO cci;
GetConsoleCursorInfo(hOut,&cci);
cci.bVisible=false;
SetConsoleCursorInfo(hOut,&cci);
}
inline char check_die()
{
for(int i=1;i<=Numk;i++) if(k[i].x==x&&k[i].y==y) return k[i].init(),k[i].x=1,0;
return 1;
}
inline char check_luck()
{
for(int i=1;i<=Numl;i++)
if(l[i].x==x&&l[i].y==y)
{
l[i].init(),l[i].x=1;
numc+=(rand()%10+5)*bulc;
numh+=(rand()%5+5)*bulh;
numb+=(rand()%5+5)*bulb;
return 0;
}
return 1;
}
inline char check_dowm()
{
for(int i=1;i<=Numd;i++)
if(d[i].x==x&&d[i].y==y)
{
d[i].init(),d[i].x=1;
numc+=(rand()%10+5)*bulc;
numh+=(rand()%5+5)*bulh;
numb+=(rand()%5+5)*bulb;
return 0;
}
return 1;
}
inline void move_thi()
{
for(int i=1;i<=Numk;i++) if(k[i].vf==0) k[i].move();
for(int i=1;i<=Numl;i++) if(l[i].vf==0) l[i].move();
for(int i=1;i<=Numd;i++) if(d[i].vf==0) d[i].move();
}
inline char move_peo()
{
char c=0;
if(KEY_DOWN(87)&&!udf) add(x,-1),c=1;
if(KEY_DOWN(38)&&!udf) add(x,-1),c=1;
if(KEY_DOWN(104)&&!udf) add(x,-1),c=1;
if(KEY_DOWN(87)||KEY_DOWN(38)||KEY_DOWN(104)) color(112),print(11,N+5,"↑"),color(7);else print(11,N+5,"↑");
if(KEY_DOWN(83)&&!udf) add(x,1),c=1;
if(KEY_DOWN(40)&&!udf) add(x,1),c=1;
if(KEY_DOWN(101)&&!udf) add(x,1),c=1;
if(KEY_DOWN(83)||KEY_DOWN(40)||KEY_DOWN(101)) color(112),print(15,N+5,"↓"),color(7);else print(15,N+5,"↓");
if(KEY_DOWN(65)) add(y,-1),c=1;
if(KEY_DOWN(37)) add(y,-1),c=1;
if(KEY_DOWN(100)) add(y,-1),c=1;
if(KEY_DOWN(65)||KEY_DOWN(37)||KEY_DOWN(100)) color(112),print(13,N+3,"←"),color(7);else print(13,N+3,"←");
if(KEY_DOWN(68)) add(y,1),c=1;
if(KEY_DOWN(39)) add(y,1),c=1;
if(KEY_DOWN(102)) add(y,1),c=1;
if(KEY_DOWN(68)||KEY_DOWN(39)||KEY_DOWN(102)) color(112),print(13,N+7,"→"),color(7);else print(13,N+7,"→");
return c;
}
inline void die()
{
system("cls"),print(0,0," ");
if(lanf==1)
{
puts("ZDT : HaHaHaaaaa! YOU DIED!!!\n"),Sleep(1000);
printf("YOU SCORE IS:%d\n\n",score),Sleep(1000);
}
if(lanf==0)
{
puts("ZDT:你终于知道 死 这个字怎么写了!!!\n"),Sleep(1000);
printf("你的分数是:%d\n\n",score),Sleep(1000);
}
if(lanf==1) puts("TRY AGAIN?\n");
if(lanf==0) puts("再来一局?\n");
}
inline void init()
{
system("cls"),srand(time(0)),printf(" ");
for(int i=1;i<=N;i++) printf("~");
puts("");
for(int i=1;i<=N;i++)
{
printf("|");
for(int i=1;i<=N;i++) printf(" ");
puts("|");
}
printf(" ");
for(int i=1;i<=N;i++) printf("~");
puts(""),x=N,y=N/2,hp=Hp,score=0,numc=Bebc*bulc,numh=Bebh*bulh,numb=Bebb*bulb;
for(int i=1;i<=Numk;i