标题:贪食蛇中蛇的移动问题
只看楼主
leopardxp
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2007-7-26
结帖率:100%
 问题点数:0 回复次数:11 
贪食蛇中蛇的移动问题

刚刚开始学习用tc写一些图形程序,想自己编一个贪食蛇,可是刚开始蛇的默认向右边移动就没搞定~~我的思路是在蛇尾画背景色,蛇头向前移动,但是我按这个思路写了下面几行,试了一下,蛇尾还是不会动,只有蛇头会向右移动,成一条射线了。请各位指点后辈!不胜感激~~~~


struct thesnake
{
int x[maxsize];
int y[maxsize];
int len;/*蛇的长度*/
int life;
int direction;
}snake;


for(i=startplace;i<=range.rightside+10;i+=10)
{
setcolor(0);/*1是蛇身的颜色*/
bar(i,snake.y[0],i+10,snake.y[0]+10);
snake.x[0]=i;/*蛇头*/
snake.y[0]=startplace;/*startplace是开始移动的位置*/
ake.x[snake.len]=startplace-i;/*蛇尾*/
setcolor(2);/*2是背景色,用背景色重画蛇尾*/
bar(snake.x[snake.len],snake.y[0],snake.x[snake.len]+10,snake.y[0]+10);
delay(70000);
}

搜索更多相关主题的帖子: int 图形 direction range snake 
2007-07-26 11:31
anlogo
Rank: 2
等 级:论坛游民
威 望:1
帖 子:293
专家分:20
注 册:2007-7-20
得分:0 

觉得重画背景有问题:
bar(snake.x[snake.len],snake.y[0],snake.x[snake.len]+10,snake.y[0]+10);

2007-07-26 17:50
anlogo
Rank: 2
等 级:论坛游民
威 望:1
帖 子:293
专家分:20
注 册:2007-7-20
得分:0 
把所有程序贴出来才看得明白~~
2007-07-26 17:51
leopardxp
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2007-7-26
得分:0 
回复:(anlogo)把所有程序贴出来才看得明白~~

我把程序又改了一下,以下面这个为准,但是还是有同样的问题~

/*这就是关键部分,程序还没有写完,但是这些已经能够测试蛇的移动了,可以编译,问题就是蛇尾不会移动!!!

说明:蛇每一节的尺寸为10*10的正方形,目前该程序完成的功能仅为初始画出蛇并默认向右移动*/
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#define esc 0x011b
#define left 0x4b00
#define right 0x4d00
#define up 0x4800
#define down 0x5000
#define maxsize 1000
struct therange
{
int top;
int bottom;
int leftside;
int rightside;
}range;

struct thesnake
{
int x[maxsize];
int y[maxsize];
int len;
int life;
int direction;
}snake;

void drawrange()/*画边界*/
{
range.top=50;
range.bottom=400;
range.leftside=50;
range.rightside=400;
setcolor(4);
bar(40,40,50,410);
bar(50,400,410,410);
bar(40,40,410,50);
bar(400,50,410,410);
}


main()
{
int x;
int y;
int i,j;
int startplace;
int gdrive,gmode;
gdrive=DETECT;
initgraph(&gdrive,&gmode,"");

setbkcolor(2);

drawrange();


startplace=250;/*起始位置*/
snake.len=2;/*蛇的最后一节的相对位置*/
snake.x[0]=startplace;/*蛇头x坐标*/
snake.y[0]=startplace;/*蛇头y坐标*/
snake.x[snake.len]=snake.x[0]-30;/*蛇尾的x坐标,开始为一个三节长的蛇*/
snake.y[snake.len]=snake.x[0];/*蛇尾的y坐标*/
setcolor(0);/*蛇身的颜色*/
bar(snake.x[snake.len],snake.y[snake.len],snake.x[0],snake.y[0]);/*画出初始三节的蛇*/


while(!kbhit())
{
delay(700000);
snake.x[0]+=10;/*新的蛇头的x坐标*/
setcolor(0);/*画出新的蛇头*/
bar(snake.x[0],snake.y[0],snake.x[0]+10,snake.y[0]+10);
setcolor(2);/*用背景色画蛇尾*/
bar(snake.x[snake.len],snake.y[snake.len],snake.x[snake.len]+10,snake.y[snake.len]+10);
snake.x[snake.len]+=10;/*画完当前蛇尾后自动保存下一次循环蛇尾的位置*/

}

getch();
closegraph();

}



