笔趣阁

紫夜小说>奋进的素材 > 第65章 自动寻路(第1页)

第65章 自动寻路(第1页)

段雷对谢维康细说说:“我不是在开rpg游戏嘛,所有功能和剧情都已经搞定了,现在正做优化。之前一直用键盘操作,人物会跟着按键方向沿道路走,后来我想加个鼠标操作的功能,只要点击地图上任意一点,人物就能自己走过去。”

谢维康立刻赞同道:“这主意挺好啊,有什么问题吗?”

“问题就在这儿,”段雷接着说道,“点击之后,怎么检测从当前位置到鼠标点的路径呢?中间可能有障碍物,人物移动时得主动避开才行。”

谢维康摩挲着下巴沉思起来:“你说的确实是个关键,得想个自动寻路的办法,这事儿有点意思,你让我琢磨琢磨。”

说着,他让段雷打开游戏,按prt_s键截了张图,放进画图板里仔细观察,还时不时拿纸笔写写画画,专注地梳理思路。

段雷见他想得认真,也不打扰,就静静坐在身后看着。

大约过了十多分钟,谢维康突然一拍桌子,激动地喊道:“有啦!”

这一嗓子把段雷吓了个激灵,随即也跟着兴奋起来问道:“想出办法了?”

“嗯,有了。”谢维康点点头,指着屏幕讲解道,“先,你创建一个和地图等大的二维数组当标记,先把数组全清零,标成,终点标成-。然后遍历整个数组,每个点都检查周围四个点的状态,如果没标记且是道路,就赋上比当前点大的值,比如检测到,周围未标记的通路就标成,下一轮遍历再把检测到的周围标成,依此类推。每次遍历都记录能标记的点数,要是某次遍历一个点都没找到,说明到终点没通路,如果当前点周围找到了-,就说明打通了通道。这时从终点按标记数值降序搜下去,周围有相同数字就随机选一个,这串点就是路径,把顺序倒过来就行。”

段雷听完,思索片刻后瞬间就明悟,马上在谢维康的电脑上按谢维康提供的算法写成代码。

写的时候他还稍作修改,改成从终点往遍历,这样最终的路径数据就不用倒转了。

大概花了一个小时后,代码写完,按下f运行。

两人满怀期待地盯着屏幕,当段雷点击屏幕上的点,游戏主角果然自己动了起来,还自动绕开所有障碍物,精准抵达指定位置。

段雷高兴得又要凑上去亲他,吓得谢维康连忙怪叫道:“去去去,滚远点!别老是搂搂抱抱的,劳资对男人不感兴趣,不搞基!”

段雷目不转睛地看着他,认真说道:“哥,论写代码你不如我,但有一点是我拍马也赶不上的。”

谢维康疑惑道:“啥?我的c语言能有现在的水平,还是你领的路,你怎么反倒夸起我来了?”

“是你的逻辑思维能力,”段雷语气诚恳地说道,“这可能是天生的,你脑子也太好使了,再难的问题,你都能梳理出完整的逻辑方案,我是打心底佩服你。”

被段雷这么一夸,谢维康反倒有些不好意思,讪笑道:“哪里哪里,我也就是瞎琢磨。”

“你瞎琢磨都比我强,”段雷撇撇嘴,顺势往谢维康床上一躺,“你要是认真起来,还有我什么事?比如我最近重温位运算那一章,感觉太难了,位移、位或、位与、位段,搞得我脑瓜子嗡嗡的。”

谢维康又开始吹牛:“位运算有啥难的?我觉得挺简单啊。”

段雷立马翻身坐起,满眼希冀地说道:“哥,老实说,你是不是藏了什么秘诀?快交出来!”

谢维康轻轻拍了拍他的脑袋说道:“想学位运算,写个俄罗斯方块不就行了?”

“切,我还以为是什么好办法,”段雷不屑道,“你之前写的俄罗斯方块我看过,全是数组,没什么新鲜的。”

谢维康当即打开一段代码,一边指着屏幕一边介绍道:“但我后来重写过,全程用的位运算,你看。”

