devise一个包含游戏对象的“网格”对象

我正在开发一款2D游戏,其中有一个游戏“棋盘”,在其上放置其他游戏对象。

这是2D,我的出发点是devise一个内部使用2d数组作为实际存储游戏对象的类。

这个类可以简单地通过2个索引来访问:(i,j)来获取游戏对象。

我的问题是,我不知道如何让游戏“董事会”将其数据“传播”给其子女。

我碰到的devise问题是:

  1. 放置在棋盘上的孩子是否有显示属性,如大小,屏幕位置?
  2. 董事会应该自己决定这些信息吗?
  3. 如果董事会更改其部分属性,如何更新儿童? (位置等)。
  4. 董事会是否应该知道存储在其中的对象的types?

我不知道类似的东西,如WPF或其他UI框架是如何组织一个“容器像”的对象,可以安排或应用某些UI属性的子项。

大部分问题的答案是:这取决于。

devise这种系统时应该注意什么:

  • 网格的大小是否一致?
  • 所有单元格具有相同的大小?
  • GameObjects可以在单元格之间?
  • 大部分细胞将会满或空?
  • 你的GameObjects多久改变一次?
  • 什么是逻辑的来源? 董事会或GameObjects?

如果您的电路板尺寸不变并且电池的尺寸完全相同,那么最好让电路板控制位置。 但是如果你的GameObjects可以在单元格之间,那么最好让它们独立于索引来控制位置。

如果你的单元格大部分都是空的,那么把你的GO放在一个数组中,只要把索引放在里面,这是个好主意。 如果他们大多数细胞将被填充,二维arrays似乎更好。

决定什么更新(董事会或游戏对象)想到什么是逻辑的来源。 例如:在国际象棋游戏中,这是一个混合。 这篇文章给出了它的规则,但董事会知道哪里是一切。

请记住:做正确的事情,对你来说似乎很好,但不要预先优化! 如果它正在工作,没有发现任何缺陷,请保持这种方式。

理想情况下,你会以任何方式来构造它,让你写自我描述的代码。

player["Black"].piece["Rook2"].move(2, 0); 

 chess_board.move("Black", "Rook2", [2, 0]); 

这两个都是可怕的伪代码攻击,并不完全表明最终产品,但希望提供考虑如何您可能想要解决抽象的概念,你的代码桌游。

就常见问题而言,您是否计划在animation片段移动?
如果是这样,你可能想要件来控制自己的状态。

另一个考虑可能是从正方形“绑定”和“解除绑定”。
给这些作品一个简单的,松散耦合的界面,用于查询他们所在的广场和/或他们正在移动的广场。

你的棋盘可以在网格坐标上进行100%的对话(根据游戏情况使得规则保持更容易),然后棋子可以使用这些网格坐标来执行规则,并且请求连接与他们新的网格方块交谈连接到前面的方块)。

大部分的绘图定位逻辑等都可以放在一个块内,只需要把网格坐标放在网格中心的内部(当它完成animation时)。

此时,棋子和方块可以放在单独的arrays中,甚至分开更新。
棋子将根据他们正在与之交谈的方格给出的网格坐标来控制其逻辑/表示。
正方形可以维持他们可能持有的任何奖金(蛇/三重分数/直接进入监狱),如果广场认为当时的规则适合于这件作品,则将这些奖励授予一件作品(例如:go到监狱/监狱+刚刚访问)。

请注意,这不是做事情的方式。
事实上,它可能是为了您的需要而devise的。
或者devise不足。

或者它看起来像是废话,因为你真的很喜欢从掷骰子/拿起卡片等等的玩家的角度来编写代码,并且手动地移动一块,而不是自动移动的棋子或者棋盘推一块。