当前位置: 首页 > 知识库问答 >
问题:

生命的游戏,添加无尽的领域

太叔景同
2023-03-14

我有一个问题。我在玩pygame中的游戏“生命的游戏”。我有一个目标。我不知道如何给我的游戏添加无尽的能量场。你能帮帮我吗?添加,抱歉-我的英语很差(.i想在我的游戏中添加无尽的字段。堆栈溢出要求我添加一些txt。我不知道为什么

import pygame
import copy

class GameLife:
    def __init__(self, width, height, left=10, top=10, cell_size=30):
        self.width = width
        self.height = height
        self.board = [[0] * width for _ in range(height)]
        self.set_view(left, top, cell_size)
        self.pause = True
        self.speed = 10
        self.tick = 0
    def set_view(self, left, top, cell_size):
        self.left = left
        self.top = top
        self.cell_size = cell_size

    def get_cell(self, pos):
        if 0 < pos[0] - self.left < self.width * self.cell_size and 0 < pos[1] - self.top < self.height * self.cell_size:
            return (pos[0] - self.left) // self.cell_size, (pos[1] - self.top) // self.cell_size
        return None

    def on_click(self, cell):
        self.board[cell[1]][cell[0]] = (self.board[cell[1]][cell[0]] + 1) % 2

    def get_click(self, mouse_pos):
        cell = self.get_cell(mouse_pos)
        if cell and self.pause:
            self.on_click(cell)

    def render(self, scr):
        for x in range(self.width):
            for y in range(self.height):
                pygame.draw.rect(scr, 'white',
                                 (x * self.cell_size + self.left, y * self.cell_size + self.top,
                                  self.cell_size, self.cell_size), 1)
                if self.board[y][x]:
                    pygame.draw.rect(scr, pygame.Color('green'),
                                     (x * self.cell_size + self.left + 1, y * self.cell_size + self.top + 1,
                                    self.cell_size - 2, self.cell_size - 2))

    def change_status_pause(self):
        self.pause = not self.pause

    def next_move(self):
        if not self.pause and self.speed == self.tick:
            neighbors = [[0]*self.width for _ in range(self.height)]
            newboard = [[0] * self.width for _ in range(self.height)]
            for x in range(self.width):
                for y in range(self.height):
                    amount_neighbors = 0
                    for xx in range(x -1, x + 2):
                        for yy in range(y-1, y + 2):
                            if 0 < xx < self.width and 0 < yy < self.height and self.board[yy][xx]:
                                amount_neighbors += 1
                    neighbors[y][x] = amount_neighbors - self.board[y][x]
                    if neighbors[y][x] == 3 or neighbors[y][x] == 2 and self.board[y][x]:
                        newboard[y][x] = 1
            self.board = copy.deepcopy(newboard)

    def addtick(self):
        self.tick += 1
        if self.tick > self.speed:
            self.tick = 0


pygame.init()
size = width, height = 820, 420
screen = pygame.display.set_mode(size)
cell_size = 20
top, left = 20, 10
board = GameLife((width - left * 2) // cell_size, (height - 2 * top) // cell_size, left, top, cell_size)
clock  = pygame.time.Clock()
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            board.get_click(event.pos)
        if event.type == pygame.KEYDOWN and pygame.key.get_pressed()[pygame.K_SPACE]:
            board.change_status_pause()
    board.next_move()
    board.addtick()
    screen.fill((0, 0, 0))
    board.render(screen)
    pygame.display.flip()
    clock.tick(50)
pygame.quit()

共有1个答案

景才英
2023-03-14

如果我理解正确,你只需要改变一个条件。使用%(模)运算符计算整数除法的余数:

如果0

 
  if self.board[yy % self.height][xx % self.width]: 

 

 类似资料:
  • 在本章中,我们考虑二维细胞自动机,特别是 John Conway 的生命游戏(GoL)。 像上一章中的一些 CA 一样,GoL 遵循简单的规则并产生令人惊讶的复杂行为。 就像沃尔夫勒姆的规则 110 一样,事实证明 GoL 是通用的;也就是说,至少在理论上它可以计算任何可计算的函数。 GoL 的复杂行为引发了科学哲学问题,特别是科学现实主义和工具主义的相关问题。 我讨论这些问题并提出扩展阅读的建议

  • 我最近已经解决了名为“康威的人生游戏”的有趣的黑客问题问题陈述如下: 《生命的游戏》是一款由英国数学家约翰·霍顿·康威设计的细胞自动机游戏。最初的游戏是零人游戏。它的发展完全取决于它的投入。 生命游戏在2D网格上进行。网格中的每个单元格将处于两种可能状态之一, 活死人细胞的出生或死亡是基于以下规则。 如果一个细胞正好被3个活细胞包围,它就会从死细胞转换为活细胞。如果一个细胞被2或3个活细胞包围,它

  • 我在试着解决人生游戏的问题。游戏规则是: 任何少于两个活邻居的活细胞都会死亡,就好像是由于人口不足造成的一样。任何有两个或三个活邻居的活细胞都会延续到下一代。任何有三个以上邻居的活细胞都会死亡,就像过度拥挤一样。任何有三个活邻居的死细胞都会变成活细胞,就像通过繁殖一样。 我在各种图案上测试了我的作品,如下图所示的方块、船、眨眼器和蟾蜍图案。但我的代码并没有给出蟾蜍模式的预期输出,如图所示。。。尽管

  • 我将如何在无休止的跑步游戏中使用精灵套件物理? 一个无尽的跑步者通过保持玩家静止,但以设定的速度移动背景和所有其他物体来假装运动。 但是,我想模拟物理。 如果我让我的播放器随着物理引擎移动,通过播放器从原始位置的位移来移动背景,然后将播放器移动回它的原始位置,会怎么样? 这样会不会光滑好看?如果是这样的话,那么我应该使用什么样的sprite kit方法来避免向用户显示视觉错误呢? 正确的解决方案是

  • 我的问题很难描述,所以我会尽可能简洁地解释。 在康威的《生活游戏》中,假设我有一张这样的地图: 与其在每个单元格上循环,包括不可能相关的死单元格,不如让我将第0代中的每个活单元格放在

  • 钥匙斗篷中有2个领域:主人和自定义。两个都有admin用户。 自定义领域管理添加新用户new_admin并通过管理控制台为其分配角色admin。