Data structures 表示游戏板的最佳数据结构 我试图把一个棋盘游戏带到电脑世界,棋盘由16个空间组成,每边6个,中间4个。棋盘呈菱形,两端代表两个团队基地。在游戏中,peices只向前移动到敌人的基地(当然有特殊能力)。所以我的问题是:你认为代表游戏板的最佳数据结构是什么?我首先想到的是一棵树,但我真的不喜欢这个想法,因为它有两个“根”。有什么建议吗
董事会如下所示:Data structures 表示游戏板的最佳数据结构 我试图把一个棋盘游戏带到电脑世界,棋盘由16个空间组成,每边6个,中间4个。棋盘呈菱形,两端代表两个团队基地。在游戏中,peices只向前移动到敌人的基地(当然有特殊能力)。所以我的问题是:你认为代表游戏板的最佳数据结构是什么?我首先想到的是一棵树,但我真的不喜欢这个想法,因为它有两个“根”。有什么建议吗,data-structures,language-agnostic,Data Structures,Language Agnostic,董事会如下所示: & & & & & & * * * * $ $ $ $ $ $ 所以&team只能向$team移动,反之亦然,*作为中立区域我会使用一种图表。比如: class Field { private List<Field> neighbours; } 类字段 { 私人名单邻居; } 或者不是一个列表,而是一个包含边框字段空引用的数组。任何板都可以用它来表示。它本质
&
& &
& & &
* * * *
$ $ $
$ $
$
所以&team只能向$team移动,反之亦然,*作为中立区域我会使用一种图表。比如:
class Field
{
private List<Field> neighbours;
}
类字段
{
私人名单邻居;
}
或者不是一个列表,而是一个包含边框字段空引用的数组。任何板都可以用它来表示。它本质上是一个正方形吗?菱形只是一个解释问题吗?就像这样
M A A A
B M A A
B B M A
B B B M
如果是这样的话,可以使用2D阵列,并使用您的显示系统将其“转换”为菱形
编辑
我认为你可以将你的移动集映射到数组中——如果你的“$”片段只向上和向左或向上和向右移动,这类似于我的“B”片段只向上或向右移动。同样,如果“&”片段只向下和向左或向下和向右移动,这就像“A”片段只向下或向左移动一样
其思想是,在程序内部,考虑数据的“上下”,但当您向用户呈现游戏状态时,只需在菱形配置中绘制它。为什么不使用简单的阵列结构?如果棋盘是菱形的,它是方形/矩形的,对吗
Dim myBoard(5,5) As Array
当然,如果棋盘形状奇怪(比如中间有空格和东西),这可能不起作用。中间四个字段相同的两棵树呢?(我指的是引用相同的对象)您关心的不仅仅是如何表示电路板,还包括如何表示各个部分,因为电路板和各个部分需要传达它们的相互存在和影响 因此,如何表示棋盘将取决于如何表示棋子以及限制棋盘和棋子的游戏规则 你首先关心的是如何表现作品 游戏块或游戏自动机是面向对象编程的完美模型 让我通过省去诸如public、static等声明来说明
abstract class BasicUnit
{
// determine constraints of movement here.
// update position and return new position
abstract Position move(Direction d);
abstract Position getPosition();
Arsenal arsenal;
}
class Worker
extends BasicUnit
{
Position move(Direct d)
{
//whateveer, etc
}
}
class farmer
extends Worker
{
Position move(Direct d)
{
//whateveer, etc
}
}
class Warrior
extends BasicUnit
{
Position move(Direct d)
{
//whateveer, etc
}
}
class Sniper
extends Warrior
{
Position move(Direct d)
{
//whateveer, etc
}
}
现在你必须决定棋盘上棋子的位置是否正确
- 以板为中心:工件的位置仅在板上登记
- 以工件为中心:位置仅在工件上注册
- 冗余:移动工件时,必须冗余更新工件和电路板
- 董事会按职位划分,以了解职位上的单位
- 工件的id,以确定其在板上的位置
BasicUnit getPosition(x,y)
以及找出一个单元的(x,y)位置
Position getUnit(BasicUnit unit)
然后你可能会计划你的游戏是可扩展的,这样一个获得胜利的玩家可以继续玩下一个具有不同棋盘形状的关卡。你的二维散列向量仍然会被使用,因为你将软件的表示层与其数据结构分离
你只需要在向量中插入更多的位置
您可以在以下位置查看我的一维散列向量的Java实现:
把它翻译成你的编程语言,并给它添加一个向量维度。
你能上传一个棋盘的某个地方吗?我不确定我能很好地解释你的描述。它仍然可以工作,只要中间的东西是菱形的,它们可以被表示为空值或类似的东西。正方形,但我使用菱形,因为在正方形的情况下,peices必须斜向另一个角移动,而不是向上或向下,wi