我在python和pygame中制作了“Conway的生命游戏”版本,但是我找不到相邻的细胞。以下是大部分代码。我编辑了不必要的部分,因为问题在于cell.get_neighbors()函数。如果您想查看其余内容,可以阅读here。
def main():
while True:
draw_board()
update_cells()
pygame.display.update()
fpsClock.tick(FPS)
def update_cells():
event_handling()
if clicked == True:
cell = where_clicked(mousex, mousey)
if cell != None:
print (cell.get_neighbors())
class cell:
#The problem is with this function
def get_neighbors(self):
neighbors = []
for y in (-1, 0, 1):
for x in (-1, 0, 1):
neighbor = find_cell(x + self.x, y + self.y)
if neighbor not in (None, self):
neighbors.append(neighbor)
#I added neighbor.switch() so that I could easily see which cells were being returned by the get_neighbors() function.
neighbor.switch()
return neighbors
def switch(self):
if self.alive == False:
self.alive = True
else:
self.alive = False
def find_cell(x, y):
for CELL in board:
if CELL.x == x:
if CELL.y == y:
return CELL
if __name__ == '__main__':
main()
上面写的get_neighbors()函数应该将所有8个相邻单元格变为黑色,而是将4-10个看似随机的单元格变为黑色。我做了this屏幕录制来演示问题。正如你所看到的,如果我点击左上角或顶部,它就会像它应该的那样工作,但是当我点击中间时,它会像这样:
http://www.imagesup.net/?di=8140372670715
或者这个:
http://www.imagesup.net/?di=1514037265628
或者这个:
http://www.imagesup.net/?di=1014037266308
我错过了什么吗?因为cell.get_neighbors()应该正常工作。 find_cell()正常工作,
for y in (-1, 0, 1):
for x in (-1, 0, 1):
...
find_cell(x, y)
应该像这样找到每个相邻的单元格。
(-1, -1), (-1, 0), (-1, 1)
( 0, -1), ( 0, 0), ( 0, 1)
( 1, -1), ( 1, 0), ( 1, 1)
和
if neighbor not in (None, self):
应该防止它返回板外的任何单元,并防止它自行返回。 (因为一个小区不能是它自己的邻居)。
感谢任何帮助!
答案 0 :(得分:4)
在您发布的代码中
neighbor = find_cell(x + self.x, y + self.y)
但是,在您的链接代码中
for y in (-1, 0, 1):
for x in (-1, 0, 1):
x += self.x
y += self.y
请注意,在您的图像中,切换后的细胞似乎向下移动。这是因为在重置为[-1,0,1]值之一之前,您正在内循环中修改y
三次。只运行循环并打印出值,你会看到y
内部循环发生变化时不应该这样做。
单击顶部时看起来很好,因为递增的y值self.y
为零。另请注意,单击窗口越远,步进越夸张。
将运行代码更改为您发布的代码,它应该可以正常工作。