我正在开发一款2D游戏,其中有一个游戏“棋盘”,在其上放置其他游戏对象。
这是2D,我的出发点是devise一个内部使用2d数组作为实际存储游戏对象的类。
这个类可以简单地通过2个索引来访问:(i,j)来获取游戏对象。
我的问题是,我不知道如何让游戏“董事会”将其数据“传播”给其子女。
我碰到的devise问题是:
我不知道类似的东西,如WPF或其他UI框架是如何组织一个“容器像”的对象,可以安排或应用某些UI属性的子项。
大部分问题的答案是:这取决于。
devise这种系统时应该注意什么:
如果您的电路板尺寸不变并且电池的尺寸完全相同,那么最好让电路板控制位置。 但是如果你的GameObjects可以在单元格之间,那么最好让它们独立于索引来控制位置。
如果你的单元格大部分都是空的,那么把你的GO放在一个数组中,只要把索引放在里面,这是个好主意。 如果他们大多数细胞将被填充,二维arrays似乎更好。
决定什么更新(董事会或游戏对象)想到什么是逻辑的来源。 例如:在国际象棋游戏中,这是一个混合。 这篇文章给出了它的规则,但董事会知道哪里是一切。
请记住:做正确的事情,对你来说似乎很好,但不要预先优化! 如果它正在工作,没有发现任何缺陷,请保持这种方式。
理想情况下,你会以任何方式来构造它,让你写自我描述的代码。
player["Black"].piece["Rook2"].move(2, 0);
与
chess_board.move("Black", "Rook2", [2, 0]);
这两个都是可怕的伪代码攻击,并不完全表明最终产品,但希望提供考虑如何您可能想要解决抽象的概念,你的代码玩桌游。
就常见问题而言,您是否计划在animation片段移动?
如果是这样,你可能想要件来控制自己的状态。
另一个考虑可能是从正方形“绑定”和“解除绑定”。
给这些作品一个简单的,松散耦合的界面,用于查询他们所在的广场和/或他们正在移动的广场。
你的棋盘可以在网格坐标上进行100%的对话(根据游戏情况使得规则保持更容易),然后棋子可以使用这些网格坐标来执行规则,并且请求连接与他们新的网格方块交谈连接到前面的方块)。
大部分的绘图定位逻辑等都可以放在一个块内,只需要把网格坐标放在网格中心的内部(当它完成animation时)。
此时,棋子和方块可以放在单独的arrays中,甚至分开更新。
棋子将根据他们正在与之交谈的方格给出的网格坐标来控制其逻辑/表示。
正方形可以维持他们可能持有的任何奖金(蛇/三重分数/直接进入监狱),如果广场认为当时的规则适合于这件作品,则将这些奖励授予一件作品(例如:go到监狱/监狱+刚刚访问)。
请注意,这不是做事情的方式。
事实上,它可能是为了您的需要而devise的。
或者devise不足。
或者它看起来像是废话,因为你真的很喜欢从掷骰子/拿起卡片等等的玩家的角度来编写代码,并且手动地移动一块,而不是自动移动的棋子或者棋盘推一块。