#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#include<time.h>
#include<malloc.h>
int x1[100],x2,x3,y1[100],y2,y3,x0,y0,
en,bu,x,y,enz,de,f,f0,fp,zu,si[1000][1000],speed,exf,xp[100],yp[100];
int fri,xf,yf,ff,life,xbuff,ybuff,xdebuff,ydebuff,speedbuff,ta1,tk1,xt1,yt1;
void show();
void geng(char s);
void help(char s);
void buff1(char s);
void buff2();
void gotoxy(int e,int f);
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info={1,0};
SetConsoleCursorInfo (GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}
int main()
{
int i,j,m,n,en;
x=10;y=20;x0=2*x;y0=3*y;x1[0]=0;x2=x-1;y2=y;y1[0]=y+10;
xf=15;yf=40;
de=0;en=0;enz=5;f=0;f0=0;exf=0;
fri=0;life=1;
speed=1;zu=2;speedbuff=1;ta1=20;
srand((unsigned)time(NULL));
xt1=rand()%(x0-10)+7;yt1=rand()%(y0-10)+8;
for(i=1;i<=zu;i++){xp[i]=rand()%(x0-10)+7;yp[i]=y0-2;}
char s;
while(1)
{
if(de>=8){exf=1;}
while(f==1){show();}
show();
s=getch();
geng(s);
buff1(s);
}
}
void geng(char s)
{
int i,j;
if(s=='a'){y--;}
if(s=='d'){y++;}
if(s=='w'){x--;}
if(s=='s'){x++;}
if(s=='j'||fri==1){help(s);}
if(s==' '){f=1;}
if(s==0x1b){
de=de+(life-1)*3;system("cls");printf(" 得分:%d",de);printf("\n");printf(" GAME OVER");exit(0);}
}
void help(char s)
{
int i,j,n,m;
fri=1;
if(s==75){yf--;}
if(s==77){yf++;}
if(s==72){xf--;}
if(s==80){xf++;}
if(s=='0'){ff=1;}
}
void buff1(char s)
{
int i,j,n,m;
if(de>=15){
if(x==xt1&&y==yt1){tk1=15;}
if(tk1!=0){geng(s);geng(s);tk1=tk1-1;}
if(ta1==20){xt1=rand()%(x0-10)+7;yt1=rand()%(y0-10)+8;ta1=1;}
ta1=ta1+1;}
speed=speed+1;
speedbuff=speedbuff+1;
}
void buff2()
{
}
void gotoxy(int e,int f)
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X=e;
pos.Y=f;
SetConsoleCursorPosition(handle,pos);
}
void show()
{
int i,j,m,n,en,k,f1;f1=0;
gotoxy(0,0);
HideCursor();
printf("生命:%d ",life);printf("得分:%d",de);printf("\n");
srand((unsigned)time(NULL));
for(i=1;i<=enz;i++){
if(y==ybuff&&x==xbuff){life=life+1;speedbuff=20;break;}
if(exf==0){
if((x1[i]==x&&y1[i]==y)||x==x0-1||x==0||y==y0-1||y==0||(xp[i]==x&&yp[i]==y)){
life=life-1;}}
else if(exf==1){
if((x1[i]==x&&y1[i]==y)||x==x0-1||x==0||y==y0-1||y==0||(xp[i]==x&&yp[i]==y)||
(x1[i]==x&&y1[i]==y-1)||x==x0-1||x==0||y-1==y0-1||y-1==0||(xp[i]==x&&yp[i]==y-1)||
(x1[i]==x&&y1[i]==y+1)||x==x0-1||x==0||y+1==y0-1||y+1==0||(xp[i]==x&&yp[i]==y+1)){
life=life-1;}}
}
if(life<=0){
system("cls");printf(" 得分:%d",de);printf("\n");printf(" GAME OVER");exit(0);}
if(speed==3)
{
for(i=1;i<=enz;i++){y1[i]=(y1[i-1]+(rand()%2))%(y0+4);}
for(i=1;i<=enz;i++){x1[i]=(x1[i-1]+1)%(x0+4);}x1[0]=x1[0]+1;if(x1[0]==x0-1){y1[0]=rand()%(y0-8)+4;}
if(x1[0]==x0-1){x1[0]=0;}
if(enz==0){enz=5;x1[0]=0;}
speed=1;
}
if(speedbuff==20){
xbuff=rand()%(x0-10)+7;ybuff=rand()%(y0-10)+8;
speedbuff=1;
}
if(exf==0){
for(i=1;i<=enz;i++){
if(x1[i]==x2&&y1[i]==y2){
for(j=i;j<=enz;j++){x1[j]=x1[j+1];y1[j]=y1[j+1];}
x1[enz]=0;y1[enz]=0;enz=enz-1;de=de+1;}
}}
else if(exf==1){
for(i=1;i<=enz;i++){
if((x1[i]==x2&&y1[i]==y2-1)||(x1[i]==x2&&y1[i]==y2)||(x1[i]==x2&&y1[i]==y2+1)){
for(j=i;j<=enz;j++){x1[j]=x1[j+1];y1[j]=y1[j+1];}
x1[enz]=0;y1[enz]=0;enz=enz-1;de=de+1;}
}}
if(exf==0){zu=0;
for(j=0;j<x0;j++){
for(i=0;i<y0;i++){
for(k=1;k<=enz;k++){
if(y1[k]==i&&x1[k]==j){f1=1;break;}else {f1=0;}}
if(i==y&&j==x){
printf("A");
}
else if(i==y0-1||i==0||j==x0-1||j==0){
printf("=");
}
else if(f==1&&i==y2&&j==x2){
printf("|");x2=x2-1;
}
else if(f1==1){
printf("+");
}
else {
printf(" ");
}
}printf("\n");
}
}
else if(exf==1){if(de==10){zu=2;}else if(de>=15){zu=5;}
for(j=0;j<x0;j++){
for(i=0;i<y0;i++){
for(k=1;k<=enz;k++){
if(y1[k]==i&&x1[k]==j){f1=1;break;}else {f1=0;}}
for(k=1;k<=zu;k++){
if(yp[k]==i&&xp[k]==j){fp=1;yp[k]=yp[k]-1;break;}else {fp=0;}}
if(i==y-1&&j==x){
printf("*A*");i=i+2;
}
else if(i==y0-1||i==0||j==x0-1||j==0){
printf("=");
}
else if(f==1&&i==y2-1&&j==x2){
printf("|||");x2=x2-1;i=i+2;
}
else if(f1==1){
printf("+");f1=0;
}
else if(fp==1){
printf("-");fp=0;
}
else if(i==ybuff&&j==xbuff){
printf("@");
}
else if(de>=15&&i==yt1&&j==xt1){
printf("?");
}
else {
printf(" ");
}
}printf("\n");
}
}
for(i=1;i<=zu;i++)if(yp[i]==0){xp[i]=rand()%(x0-10)+7;yp[i]=y0-2;}
if(x2==0){f=0;x2=x-1;y2=y;}
else if(f==0){x2=x-1;y2=y;}
}