【问题标题】:Minimalistic approach for a Snake-style gameSnake 风格游戏的简约方法
【发布时间】:2011-06-13 21:22:45
【问题描述】:

大约两天前,我收到了我的 TI-82 STATS 可编程计算器(实际上它更像是一个 TI-83) - 我想用内置的 TI-BASIC 语言编写一个 Snake 游戏。

虽然我不得不发现:TI-BASIC 非常很慢。我的第一个实现是如此缓慢,以至于对玩家来说甚至都不是挑战!对我来说主要瓶颈在于管理包含蛇体坐标的列表(数组)。

我尝试了两件事:

  • 当蛇移动时,更新头部位置,然后从尾部位置循环遍历数组,并将myList[ N ] 设置为myList[ N - 1 ],以使蛇看起来在移动。

但是,在列表长到大约 4 个部分后,这将无法播放。 (太慢了)

  • 然后,我尝试使用 TI-BASIC 的列表操作功能实现某种队列/双端队列,例如从数组末尾弹出并在数组前面添加一些内容。

这工作得更好一些,但随着时间的推移也会变得太慢。

TL;DR / 实际问题:

  • 你知道一个技巧,让游戏不会随着蛇变长而变慢吗?我已经看到这在其他使用 TI-BASIC 制作的游戏中是可能的

【问题讨论】:

    标签: calculator texas-instruments ti-basic


    【解决方案1】:

    使用circular buffer。详细说明:

    得到一个足够大的数组来容纳最大的蛇。建立两个指针,一个指向头部,一个指向尾部。

    一开始,尾部在#1 单元格中,头部在#3 号单元格中。随着蛇的移动,将头部指针向右移动并写入新坐标。然后,如果没有吃的食物,也将尾部指针向右移动。如果其中任何一个指针试图超出数组的最右端,则将它们包装到开头。

    【讨论】:

      【解决方案2】:

      使用列表来提高速度的一个简单技巧是充分利用LIST 菜单下提供的功能。特别是,seq 与实现相同目标的 for 循环相比,可以提供显着的性能优势。我发现其他有用的函数是cumSumΔList

      【讨论】:

        【解决方案3】:

        一个最有可能奏效的技巧是代替 [ N - 1 ] 做 [ N - 2 ] 或更大的数字,这样它通过数学上更快地移动来弥补时间(你还必须调整头部的大小以走得更快

        【讨论】:

          猜你喜欢
          • 2018-09-12
          • 2020-05-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-10
          • 1970-01-01
          相关资源
          最近更新 更多