hur.cn - 华软网

 热门搜索

帮我看看这个贪吃蛇的代码。。运行结果好奇怪 = =、

  作者:未知    来源:网络    更新时间:2011/8/20
源码在这里:http://u.115.com/file/bhqh6d49

里面有一个drawsnake()函数的写法错了吧。。我不知道怎么改了。。

求教育。。
---华软 网友回答---
好多代码
---华软网友回复---
初学VC,没有参考其他贪吃蛇源码,全部过程算法自己想的。。

所以非常乱  = =、

关键就是那个drawsnake函数,


---华软网友回复---
我的实现方法是这样的:
一开始生成1500个蛇的身体组成模块,
其中第一个头部,snake[0].l本来是想代表一共几节蛇的.后来好像没用了.
其他的snake[i>0]的l代表是否显示蛇块。0代表不显示,1代表显示。
然后然后snake有个变量是确定移动方向的,按键只是改变下一次的运动方向,然后timer根据运动方向来移动蛇。
lastdir表示上一个移动方向,我是想用这个来传递运动方向给下一节蛇块的。
传递完以后,用drawsnake根据蛇块是否显示,还有方向什么的来画出蛇,
但是不知道为什么会变成现在这样,应该是drawsnake的问题,不知道怎么改 = =、
求教育。。
---华软网友回复---
引用 2 楼 jawliet_ 的回复:
初学VC,没有参考其他贪吃蛇源码,全部过程算法自己想的。。

所以非常乱  = =、

关键就是那个drawsnake函数,


那这个神仙都救不了你了。。。。
---华软网友回复---
加我QQ 教你.1173714269
---华软网友回复---
C++">void CZDlg::drawsnake()
{
 


int i=1;
snake[0].lastdir =snake[0].direction ;
while(snake[i].l==1)
{  
snake[i].lastdir =snake[i].direction ;
snake[i].direction =snake[i-1].lastdir ;

i++;

}

i=1;
while(snake[i].l ==1)
{
switch (snake[snake[i].l].direction)
{
case 'w':snake[i].x=snake[i-1].x;snake[i].y=snake[i-1].y+10; {/**/ /**/} break;
case 's':snake[i].x=snake[i-1].x;snake[i].y=snake[i-1].y-10; {/**/ /**/} break;
case 'a':snake[i].x=snake[i-1].x-10;snake[i].y=snake[i-1].y; {/**/ /**/} break;
case 'd':snake[i].x=snake[i-1].x+10;snake[i].y=snake[i-1].y; {/**/ /**/} break;
}
i++;
}
i=1;
draw(snake[0].x ,snake[0].y );
while(snake[i].l ==1)
{
draw(snake[i].x ,snake[i].y );
i++;

}
i=0;
switch (snake[i].direction)
{
case 'w':erasure( snake[i].x,snake[i].y+10);break;
case 's':erasure( snake[i].x,snake[i].y-10);break;
case 'a':erasure( snake[i].x-10,snake[i].y);break;
case 'd':erasure( snake[i].x+10,snake[i].y);break;
}


}

这样写有什么错误么?      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。