我正在用 TI-Basic 编写蛇游戏,每次移动时,我都需要查看蛇的头部是否碰到了尾部的任何一点。尾部存储为基于循环列表的队列,我可以在恒定时间内添加开始和结束。
唯一困难的部分是我必须在每次迭代中做类似的事情:(S = 列表的大小)
For(I,1,S)
If X=LX(I) and Y=LY(I)
Then
Disp "GAME OVER"
Return
End
End
这是一个相当短的循环,但即使在 10 个项目的列表上也需要很长时间。我尝试了顺序方式:
If sum(seq(X=LX(I) and Y=LY(I),I,1,S))
...
我能想到的唯一其他优化是不检查 N 到 N+2 的值(因为可能命中的尾巴的第一部分是 N+3),但这只会在 4 点之后推迟问题,并且14分无法玩的游戏并不比10分后无法玩好。
使用汇编不是一种选择,因为我没有链接电缆(或编写汇编的愿望)。