蟒蛇 – 生活模式游戏不正确进行

我的Conway在 Python中的生活游戏似乎没有遵循正确的规则,我不知道可能是错的.当我把最后的配置放到Golly,它继续过去了我做的.

我首先通过将我的程序停在Golly中的配置来确定该程序,然后注意到它可以进一步进行.

我还将整个小板从我的游戏中放入Golly,并且与我的配置有很大的不同.高丽是一个广泛使用的生活模拟器游戏.

我已经尝试了几个不同的东西来解决我的问题:

>我分解了我的代码中的逻辑语句,以使用no和/或语句.
>我通过将我的邻居()函数插入到自己的程序中,并设置了一些网格配置.
>然后我看着打印出来的网格,我在某个位置打了个邻居().它工作得很好

看我的代码,我看不出为什么它不工作.我没有得到错误,它的工作,它只是工作错误.模式的进展与他们应该怎样不同.这也是第一个> 100行程序,我写的没有遵循教程甚至松散,所以原谅我,如果答案是明显的.

相关代码如下:

#Function to find number of live neighbors
def neighbors(row, column):
    adjacents = 0

    #Horizontally adjacent
    if row > 0:
        if board[row-1][column]:
            adjacents += 1
    if column > 0:
        if board[row][column-1]:
            adjacents += 1
    if row < thesize-1:
        if board[row+1][column]:
            adjacents += 1
    if column < thesize-1:
        if board[row][column+1]:
            adjacents += 1

    #Diagonally adjacent
    if row > 0 and column > 0:
        if board[row-1][column-1]:
            adjacents += 1
    if row < thesize-1 and column < thesize-1:
        if board[row+1][column+1]:
            adjacents += 1
    if row > 0 and column < thesize-1:
        if board[row-1][column+1]:
            adjacents += 1
    if row < thesize-1 and column > 0:
        if board[row+1][column-1]:
            adjacents += 1

    #Return the final count (0-8)
    return adjacents

这似乎完全可以返回任何给定单元格的8个邻居中有多少存在.下一个位是逻辑部分,我认为问题是.它会根据游戏的规则改变阵列.

#Main loop
while 1:

    #Manage the rules of the game
    for r in range(len(board)):
        for c in range(len(board)):
            neighborcount = neighbors(r, c)
            if board[r][c]:
                giveLife(r, c)
                if neighborcount < 2 or neighborcount > 3:
                    board[r][c] = False
            elif not board[r][c]:
                killRuthlessly(r, c)
                if neighborcount == 3:
                    board[r][c] = True

最后,在pygame屏幕上,视觉上打开和关闭正方形的部分.这是测试,似乎运作良好,我只是想包括它,以防万一有问题.

for r in range(len(board)):
        for c in range(len(board)):
            if board[r][c]:
                giveLife(r, c)
            if not board[r][c]:
                killRuthlessly(r, c)

giveLife是一个在给定位置绘制黑色矩形的函数,killRuthlessly绘制一个白色的矩形.这些都似乎正常工作.

对于通过电路板循环并检查相邻单元格的逻辑,它正在继续检查其他单元,打开/关闭单元.很可能你正在将相邻的单元格看作活着或死亡,不是因为它们在之前的时间段(这很重要),而是因为已经改变了状态,因为它已经被循环了.尝试创建一个复制当前板并完成编辑的tmp_board.然后在你循环了所有东西之后把它复制回来.
相关文章
相关标签/搜索