列出哪些指数可以向两个方向扩展?

Ray*_*Ray 4 c# indexing stack list

我打算写一个游戏(如果你听说过它叫做"Qwirkle"),其中一个二维游戏场存储玩家放入其中的宝石的位置.第一个玩家将石头放在任何地方,其他玩家可以从任何一侧(左/右/上下)连接到它.游戏领域本身不限于固定大小,这会破坏游戏理念.但是,宝石的数量限制为玩家在开始时可以定义的值.

由于游戏逻辑,我需要通过索引循环穿过石头.但是,由于玩家可以从任何一侧添加石头,我需要一个可扩展到任何方向的列表(例如,进入负向和正向索引方向).

性能并不重要,因为我需要一次检查几块石头.

当然,最好的方法是使用像_stones [-3,5]这样的石头来访问位于-3,5位置的石头.

我认为可以从任何一侧推送和弹出的堆栈(如PushBack/PushFront)对此有用,但我不太确定如何在C#中实现它.

是否有预先实现的列表/堆栈,就像我正在考虑的那样,或者我的方法是否完全奇怪?

Eri*_*ert 5

您想要的数据结构是一个不可变的四叉树.如果电路板大部分是空的,那么使用不可变四元组可以代表基本上无限大小的电路板; 一个万亿分之一亿的单元板比32×32单元板只需要几个字节的内存.不可变四元组可以很容易地以您描述的方式编制索引,并且在给定旧四叉树和编辑的情况下计算新的四叉树很简单.

多年来我已经多次编写了不可变的四叉树算法,我很长一段时间都在写一系列关于它们的博客文章,但我从未有过.当我这样做时,我会回来更新这个答案.

与此同时,Dobbs博士关于Gosper算法的文章是我用来学习不可变四元组如何工作的文章.

http://www.drdobbs.com/jvm/an-algorithm-for-compressing-space-and-t/184406478