1.原因
前面写过一篇有关贪吃蛇实现的小文《
完全用链表实现的贪吃蛇》,其实现得很统一,几乎完全用链表实现了所有的元素,然而其效率不甚高。该实现虽然津津乐道于没有使用二维数组,然而却大量使用链表,实际上是将二维数组的双for循环换成了大量链表的遍历,虽然由于受到游戏面板长度宽度的限制,算法时间复杂度不会到O(N),但效率仍不敢恭维。
经由验证考研,网上朋友的指点,加之自己的思考,今天重新实现了一版,去除了上一版的“抽象但无用”的“统一于链表”的思想,更多的融入了OO的思想以及一些优化,通篇没有一次遍历整个链表。
2.保留的链表以及更改的数据结构
虽然这一版声明不再使用链表,然而做事不能太极端,我还是保留了freelist链表,因为这在生成食物以及随机障碍物的时候十分有用,否则就要通过下面的算法进行了:
在长蛇阵的情况下,循环次数将增加。另外保留了deltalist,该链表指示了“哪些位置需要重画”,具体怎么重画和该位置的type属性有关,这就需要更改数据结构。该版贪吃蛇对数据结构进行了大量的封装,访问数据必须通过get/set方法进行,对position类进行了扩充,增加了type位属性,对snake进行了整体封装,不再将蛇链表导入Game_pad中,对于蛇的移动,取消了拐点链表,而是直接将蛇尾删除加入蛇头。
3.代码
这个版本的蛇跑起来的话,CPU利用率大大降低,比完全链表版的提高不少,比完全二维数组版的效率提高更多,虽然完全链表版的理解起来更直观,然而此版本的程序CPU执行起来更轻松,孰重孰轻,还是自己权衡。
这是一个真正可玩的版本,然而到此我就再也做不下去了,GUI不是我所长,设计加分/计分/排名逻辑也非我所好,就此打住了,不过我深深知道,这种性格是一个人生致命的缺陷
分享到:
相关推荐
-java实现贪吃蛇-毕设论文.doc
用java实现的贪吃蛇程序,里面含有源码以及详细的注释,保证能让大家阅读明白它的运行思路。并已导出,可在安装有jdk的电脑上独立运行。很适合初学者学习。
java贪吃蛇程序!利用graphics实现贪吃蛇程序!
简单的贪吃蛇java代码
不会改成0分,只能设置为最低分,java实现贪吃蛇-源码+资源+可运行的jar包,下载后直接解压双击内部的jar包可直接查看运行效果,内部符源码和资源,注释详细,欢迎下载
经典贪吃蛇游戏,Java实现,基于JDK1.8,可选难度,操作简单,界面精美,有注释参考
java实现贪吃蛇-学位论文.doc
java语言编写的贪吃蛇游戏,实现比较简单。用到了GUI、键盘事件监听、绘图函数的重载、集合类等。
Java实现贪吃蛇小游戏Java实现贪吃蛇小游戏Java实现贪吃蛇小游戏Java实现贪吃蛇小游戏 Java实现贪吃蛇小游戏Java实现贪吃蛇小游戏Java实现贪吃蛇小游戏Java实现贪吃蛇小游戏 Java实现贪吃蛇小游戏Java实现贪吃蛇小...
贪吃蛇-C++-超级精简版贪吃蛇-C++-超级精简版贪吃蛇-C++-超级精简版贪吃蛇-C++-超级精简版
毕业论文-java实现贪吃蛇.doc
-java实现贪吃蛇学士学位论文.doc
-java实现贪吃蛇本科学位论文.doc
java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 ...
Java贪吃蛇源码Java贪吃蛇源码Java贪吃蛇源码Java贪吃蛇源码Java贪吃蛇源码Java贪吃蛇源码
java课程设计作业——java实现小游戏合计-2048+飞机大战+贪吃蛇+俄罗斯方块(源码),可直接运行,有趣好玩,适合学习 这是一个java小游戏项目,里面包含了如下游戏: 2048(2048) 飞机大战(plane_war) 贪吃蛇(Snake)...
贪吃蛇-v1.0.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码贪吃蛇-v1.0.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码贪吃蛇-v1.0.zipscratch2.0 3.0编程项目源文件源码经典游戏案例...