#include
#include
#include
#include
#include
int grade=5,point=0,life=3;
void set(),menu(),move_head(),move_body(),move(),init_insect(),left(),upon(),right(),down(),init_graph(),food_f(),ahead(),crate();
struct bug
{
int x;
int y;
struct bug *last;
struct bug *next;
};
struct fd
{
int x;
int y;
int judge;
}food={0,0,0};
struct bug *head_f=NULL,*head_l,*p1=NULL,*p2=NULL;
void main()
{
char ch;
initgraph(800,600);
set();
init_insect();
while(1)
{
food_f();
Sleep(grade*10);
setcolor(BLACK);
circle(head_l->x,head_l->y,2);
setcolor(WHITE);
move_body();
if(kbhit())
{
ch=getch();
if(ch==27)
{
ahead();
set();
}
else if(ch==-32)
{
switch(getch())
{
case 72:upon();break;
case 80:down();break;
case 75:left();break;
case 77:right();break;
}
}
else ahead();
}
else
{
ahead();
}
if(head_f->x==food.x&&head_f->y==food.y)
{
Sleep(100);
crate();
food.judge=0;
point=point+(6-grade)*10;
if(food.x<30||food.y<30||food.x>570||food.y>570)
life++;
menu();
}
if(head_f->x<5||head_f->x>595||head_f->y<5||head_f->y>595)
{
Sleep(1000);
life--;
food.judge=0;
init_graph();
init_insect();
menu();
}
for(p1=head_f->next;p1!=NULL;p1=p1->next)
{
if(head_f->x==p1->x&&head_f->y==p1->y)
{
Sleep(1000);
life--;
food.judge=0;
init_graph();
init_insect();
menu();
break;
}
}
if(life==0)
{
outtextxy(280,300,"游戏结束!");
getch();
return;
}
move();
};
}
void init_graph()
{
clearviewport();
setlinestyle(PS_SOLID,1,5);
rectangle(2,2,600,598);
setlinestyle(PS_SOLID,1,1);
}
void set()
{
init_graph();
outtextxy(640,50,"1、开始 / 返回");
outtextxy(640,70,"2、退出");
outtextxy(640,90,"3、难度");
outtextxy(640,110,"4、重新开始");
switch(getch())
{
case '1': menu();setcolor(GREEN);circle(food.x,food.y,2);setcolor(WHITE);return;
case '2': exit(0);break;
case '3': outtextxy(700,90,":1 2 3 4 5");grade=getch()-48;set();break;
case '4': food.judge=0,grade=5;point=0;life=3;init_insect();menu();break;
default: outtextxy(250,300,"输入错误!"); set();break;
}
}
void menu()
{
char str[20],str1[]={"分数:"},str2[]={"难度:"},str3[]={"生命值:"};
init_graph();
sprintf(str,"%d",point);
strcat(str1,str);
outtextxy(640,50,str1);
sprintf(str,"%d",grade);
strcat(str2,str);
outtextxy(640,70,str2);
sprintf(str,"%d",life);
strcat(str3,str);
outtextxy(640,90,str3);
outtextxy(640,110,"设置:ESC");
}
void init_insect()
{
head_f=(struct bug *)malloc(sizeof(struct bug));
head_f->last=NULL;
head_f->x=300;
head_f->y=300;
p2=head_f->next=p1=(struct bug *)malloc(sizeof(struct bug));
p1->last=head_f;
p1->x=295;
p1->y=300;
p1=p1->next=(struct bug *)malloc(sizeof(struct bug));
p1->next=NULL;
p1->x=290;
p1->y=300;
p1->last=p2;
head_l=p1;
}
void move()
{
for(p1=head_f;p1!=NULL;p1=p1->next)
{
circle(p1->x,p1->y,2);
}
}
void move_head()
{
}
void move_body()
{
for(p1=head_l,p2=p1->last;p2!=NULL;p1=p2,p2=p2->last)
{
p1->x=p2->x;
p1->y=p2->y;
}
}
void ahead()
{
p1=head_f;
p2=p1->next;
p2=p2->next;
if(p1->x==p2->x)
{
if(p1->y>p2->y)
head_f->y+=5;
else
head_f->y-=5;
}
else
{
if(p1->x>p2->x)
{
head_f->x+=5;
}
else
head_f->x-=5;
}
}
void upon()
{
p1=head_f->next;
p1=p1->next;
head_f->y-=5;
if(p1->x==head_f->x&&p1->y==head_f->y)
{
head_f->y+=5;
ahead();
}
}
void down()
{
p1=head_f->next;
p1=p1->next;
head_f->y+=5;
if(p1->x==head_f->x&&p1->y==head_f->y)
{
head_f->y-=5;
ahead();
}
}
void left()
{
p1=head_f->next;
p1=p1->next;
head_f->x-=5;
if(p1->x==head_f->x&&p1->y==head_f->y)
{
head_f->x+=5;
ahead();
}
}
void right()
{
p1=head_f->next;
p1=p1->next;
head_f->x+=5;
if(p1->x==head_f->x&&p1->y==head_f->y)
{
head_f->x-=5;
ahead();
}
}
void food_f()
{
if(!food.judge)
{
food.x=(rand()%117+1)*5;
food.y=(rand()%117+1)*5;
food.judge=1;
if(food.x<30||food.y<30||food.x>570||food.y>570)
{
setcolor(RED);
circle(food.x,food.y,2);
setcolor(WHITE);
}
else
{
setcolor(GREEN);
circle(food.x,food.y,2);
setcolor(WHITE);
}
}
}
void crate()
{
p1=head_l->next=(struct bug *)malloc(sizeof(struct bug));
p1->next=NULL;
p1->last=head_l;
head_l=p1;
}