今天跟大家唠唠我做的那个单机版连连看,纯粹是自己瞎琢磨,也没啥高深的技术,就是想把小时候玩的游戏自己做一遍,也算圆个梦。
我寻思着这游戏的核心就是匹配嘛找到两个一样的图案,然后看看能不能用线连起来,最多拐两个弯。听起来简单,但真动手了,还是遇到不少坑。
- 第一步:素材准备
- 第二步:界面搭建
- 第三步:生成水果
- 第四步:点击事件
- 第五步:消除判断
- 第六步:动画效果
- 第七步:游戏逻辑
先别急着写代码,素材是关键。我找了一堆可爱的水果图片,什么苹果、香蕉、葡萄,分辨率不高,但看起来挺舒服。然后用PS简单处理了一下,让它们风格统一。
用Unity新建了个项目,Canvas拉满,然后用GridLayoutGroup来排列水果。这个GridLayoutGroup挺好用的,能自动把水果排列成矩形,省了我不少事。
这里有个小技巧,先把水果种类放到一个List里,然后随机抽取,生成一个二维数组,代表游戏面板。为了保证能消除,每种水果都得是偶数个。这部分代码写得我脑壳疼,老是出错,还是靠Debug大法搞定的。
给每个水果都挂上一个脚本,监听点击事件。第一次点击记录下来,第二次点击就判断是不是同一种水果,如果不是,就重置;如果是,就进入下一步:判断能不能消除。
这是最难的地方,要判断两个水果之间能不能用不超过两个拐弯的线连起来。我用了A算法,稍微改了一下,只允许横竖走,然后限制拐弯次数。这部分代码写得我头发都快掉光了,各种边界条件、各种特殊情况,改了一遍又一遍。
消除的时候,加个简单的动画效果,比如缩放、透明度变化。这样玩起来更有感觉。我用的DOTween插件,挺方便的,几行代码就能实现各种动画效果。
判断游戏是否结束,也就是看面板上是不是没有可以消除的水果了。这部分很简单,遍历一下二维数组就行了。
遇到的坑
- A算法理解不够透彻,导致寻路结果不正确。
- 边界条件考虑不全,导致程序崩溃。
- 动画效果太生硬,影响游戏体验。
最终效果
虽然画面简陋,bug也不少,但总算能玩了。自己做的游戏,玩起来感觉就是不一样。下次准备加点难度,比如时间限制、道具等等。也希望大家多多指教,给我提提建议。
这回做连连看单机游戏,收获还是挺大的。不仅复习了算法,还熟悉了Unity的各种组件。最重要的,是体会到了做游戏的乐趣。以后有时间,再试试做其他小游戏。