使用链表设计基于方块游戏的本质

简介:
完全使用链表使得数据结构更加统一,并且将游戏面板上的所有元素看做链表元素本身就是合理的,在《 完全用链表实现的贪吃蛇 》一文中,其中有一个图示,其中大红色的线段连接的元素指示了需要拐弯的节点,类似一种路标,这也是一种链表...。
     这种链表的设计很容易扩展到其它情形,诸如俄罗斯方块等小游戏的设计。实际上任何的基于方块的平面游戏(或者3D游戏),都可以使用基于链表的方案进行开发,这种方式使用链表将游戏中的元素聚合了起来,之后的游戏逻辑可以完全归结为针对链表的操作。
     但是且慢,在那篇文章中,有位哥们提出一个更好的算法,以下是他的回复:蛇的移动可以采取更简单的处理方式,就是在移动过程中,首先判断当前蛇的移动方向AB(蛇头的坐标A减去与蛇头相邻的下一个节点的坐标B,矢量型的),再根据按键的方向C(上下左右,矢量型,如(1,0)表示右),得到蛇头的移动矢量D(D=AB+C),要是D=(0,0)的话,则不移动,否则,将蛇尾从蛇身中删除,再将其坐标修改为A+D,并将其插到蛇头前面做为新的蛇头,即可.此方法免去了对拐点的判断,而且时间复杂度为O(1).
     以下是我的回复:开始也是这么想的,可是后来放弃了,我总想用统一的链表来包容所有的元素,包括拐点,然后把坐标和链表分离,仅仅作为链表的一个属性。把问题搞复杂了,看来有时候真得返璞归真啊,不能一味寻求什么统一。

     真的如此啊,有的时候不能寻求太多的所谓统一!仔细考虑了自己的所谓统一算法之后,觉得虽然遍历了好几次链表,算法的时间复杂度并不是O(n),因为还有边墙的限制,一条蛇的任何一部分身体节点都不会超过面板的长度或者宽度。



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1270940

相关文章
|
存储 数据管理 C语言
C语言实战 | 使用链表完成“贪吃蛇”游戏
【7月更文挑战第1天】整体思维,即系统思维,强调以整体视角理解事物。在编程中,结构体体现这种思想,将相关变量打包处理。示例展示了如何用链表而非数组实现“贪吃蛇”游戏,链表提供了更灵活的动态数据管理。一系列代码图片详细描绘了链表结构体在游戏中的应用,包括节点定义、移动、碰撞检测等,凸显了使用链表的优势和代码的清晰组织。
203 0
C语言实战 | 使用链表完成“贪吃蛇”游戏
|
存储 算法 C++
STL设计之链表设计,分块分组件分析,迭代器设计思路
STL设计之链表设计,分块分组件分析,迭代器设计思路
STL设计之链表设计,分块分组件分析,迭代器设计思路
|
算法
代码随想录算法训练营第三天 | 链表 206. 反转链表 707. 设计链表 203. 移除链表元素
代码随想录算法训练营第三天 | 链表 206. 反转链表 707. 设计链表 203. 移除链表元素
167 0
|
测试技术 API 索引
【day10】LeetCode(力扣)刷题(注释详细)[707.设计链表][278.第一个错误的版本][98. 验证二叉搜索树]
刷题(注释详细)[707.设计链表][278.第一个错误的版本][98. 验证二叉搜索树]。
245 0
【day10】LeetCode(力扣)刷题(注释详细)[707.设计链表][278.第一个错误的版本][98. 验证二叉搜索树]
|
算法 C++
【牛客刷题-算法】加精 | 合并两个有序的链表 - 从思路设计、bug排除到最终实现的全过程
【牛客刷题-算法】加精 | 合并两个有序的链表 - 从思路设计、bug排除到最终实现的全过程
249 0
【牛客刷题-算法】加精 | 合并两个有序的链表 - 从思路设计、bug排除到最终实现的全过程
链表——707. 设计链表
本专栏按照数组—链表—哈希—字符串—栈与队列—二叉树—回溯—贪心—动态规划—单调栈的顺序刷题,采用代码随想录所给的刷题顺序,一个正确的刷题顺序对算法学习是非常重要的,希望对大家有帮助
链表——707. 设计链表
|
算法 前端开发 程序员
「LeetCode」707-设计链表⚡️
「LeetCode」707-设计链表⚡️
205 0
「LeetCode」707-设计链表⚡️
|
存储 Java 索引
数据结构~基础1~线性表【《数组、链表、栈、队列》的设计】
数据结构~基础1~线性表【《数组、链表、栈、队列》的设计】
184 0
数据结构~基础1~线性表【《数组、链表、栈、队列》的设计】
|
Python
【LeetCode707】设计链表
哨兵节点在树和链表中被广泛用作伪头、伪尾等,通常不保留任何数据。通常使用伪头来简化插入和删除。所以下面也用了伪头结点,所以注意题目中找第index个结点,还是从0号节点开始计算的,这里注意题目说的“假设链表中所有节点都是0-index的”,这里的0并非包括伪头节点。
185 0
【LeetCode707】设计链表