微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Conway's Game of Life Python / PyGame 打印错误

如何解决Conway's Game of Life Python / PyGame 打印错误

我是 python 和 PyGame 的新手,想通过做我认为是一个简单的项目来获得一些经验。我不知道我的错误是在我的游戏逻辑中还是在我的 PyGame 打印中。我创建了两个函数一个随机值填充网格,另一个用“Blinker”填充网格。程序运行没有错误,但是没有遵守游戏规则。例如,当设置了“blinker”时,程序的第二帧清除屏幕而不是旋转“blinker”。 任何诊断此问题的帮助将不胜感激!

import pygame
import random
pygame.init()

# Colors
BLACK = (0,0)
WHITE = (255,255,255)

# Sizes
size = (600,600)
width = 20
height = 20
margin = 1
x_size = 600 / width
y_size = 600 / height


def init_grid():
    return [[0 for x in range(x_size)] for y in range(y_size)]


def make_spinner(grind):
    grid[0][0] = 1
    grid[10][10] = 1
    grid[10][11] = 1
    grid[10][12] = 1


def random_grid(grid):
    for x in range(x_size):
        for y in range(y_size):
            grid[x][y] = random.randint(0,1)


def print_grid(screen,grid):
    for x in range(x_size):
        for y in range(y_size):
            if grid[x][y] == 1:
                pygame.draw.rect(
                    screen,BLACK,(x * width,y * height,width,height))
            else:
                pygame.draw.rect(
                    screen,height),margin)


def count_neighbours(grid,x,y):
    count = 0
    for i in range(-1,1):
        for j in range(-1,1):
            count += grid[x + i][y + j]
    return count - grid[x][y]


def update_grid(grid):
    next_grid = init_grid()
    for x in range(x_size):
        for y in range(y_size):
            if x == 0 or x == x_size - 1 or y == 0 or y == y_size - 1:
                next_grid[x][y] = 0
            else:
                count = count_neighbours(grid,y)
                value = grid[x][y]
                if value == 1 and (count == 2 or count == 3):
                    next_grid[x][y] = 1
                elif value == 0 and count == 3:
                    next_grid[x][y] = 1
                else:
                    next_grid[x][y] = 0

    return next_grid


# Initialise game engine
screen = pygame.display.set_mode(size)
pygame.display.set_caption("The Game of Life")
running = True
clock = pygame.time.Clock()
grid = init_grid()
# random_grid(grid)
make_spinner(grid)

# Game loop
while running:

    # Check for exit
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill(WHITE)
    print_grid(screen,grid)
    next_grid = update_grid(grid)
    pygame.display.update()
    grid = next_grid
    clock.tick(2)

pygame.quit()

解决方法

您的 count_neighbors 函数不会迭代正确的单元格。 range(-1,1) 迭代 {-1,0} not {-1,1}

改为使用:

def count_neighbours(grid,x,y):
    count = 0
    for i in range(-1,2):
        for j in range(-1,2):
            count += grid[x + i][y + j]
    return count - grid[x][y]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。