第65章 自动寻路(1 / 4)
段雷对谢维康细说说:“我不是在开发RPG游戏嘛,所有功能和剧情都已经搞定了,现在正做优化。之前一直用键盘操作,人物会跟着按键方向沿道路走,后来我想加个鼠标操作的功能,只要点击地图上任意一点,人物就能自己走过去。”
谢维康立刻赞同道:“这主意挺好啊,有什么问题吗?”
“问题就在这儿,”段雷接着说道,“点击之后,怎么检测从当前位置到鼠标点的路径呢?中间可能有障碍物,人物移动时得主动避开才行。”
谢维康摩挲着下巴沉思起来:“你说的确实是个关键,得想个自动寻路的办法,这事儿有点意思,你让我琢磨琢磨。”
说着,他让段雷打开游戏,按PRINT_SCREEN键截了张图,放进画图板里仔细观察,还时不时拿纸笔写写画画,专注地梳理思路。
段雷见他想得认真,也不打扰,就静静坐在身后看着。
大约过了十多分钟,谢维康突然一拍桌子,激动地喊道:“有啦!”
这一嗓子把段雷吓了个激灵,随即也跟着兴奋起来问道:“想出办法了?”
“嗯,有了。”谢维康点点头,指着屏幕讲解道,“首先,你创建一个和地图等大的二维数组当标记,先把数组全清零,起点标成1,终点标成-1。然后遍历整个数组,每个点都检查周围四个点的状态,如果没标记且是道路,就赋上比当前点大1的值,比如检测到1,周围未标记的通路就标成2,下一轮遍历再把检测到的2周围标成3,依此类推。每次遍历都记录能标记的点数,要是某次遍历一个点都没找到,说明起点到终点没通路,如果当前点周围找到了-1,就说明打通了通道。这时从终点按标记数值降序搜下去,周围有相同数字就随机选一个,这串点就是路径,把顺序倒过来就行。”
段雷听完,思索片刻后瞬间就明悟,马上在谢维康的电脑上按谢维康提供的算法写成代码。
写的时候他还稍作修改,改成从终点往起点遍历,这样最终的路径数据就不用倒转了。
大概花了一个小时后,代码写完,按下F5运行。
两人满怀期待地盯着屏幕,当段雷点击屏幕上的点,游戏主角果然自己动了起来,还自动绕开所有障碍物,精准抵达指定位置。
段雷高兴得又要凑上去亲他,吓得谢维康连忙怪叫道:“去去去,滚远点!别老是搂搂抱抱的,劳资对男人不感兴趣,不搞基!”
段雷目不转睛地看着他,认真说道:“哥,论写代码你不如我,但有一点是我拍马也赶不上的。”
谢维康疑惑道:“啥?我的C语言能有现在的水平,还是你领的路,你怎么反倒夸起我来了?”
“是你的逻辑思维能力,”段雷语气诚恳地说道,“这可能是天生的,你脑子也太好使了,再难的问题,你都能梳理出完整的逻辑方案,我是打心底佩服你。”
被段雷这么一夸,谢维康反倒有些不好意思,讪笑道:“哪里哪里,我也就是瞎琢磨。”
“你瞎琢磨都比我强,”段雷撇撇嘴,顺势往谢维康床上一躺,“你要是认真起来,还有我什么事?比如我最近重温位运算那一章,感觉太难了,位移、位或、位与、位段,搞得我脑瓜子嗡嗡的。”
谢维康又开始吹牛:“位运算有啥难的?我觉得挺简单啊。”
段雷立马翻身坐起,满眼希冀地说道:“哥,老实说,你是不是藏了什么秘诀?快交出来!”
谢维康轻轻拍了拍他的脑袋说道:“想学位运算,写个俄罗斯方块不就行了?”
“切,我还以为是什么好办法,”段雷不屑道,“你之前写的俄罗斯方块我看过,全是数组,没什么新鲜的。”
谢维康当即打开一段代码,一边指着屏幕一边介绍道:“但我后来重写过,全程用的位运算,你看。”
段雷凑近屏幕一看,惊呼道:“哇哦,还真是!这么多位运算操作!”说着兴奋地推了推谢维康的肩膀,“快说说,什么原理?”
谢维康不慌不忙地解释道:“俄罗斯方块的容器是宽十格、高二十格
↑返回顶部↑