tc下运行
#include <stdio.h>
#include<conio.h>
#include<bios.h>
#define KEY_UP 0x48
#define KEY_LEFT 0x4B
#define KEY_RIGHT 0x4D
#define KEY_DOWN 0x50
#define TIME 90000
int tx,ty,key,f=1,over=0;
char k;
struct point{
int x;
int y;};
struct s{
int length;
struct point body[20];}snake;
struct f{
int x;
int y;}food;
void delay()
{ long t1,t2;
for(t1=0;t1<=1200;t1++)
for(t2=0;t2<=TIME;t2++)
;
}
void gameover()
{int i;
for(i=1;i<snake.length;i++)
if(snake.body[snake.length].x==snake.body[i].x&&snake.body[snake.length].y==snake.body[i].y)
over=1;
}
void boundary()
{int a,b=3;
gotoxy(21,3);
for(a=0;a<50;a++)
printf("-");
gotoxy(21,22);
for(a=0;a<50;a++)
printf("-");
for(a=0;a<20;a++)
{gotoxy(21,b++);
printf("l");
}
b=3;
for(a=0;a<20;a++)
{
gotoxy(70,b++);
printf("l");
}
}
void snakelocation()
{ int i,a,b;
if(tx<21)
tx=70;
else if(tx>70)
tx=21;
if(ty<3)
ty=22;
else if(ty>22)
ty=3;
a=snake.body[snake.length].x;
b=snake.body[snake.length].y;
if(tx==food.x&&ty==food.y)
{snake.length++;
tx=food.x;
ty=food.y;
food.x=rand()%47+22;
food.y=rand()%17+4;
}
snake.body[snake.length].x=tx;
snake.body[snake.length].y=ty;
for(i=1;i<snake.length-1;i++)
{snake.body[i].x=snake.body[i+1].x;
snake.body[i].y=snake.body[i+1].y;
}
snake.body[snake.length-1].x=a;
snake.body[snake.length-1].y=b;
}
void showsnake()
{int i;
clrscr();
boundary();
gotoxy(food.x,food.y);
printf("@");
for(i=1;i<snake.length;i++)
{gotoxy(snake.body[i].x,snake.body[i].y);
printf("*");
}
gotoxy(snake.body[snake.length].x,snake.body[snake.length].y);
printf("0");
}
void main()
{start:
snake.length=1;
snake.body[1].x=tx=rand()%47+22;
snake.body[1].y=ty=rand()%17+4;
food.x=rand()%47+22;
food.y=rand()%17+4;
while(over==0)
{
while(!kbhit())
{switch(f)
{case 1:ty--;break;
case 2:ty++;break;
case 3:tx--;break;
case 4:tx++;break;
}
snakelocation();
gameover();
if(over)
goto stop;
delay();
showsnake();
}
key=getch();
switch(key)
{case KEY_UP:
if(f!=2){
f=1;}break;
case KEY_DOWN:
if(f!=1){
f=2;}break;
case KEY_LEFT:
if(f!=4){
f=3;}break;
case KEY_RIGHT:
if(f!=3){
f=4;}break;
}
if(key==32)/*空格退出*/
break;
}
stop: clrscr();
gotoxy(40,10);
printf("gameover!score is %d do you want again?y/n",snake.length);
scanf("%c",&k);
if(k=='y') {over=0;
goto start;
}
else if(k=='n')
over=1;
else
printf("input error");
}