首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请过来看一下。指点一二。关于贪吃蛇的代码有关问题2

2012-02-19 
请各位高手过来看一下。指点一二。关于贪吃蛇的代码问题2我今天用tc写了一个贪吃蛇的代码。没有语法上的错误,

请各位高手过来看一下。指点一二。关于贪吃蛇的代码问题2
我今天用tc写了一个贪吃蛇的代码。
没有语法上的错误,但是功能上蛇不能吃食物了。请各位高手过来看一下。指点一二。
#include "stdio.h" 
#include<bios.h> 
#include<graphics.h>
#include<stdlib.h>

#include<stdlib.h>
#define LEFT 19200
#define UP 18432
#define RIGHT 19712
#define DOWN 20480
#define ESC 283
#define N 150 
#define gamespeed 40000
struct Snake
{ int x[N],y[N];
int life;
int length;
int direction;
}snake; 
struct Food
{int x,y;
 int yes;
}food;
void Init(void);
void Draw(void);
void GamePlay(void);
void GameOver(void); 
void Close(void);
void main()
{ Init();
  Draw();
  GamePlay();
  Close();

void Init(void)
{ int gd=DETECT;int mode=0;
  initgraph(&gd,&mode,"d:\\tc"); 
 
}  
void Draw(void)
{
setcolor(4);
rectangle(0,0,getmaxx(),getmaxy());

void GamePlay(void)
{ int i,key; 
randomize();  
snake.length=3;  
snake.direction=1;/*方向向右*/
snake.life=0;
food.yes=1; /*要产生食物*/ 
  snake.x[0]=10;snake.y[0]=50;  
  snake.x[1]=15;snake.y[1]=50; 
  snake.x[2]=20;snake.y[2]=50;
  while(1)  
  { while(!kbhit())/*在没有按键的情况下蛇身自己移动*/
  { if(food.yes==1)
  { food.x=rand()%500+40;
  food.y=rand()%450+40;
  if(food.x%5!=0) food.x++;
  if(food.y%5!=0) food.y++;  
  food.yes=0;
  }  
  if(food.yes==0)
  {setcolor(8);  
  circle(food.x,food.y,5);
  }
  /*蛇身自己向前移的核心算法*/
  for(i=snake.length-1;i>0;i--)
  {snake.x[i]=snake.x[i-1]; 
  snake.y[i]=snake.y[i-1];
  }  
  switch(snake.direction) 
  { case 1: snake.x[0]+=10;break; /*向右*/
  case 2: snake.x[0]-=10;break; /* 向左*/ 
  case 3: snake.y[0]-=10;break; /*向上*/
  case 4: snake.y[0]+=10;break; /*向下*/
  }
  for(i=3;i<snake.length;i)
  { if(snake.x[0]+10==snake.x[i]&&snake.y[0]+10==snake.y[i])
  { GameOver();
  snake.life=1;
  break;
  }
  }
  if(snake.x[0]<10||snake.x[0]>getmaxx()||snake.y[0]<10||snake.y[0]>getmaxy())
  { GameOver();
  snake.life=1;
  }  
  if(snake.life==1) break;
  if(snake.x[0]==food.x&&snake.y[0]==food.y)
  { setcolor(0); 
  circle(food.x,food.y,5); 
  snake.x[snake.length]=-20;
  snake.y[snake.length]=-20;
  snake.length++;
  food.yes=1;
  }
  /*画蛇的代码*/  
  setcolor(4);
  for(i=0;i<snake.length;i++)
  circle(snake.x[i],snake.y[i],5);
  delay(gamespeed);
  setcolor(0);
  circle(snake.x[snake.length-1],snake.y[snake.length-1],5);
  }/*end while(!kbhit())*/ 
   
  key=bioskey(0);
  if(key==ESC) exit(0);
  if(key==UP&&snake.direction!=4)
  snake.direction=3;  
  if(key==DOWN&& snake.direction!=3)
  snake.direction=4;
  if(key==LEFT&&snake.direction!=1)
  snake.direction=2;
  if(key==RIGHT&&snake.direction!=2)


  snake.direction=1;
  } /*end while(1)*/
} /*end void gameplay*/
void GameOver(void)
{ cleardevice();
  setcolor(RED);
  settextstyle(0,0,4);
  outtextxy(200,200,"GameOver");
  getch(); 

void Close(void)
{ getchar();
  closegraph();
}

[解决办法]
if(snake.x[0]==food.x&&snake.y[0]==food.y) 
{ setcolor(0);
circle(food.x,food.y,5);
snake.x[snake.length]=-20; 
snake.y[snake.length]=-20; 
snake.length++; 
food.yes=1; 

看看坐标是不是有问题
刚才简单运行了下
食物和蛇都不会重合的,说明坐标有问题

热点排行