背景
我有以下内容:
类火扩展元素,
类木材扩展元素,
合成元素的类瓷砖。
Tile 类表示世界/屏幕/画布中的一个图块,并在其中具有一些图形和逻辑功能。它合成了一个 Element 对象,因为“世界”中的每个图块都是由某种物质 (=element) 组成的。
我想实现火蔓延的功能——当火元素“接触”木元素时,我希望木元素变成火。从逻辑上讲,这应该在火元素中完成,但是这样做,我无法更改给定的瓷砖元素(例如从木头到火)。
“世界”被初始化为由木元素组成的瓦片网格,除了一个具有应该传播的火元素的瓦片。
我试过的
我试过将元素链接在一起,这意味着每个元素都可以访问他的四个最近的邻居。这样,火就可以接近附近的一块木头。这并不能解决火接触木头时更改 Tile 元素类型的问题。
我尝试将整个功能移至 Tile 类。虽然它确实解决了问题,但我不喜欢它有两个原因:
从逻辑上讲,我希望火自主行动,这意味着火是蔓延的,而不是瓷砖。
结果,Tile 类有很多只与火相关的方法(例如 spread()),这需要我检查 - “这个 tile 是由火元素组成的吗?”,这是不好的做法。
代码示例
class Fire extends Element{
public void spread(){
// Move to all four neighbors and turn them into Fire elements
}
}
class Wood extends Element{
}
class Tile{
private Element _element;
}
深入
瓦片的“网格”由瓦片的二维数组(逻辑部分)和由所有瓦片(视觉部分)组成的 JavaFx 窗格组成。
当它接触到相邻的瓷砖并将其从木头变成火时,火会“蔓延”。当燃烧(=变为火)给定阈值的木头时,例如燃烧 30 块木头后,火停止蔓延。从某种意义上说,火可以跟踪它消耗的木材。
提前致谢!