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