背景
我有以下几点:
消防扩展元素类,
木材延伸元素类,
组成元素的Tile类.
Tile类表示世界/屏幕/画布中的图块,并具有一些图形和逻辑功能.
它合成一个Element对象,因为“世界”中的每个图块都是由某种物质(=元素)组成的.
我想实现火势蔓延的功能-当火元素“接触”木元素时,我希望木元素成为火.
从逻辑上讲,这应该在fire元素内完成,但是这样做我无法更改给定Tile的元素(例如,从Wood更改为Fire).
“世界”初始化为由Wood元素组成的图块网格,但其中一个具有Fire元素的图块应该散布.
我尝试过的
我尝试将元素链接在一起,这意味着每个元素都可以访问他的四个最近的邻居.这样,火可以进入附近的一块木头.
这不能解决在火接触到木头时更改Tile元素类型的问题.
我尝试将整个功能移至Tile类.尽管它确实可以解决问题,但由于两个原因,我不喜欢它:
>从逻辑上讲,我希望火势能够自主行动,这意味着火势是蔓延的,而不是地砖.
>因此,Tile类具有许多仅与火灾相关的方法(例如spread()),这需要我进行检查-“此tile是否由fire元素组成?”,这是一种不好的做法.
代码示例
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;
}
深入
>切片的“网格”由二维的Tiles数组(逻辑部分)和一个由所有切片组成的JavaFx Pane(可视部分)组成.
>火接触到相邻的瓦片并将其从“木材”转换为“火焰”时会“蔓延”.当消耗(=转换为火)给定的木材阈值时,火停止蔓延.它消耗了30块木头之后.从某种意义上说,火可以追踪消耗的木材.
提前致谢!