| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1925 人关注过本帖
标题:c语言小贪吃蛇无故的小概率bug烦死我了,谁能给看看!谢谢!
取消只看楼主 加入收藏
h781458175
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-2-7
结帖率:55.56%
收藏
已结贴  问题点数:20 回复次数:10 
c语言小贪吃蛇无故的小概率bug烦死我了,谁能给看看!谢谢!
    本人是一个c语言初学者,一天突发奇想就想作一个贪吃蛇,经过好长时间,我竟然做出来了,我在完成主体逻辑后就开始往里面填加其他功能,但现在我发现一个很不可思议的问题,应该说是两个:一、蛇竟然有一次穿出墙了!!!二、有时个画面上出现两个食物(不知是不是因为食物的产生函数而产生的,反正是除了蛇身之外有两个点);最火的是它们出现一两次之后就不再出现了,搞得我想修正也觉得线索太少了。
    至于网上说的什么,内存监测之类的查错方法,我也不会呀,对于这种小概率的bug到底该如何是好啊,感觉很无力,想着我一个初学者就受这样的打击,不知以后做大项目该怎么办啊!现在我把源码贴出来,妄图有哪位大侠能有耐心看完我的并不规范的代码,替我找出我的小bug在哪啊?我实在是没办法了啊,吃不下睡不好的!
    我源码是在winTc下编译的,用到直接写屏!平时运行没有任何错误(我想着也不应该有什么错啊!
snake_v1.1(win_tc130405).rar (4.14 KB)

    或者可谁能提供一个查错的其他方法,我现在基本上只会死想,死看代码!
搜索更多相关主题的帖子: 突发奇想 贪吃蛇 
2013-04-05 15:14
h781458175
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-2-7
收藏
得分:0 
第二个问题应该是:见过它同时出现过两个食物,但按我的逻辑只可能一次吃完上一子后调一次生成食物函数,而第调一次生成食物函数只会产生一个食物!
2013-04-05 15:18
h781458175
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-2-7
收藏
得分:0 
刚才又一次跑出墙了,我都抓狂了,难道这辈子也不能知道原因了!!
2013-04-05 21:04
h781458175
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-2-7
收藏
得分:0 
我这个必须在wintc下,用vc是编译不了的,far指针在vc下是不认的;必须在wintc下。。。上面好像已经说了


不过昨晚我已经搞出穿墙的问题了,穿墙只会在蛇紧贴墙走时再按朝墙的方向键时会出现,原因是因为变换方向的时候,我少写了一个判断,会直接覆盖墙的标记,而使蛇在碰到墙时不会报告已死,一旦蛇头过了墙其他的蛇身没有判断生死的功能(我只判断蛇头是否撞上墙或自己),所以就直接到墙外去运行了,加上那一句判断就好了。

不过出现双食物的那个问题仍然没有解决啊,昨晚双食物问题又出现了它有生以来的第三次,我可以把图扒上来
图片附件: 游客没有浏览图片的权限,请 登录注册

经我分析上面的这个#不是由生成食物的函数产生的,因为我后来限定生成食物的函数不会出现#食物,所以我想它应该是从蛇身上“掉”下来的,可什么时候掉的,怎么“掉”的就那么低概率,我还是不知道啊!


希望大家多多关注,高手帮忙啊,这会不会是一个很隐匿的bug,不找出来我很受伤啊!!!!!!!!!!!!
2013-04-06 09:20
h781458175
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-2-7
收藏
得分:0 
回复 8楼 邓士林
必须在winTC下编译!
2013-04-06 09:23
h781458175
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-2-7
收藏
得分:0 
回复 7楼 邓士林
应该在winTC下编译!也只能在winTC,其他不认识far,网上说是这是个淘汰的东西了。呵呵
2013-04-06 09:25
h781458175
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-2-7
收藏
得分:0 
回复 12楼 fanpengpeng
    呵呵,首先感谢大哥啊,我都是抱着试一试的心态发上来的,因为我想着一般人怎么会有耐心去看别人的代码,而且去找一个比较隐蔽的bug;就是我也有点不想从头再仔细梳理一下的感觉;
    大哥一语中的啊,就是这个问题啊,困扰我好久了,昨晚我也找出它来了,不过您不要笑话我,我其实不是从代码上找出来的,因为可能我下意识的认为这样++或--是没有问题的,潜意识就不会认为它是错的(虽然我也在这个函数上徘徊过呵呵);我昨晚是用屏幕录像专家录制了出现此bug的画面而发现出错的特定条件的,我想我一说您一定知道这是多么笨的一个办法啊,因为光等它出现我就玩了有半个小时多(虽然我已经觉得很幸运了呵,时间不长其实!上天怜悯啊!);
    至于蛇尾三个空间都被包住的情况,我写的时候也想来着,当时想的脑子打结,感觉怎么也不能想出一种全部包住的情况吧,现在还是想不出来啊,下来我再想想!!
    再有那个切掉蛇尾加到蛇头,再移动蛇头的方法确实是我自己想的哈,多谢夸奖;当时想的其实主要是尽可能多的少移步,这样执行步数会少很多,效率会高,还有一个最重要的原因是因为我刚作的时候用的是printf(),在一个统一的打印函数里每次刷一次屏,闪的厉害,所以想着越少移动越不闪;
    至于标识符的问题,我这可是没有办法啊,英语太菜啊,能用英语的地方我也就努力用英语了,只是有的实在是想不起来用英语怎么写,要是强用有道查出来写上,我怕到时候我自己也不认识了呵;不过这个程序刚开始是在vc++ 6下写的,在那下面我对每个标识符都做了详细的中文注释的,只不过后来要用直接写屏,vc下用不了,我就转到wintc下,中文注释一概不能用,我就全删了,当时也是比较心痛的。
    小冗余可能是因为这个从刚开始的printf()的显示方法,转到直接写屏后有些东西已经没有必要了,但我也没删它。我会努力的!
    大哥的话真正增加了我的自信啊,我现在还在培训机构学编程了,这是我的第二个程序,第一个是学校的c语言毕业设计--ATM机,所以我才这么拧巴一定要找出这个小bug来,要不以后我会有阴影的,呵
    再次谢谢大哥的大师级大无私的解答!!
2013-04-07 10:19
h781458175
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-2-7
收藏
得分:0 
回复 14楼 fanpengpeng
    怎么还是不对劲啊感觉,比如左上角的那个图,您一定是以下为头,上为尾巴吧,那样的话,如果我要求把这个状态回退一步的话,会成为什么呢?因为能走到这一步就一定会上一步是吧,这好像就退不回去了,既然没有上一步哪来的这一步啊;
    中间的那个例子也是同样的问题,不知我说的对不对啊,对这个问题我就一直是这样考虑的!所以似乎觉得好像没有这种全包住的情况。。。。。。
2013-04-07 20:19
h781458175
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-2-7
收藏
得分:0 
回复 16楼 fanpengpeng
这都被你想到了,厉害;有时候编程不就是要想一些极端的问题嘛,这个想法很值得借鉴!多思考,虽然程序bug无处不在,路漫漫。。。
2013-04-07 23:05
h781458175
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-2-7
收藏
得分:0 
回复 18楼 wlguyu1985
主要是far指针vc已经不支持了!
2013-04-08 21:04
快速回复:c语言小贪吃蛇无故的小概率bug烦死我了,谁能给看看!谢谢!
数据加载中...
 
   



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

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