我正在尝试编写自己的生命游戏,并使用自己的规则。首先要应用的“概念”是社交(基本上意味着单独或与其他细胞一起组成群体)。数据结构是二维数组(目前为止)。
为了能够将一个细胞移动到/离开另一组细胞,我需要确定移动位置。我的想法是,评估周围所有的细胞(邻居),并获得一个向量,告诉我该如何移动细胞。向量的大小为0或1(不移动或移动),角度是方向数组(上、下、右、左)。
这是一个表示作用于细胞的力的图片,就像我想象的一样(但范围可能超过5):
让我们以这张图为例:
Forces from lower left neighbour: down (0), up (2), right (2), left (0)
Forces from right neighbour : down (0), up (0), right (0), left (2)
sum : down (0), up (2), right (0), left (0)
因此,单元格应该上移。
我可以编写一个带有许多if语句的算法,并检查所有邻近的单元格。当然,如果将“reach”参数设置为1(第一列在图片1中),则此算法最简单。但是,如果我将reach参数更改为10呢?我需要事先为每个'reach'参数编写算法...如何避免这种情况(请注意,力量是潜在增长的(1,2,4,8,16,32,...))?我能用特定的设计模式来解决这个问题吗?
另外:最重要的不是速度,而是能够扩展初始逻辑。
需要考虑以下几点:
- reach应作为参数传递
- 我想更改计算力量(potential,fibonacci)的函数
- 仅当新位置未被占用时,单元格才能移动到新位置
- 注意角落处(例如,在右上角无法评估右侧和顶部邻居)