- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我用 Python 实现的 Conway 生命游戏似乎没有正确遵循规则,我不知道哪里出了问题。当我将最终配置放入 Golly 时,它会继续我所做的。
我首先通过将我的程序停止的配置放入 Golly 来识别该程序,然后注意到它可以进一步运行。
我还将游戏中的整个小板放入 Golly,它的进展与我的配置大不相同。 Golly 是一款广泛使用的生活模拟器游戏。
我尝试了几种不同的方法来解决我的问题:
and
/or
语句。neighbors()
函数,方法是将它插入到它自己的程序中,并设置一些网格配置。neighbors()
。效果很好。查看我的代码,我不明白为什么它不起作用。我没有收到错误,它有效,只是错误。这些模式的进展与它们应该的方式大不相同。这也是我在没有严格遵循教程的情况下编写的第一个超过 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
来复制当前板并对其进行编辑。然后在遍历所有内容后将其复制回 board
。
关于python - 生命游戏模式执行不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28812183/
我正在开发一个使用多个 turtle 的滚动游戏。玩家 turtle 根据按键命令在 Y 轴上移动。当危害和好处在 X 轴上移动时,然后循环并改变 Y 轴位置。我尝试定义一个名为 colliding(
我不明白为什么他们不接受这个作为解决方案,他们说这是一个错误的答案:- #include int main(void) { int val=0; printf("Input:- \n
我正在使用基于表单的身份验证。 我有一个注销链接,如下所示: 以及对应的注销方法: public String logout() { FacesContext.getCurren
在 IIS7 应用程序池中有一个设置 Idle-time out 默认是 20 分钟,其中说: Amount of time(in minutes) a worker process will rem
我是一名优秀的程序员,十分优秀!