因此,对于一个学校项目,我试图在Python 2.7中重新创建一个“Forest Fire Simulation”程序。 如果您对此不熟悉,则会对here
描述规则我目前设置的代码用于生成一个10x10网格,其中包含60%Ts,30%Bs和10%Ws,分别代表树木,空白区域和火灾。我遇到的问题是找出如何使函数通过并检查单个地方的所有邻居,需要查看树是否接近火块以便将树更改为燃烧块在下一个“滴答声”。我看了一下,但找不到任何以我需要的方式做到这一点。
显然,我可以强制它,并为每个方块提供不同的功能,但这根本不实用,并且只有当网格保持相同的大小时它才会起作用。任何建议或帮助都会很棒,如果你有任何问题可以随意提出,抱歉模糊不清,因为我现在有点紧迫的时间问。非常感谢你!
答案 0 :(得分:0)
显然我没有做这里的所有工作,但你可以设置一个字典,其中一个键代表数组的数字(11,12,13,21,22,23等),然后循环通过字典使用键来确定周围的邻居并相应地调整值。您可能需要2个相互镜像的词典,以便在您进行模拟时使所有更新正确流动。
这是我的基本前提:
import random
#a cell in the forest
class cell():
def __init__(self):
self.state = ''
#Creating the forest and populating randomly with value
forest = {}
i = 1
while i < 5:
j = 1
while j < 5:
tcell = cell()
rnum = random.randrange(1,3)
if rnum == 1:
tcell.state = 'T'
elif rnum == 2:
tcell.state = 'B'
else:
tcell.state = 'W'
forest[str(i) + str(j)] = tcell
j+=1
i+=1
#iterating through forest and gathering values to adjust accordingly
for k,v in forest.iteritems():
d1 = k[0]
d2 = k[1]
startstate = v.state
NW = forest[str(int(d1)-1)+str(int(d2)+1)]
N = forest[str(int(d1))+str(int(d2)+1)]
NE = forest[str(int(d1)+1)+str(int(d2)+1)]
W = forest[str(int(d1)-1)+str(int(d2))]
E = forest[str(int(d1)+1)+str(int(d2))]
SW = forest[str(int(d1)-1)+str(int(d2)-1)]
S = forest[str(int(d1))+str(int(d2)-1)]
SE = forest[str(int(d1)+1)+str(int(d2)-1)]
if startstate == 'W':
if NW.state == 'T':
NW.state= "W"
if N.state == 'T':
N.state= "W"
if NE.state == 'T':
NE.state= "W"
if W.state == 'T':
W.state= "W"
if E.state == 'T':
E.state= "W"
if SW.state == 'T':
SW.state= "W"
if S.state == 'T':
S.state= "W"
if SE.state == 'T':
SE.state= "W"