[此贴子已经被作者于2007-7-27 21:05:54编辑过]


Never stop running
2007-07-27 20:59
奔跑的鸟
Rank: 1
等 级:新手上路
帖 子:391
专家分:0
注 册:2006-1-20
得分:0 
32PgfgXz.rar (2.51 KB) 贪食蛇中蛇的移动问题


lz看看这个,应该有帮助

简单的快乐着~
2007-07-27 22:53
leopardxp
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2007-7-26
得分:0 
回复:(奔跑的鸟)[upload=rar]viewFile.asp?ID=2494...
多谢楼上啊~呵呵~那个附件里的贪食蛇源码我见过的,没有太仔细看,我想先按自己的思路编,弄好以后再看看高手的~所以我想知道我的蛇尾怎么就动不了

Never stop running
2007-07-28 12:11
anlogo
Rank: 2
等 级:论坛游民
威 望:1
帖 子:293
专家分:20
注 册:2007-7-20
得分:0 
发现setcolor()用不了,原因是出现颜色叠加现象
在你的程序中,设置了背景色为绿色
当使用bar函数绘图时,无论前景色设置什么颜色,绘出的图象颜色总为白色
望高手指教.
给LZ一个建议放弃使用graphsic库函数
直接对显存操作
2007-07-29 10:36
leopardxp
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2007-7-26
得分:0 
回复:(anlogo)发现setcolor()用不了,原因是出现颜色...

是的,我也发现这个问题了,换什么颜色都不行~~~~~~~哪位高手解释一下?

[此贴子已经被作者于2007-7-29 16:48:22编辑过]


Never stop running
2007-07-29 13:02
奔跑的鸟
Rank: 1
等 级:新手上路
帖 子:391
专家分:0
注 册:2006-1-20
得分:0 
错误不少
startplace=250;/*起始位置*/
snake.len=2;/*蛇的最后一节的相对位置*/
snake.x[0]=startplace;/*蛇头x坐标*/
snake.y[0]=startplace;/*蛇头y坐标*/
snake.x[snake.len]=snake.x[0]-30;/*蛇尾的x坐标,开始为一个三节长的蛇*/
snake.y[snake.len]=snake.x[0];/*蛇尾的y坐标*/
setcolor(0);/*蛇身的颜色*/
bar(snake.x[snake.len],snake.y[snake.len],snake.x[0],snake.y[0]);/*画出初始三节的蛇*/这里画不出原始的三节蛇
snake.x[0]+=10;/*新的蛇头的x坐标*/
setcolor(0);/*画出新的蛇头*/
bar(snake.x[0],snake.y[0],snake.x[0]+10,snake.y[0]+10);
这里蛇头坐标不对,画出来是断的
蛇尾不动的原因:你不设置填充模式bar函数怎么能正常啊?????setfillstyle(1 , 2);加上这个就行了........

[此贴子已经被作者于2007-7-29 18:11:15编辑过]


简单的快乐着~
2007-07-29 18:10
leopardxp
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2007-7-26
得分:0 
回复:(奔跑的鸟)错误不少startplace=250;/*起始位置...

我用蓝色标记,红色是奔跑的鸟的标记

snake.x[snake.len]=snake.x[0]-30;/*蛇尾的x坐标,开始为一个三节长的蛇*/
snake.y[snake.len]=snake.x[0];/*蛇尾的y坐标*/
setcolor(0);/*蛇身的颜色*/
bar(snake.x[snake.len],snake.y[snake.len],snake.x[0],snake.y[0]);/*画出初始三节的蛇*/这里画不出原始的三节蛇
开始我画了一条10*30的bar,所以认为它是三节的啊~

snake.x[0]+=10;/*新的蛇头的x坐标*/
setcolor(0);/*画出新的蛇头*/
bar(snake.x[0],snake.y[0],snake.x[0]+10,snake.y[0]+10);
这里蛇头坐标不对,画出来是断的
蛇头坐标我看不出来怎么错了啊,但运行发现确实不对~能详细点解释一下吗?十分感谢!

[此贴子已经被作者于2007-7-29 20:22:00编辑过]


Never stop running
2007-07-29 20:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-158219-1-1.html




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

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