段雷凑近屏幕一看,惊呼道:“哇哦,还真是!这么多位运算操作!”说着兴奋地推了推谢维康的肩膀,“快说说,什么原理?”

谢维康不慌不忙地解释道:“俄罗斯方块的容器是宽十格、高二十格,里面有七种形状的方块往下掉,堆积到底部后,满一层就消除,上面的整行下落,对吧?”

段雷点点头。

“而且方块在屏幕上只有显示和不显示两种状态,对应和o,表示显示,o表示不显示。”谢维康继续说道,“一行有十列,char型数据显然不够用,那就用short型,十六位还富余六位。我用表示一行容器数据,两边赋,中间十位是游戏可视空间。”

段雷挠挠头,不解地问道:“为啥非得用?用不行吗?”

谢维康又拍了拍他的头说道:“也行啊,我有强迫症,不弄对称我睡不着觉,这总行了吧?”

“切,我还以为有什么特殊要求。”段雷轻哼一声。

谢维康作势还要拍他的头,段雷赶紧歪头躲开责怪道:“哥,别老打我头!本来就没你聪明,再打就更笨了。”

本小章还未完,请点击下一页继续阅读后面精彩内容!

谢维康没理他,接着讲解道:“现在把左移到对应位,和这一行数据做位与运算,得到非零值就显示这个点,否则就不处理,这样就能把游戏绘制到屏幕上。方块往左移动时,把方块数据左移一位后,和对应容器行做位与,值为零说明没有重叠,可以移动,非零就是有重叠,不能动。而且容器两边事先设了当墙壁,位与到这里时肯定是非零,连判断是否到边缘的步骤都省了。往右、往下移动的原理一样。方块不能往下移时,做位或运算就能堆进容器。判断一行是否填满,直接检查容器行数据是不是oxffff就行。你看,游戏逻辑一下就简单了,而且写完这个游戏,你肯定能深刻理解位运算,位或、位与、位移搞懂了,位异或之类的还不是照葫芦画瓢?最重要的是,这样写出来的代码执行效率特别高。”

段雷看着他,由衷赞道:“哥,我说你脑子比我好使吧,你还不信!这么损的学习方法都能想出来,不过是真好用,用写游戏来学知识,这主意绝了。”

谢维康谦虚道:“我也是被逼出来的,想快点学好编程,所以现在全身心都扑在上面。你也得加油,游戏什么时候都能玩,现在学习是第一位的。等咱们总结好经验,以后一起创业怎么样?”

段雷认真点头:“好!到时候咱哥俩一起干。对了,你那个麻将游戏弄好了吗?”

谢维康讪笑:“还没呢,国标麻将的ai不好写,之前的方案有不少缺点,正打算重写。我想到个好办法,按麻将规则扫描每一张牌,根据能组合的牌型估值,值越大越该保留,每次打最小的那张。估值方案我已经想好了,正在修改,结果被你打断了。”

“没事,就你这脑子,写出来的ai肯定惊艳。”段雷爽快地说。

谢维康鄙夷地看他:“得了吧,我不喜欢别人拍马屁。”

“我没拍!我说的是实话。”段雷委屈道。

“我估计还有一个月能完工,”谢维康提议,“到时候我把我的游戏给你玩,你也把你的给我,咱们互相提意见、找bug,让游戏质量再上一个台阶。”

段雷竖起大拇指:“还是你脑子好使,这主意太棒了!到时候咱们交叉测试,好好打磨打磨。”

两人相视一笑,伸出手紧紧握在一起。

不知不觉天已经黑了,楼下传来陈银珍的喊声:“臭小子,吃饭了!成天对着你那破电脑瞎按,饭也不煮,有本事你按一辈子!”

段雷听到这话,无奈地摇摇头,对谢维康轻声说:“我回家的时候,我妈也总这么说我。”

谢维康拍了拍他的肩膀:“没办法,他们对编程这种新兴行业接受不了,很正常。”

已完结热门小说推荐

最新标签