c 贪吃蛇

 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");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值