| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 532 人关注过本帖
标题:请教一个C语言贪吃蛇问题:为什么运行结果是蛇的长度在增加啊?
只看楼主 加入收藏
tiannanhaibe
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-8-24
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
请教一个C语言贪吃蛇问题:为什么运行结果是蛇的长度在增加啊?
我第一步只是编写一个简单的,没有食物,蛇也不增长,只是用上下左右四个键控制蛇的运动,蛇碰壁就退出。程序的算法就是蛇头的坐标根据方向而加减10,而蛇段的坐标则依次等于前面一节蛇段的坐标,然后把蛇尾黑掉(setcolor(0)),这样就实现了蛇的运动,但是问题是程序运行后,结果是蛇在不断地增长,这是怎么回事啊?我的程序错在什么地方,该怎么该啊?谢谢指点!程序如下:
#include "stdlib.h"
#include "graphics.h"
#include "dos.h"

#define N 200
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b

int key;
int speed=99000;

struct Snake
{
   int x[N];
   int y[N];
   int node;
   int direction;
   int life;
}snake;

void init();
void close();
void drawk();
void play();
void over();

void main()
{
   init();
   drawk();
   play();
   over();
   close();
}

void init()
{
   int gdriver=DETECT,gmode;
   initgraph(&gdriver,&gmode,"");
   cleardevice();
}

void close()
{
   cleardevice();
   closegraph();
}

void drawk()
{
   int i;
   setcolor(11);
   setlinestyle(SOLID_LINE,0,THICK_WIDTH);
   for(i=0;i<=55;i++)
   {
      rectangle(50+10*i,40,60+10*i,49);
      rectangle(50+10*i,451,60+10*i,460);
   }
   for(i=0;i<=41;i++)
   {
      rectangle(50,40+10*i,59,50+10*i);
      rectangle(601,40+10*i,610,50+10*i);
   }
}

void play()
{
   int i;
   snake.life=0;
   snake.direction=1;
   snake.x[0]=110;
   snake.y[0]=100;
   snake.x[1]=100;
   snake.y[1]=100;
   snake.node=2;
   while(1)
   {
      while(!kbhit())
      {
         for(i=snake.node-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;
         }
         if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455)
         {
            over();
            snake.life=1;
         }
         setcolor(4);
         for(i=0;i<snake.node;i++)
         {
            rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]+10);
         }
         delay(speed);
         setcolor(0);
         rectangle(snake.x[snake.node-1],snake.y[snake.node],snake.x[snake.node-1]+10,snake.y[snake.node]+10);
      }
      if(snake.life==1)
         break;
      key=bioskey(0);
      if(key==ESC)
         break;
      else if(key==UP&&snake.direction!=4)
          snake.direction=3;
      else if(key==RIGHT&&snake.direction!=2)
          snake.direction=1;
      else if(key==LEFT&&snake.direction!=1)
          snake.direction=2;
      else if(key==DOWN&&snake.direction!=3)
          snake.direction=4;
   }
}

void over()
{
   cleardevice();
   setcolor(RED);
   settextstyle(0,0,4);
   outtextxy(200,200,"game over!");
   getch();
}
搜索更多相关主题的帖子: 贪吃蛇 C语言 
2011-08-24 17:50
Luminal
Rank: 6Rank: 6
等 级:侠之大者
帖 子:140
专家分:470
注 册:2011-8-24
收藏
得分:20 
你的程序中setcolor(0);
         rectangle(snake.x[snake.node-1],snake.y[snake.node],snake.x[snake.node-1]+10,snake.y[snake.node]+10);
这里的问题,应该你没有把原来蛇的最后部分擦除,所以没走一步就增加一个蛇身!
2011-08-24 19:38
tiannanhaibe
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-8-24
收藏
得分:0 
找到错误的地方了,就是没黑掉,
setcolor(0);
rectangle(snake.x[snake.node-1],snake.y[snake.node],snake.x[snake.node-1]+10,snake.y[snake.node]+10);
中的snake.y[snake.node]应该是snake.y[snake.node-1]
2011-08-24 21:05
Luminal
Rank: 6Rank: 6
等 级:侠之大者
帖 子:140
专家分:470
注 册:2011-8-24
收藏
得分:0 
找到了那就结贴吧,哈哈
2011-08-25 10:11
快速回复:请教一个C语言贪吃蛇问题:为什么运行结果是蛇的长度在增加啊?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016368 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved