5

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

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

我尝试了两件事:

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

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

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

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

TL;DR /实际问题:

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

3 回答 3

3

使用循环缓冲区。详细说明:

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

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

于 2012-01-19T17:29:02.543 回答
1

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

于 2015-06-08T20:40:32.620 回答
0

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

于 2015-01-18T15:50:50.193 回答