PyGame Conway的生命游戏,重绘精灵

时间:2014-11-16 02:14:55

标签: python pygame

当我更新程序应该为每个位置使用哪个图像的数组时,我可以将活着的细胞放在死亡状态,但原始细胞不会消失,我无法在活体细胞上添加死细胞。有人有修复吗?

原始文件

import pygame, pygamehandle, standard, sys
from pygame.locals import *
loader = pygamehandle.load()

pygame.mixer.music.load('music1.ogg')
pygame.mixer.music.play(-1, 0.0)

SCREEN_SIZE = (600, 400)
fps = 24
fpsClock = pygame.time.Clock()
imgs = ["live.png", "dead.png", "background.png"]
icon = "icon.png"

screen = loader.loadScreen(SCREEN_SIZE, "Game of Life", icon)

lImgs = loader.listImgLoad(imgs)

objects, grid = loader.grid(SCREEN_SIZE, lImgs[1])

loader.blit(objects, grid)

pygame.display.update()

while True:
    mouseClicked = False
    fpsClock.tick(fps)

    for i in pygame.event.get():
        if i.type == MOUSEBUTTONDOWN:
            if i.button == 1:
                mouseposx, mouseposy = pygame.mouse.get_pos()
                mouseposx = (mouseposx // 20) * 20
                mouseposy = (mouseposy // 20) * 20
                mousepos = (mouseposx, mouseposy)
                index = grid.index(mousepos)
                objects[index] = lImgs[0]

            if i.button == 2:
                mouseposx, mouseposy = pygame.mouse.get_pos()
                mouseposx = (mouseposx // 20) * 20
                mouseposy = (mouseposy // 20) * 20
                mousepos = (mouseposx, mouseposy)
                index = grid.index(mousepos)
                objects[index] = lImgs[1]


        if i.type == QUIT:
            pygame.quit()
            sys.exit()

    pygame.Surface.fill(screen, [0, 0, 0])
    loader.blit(objects, grid)
    pygame.display.flip()

我还使用了pygamehandle文件中的这些函数。

import pygame, standard

class load(object):

    pygame.init()

    def loadScreen(self, size, text, icon):

        pygame.display.set_caption(text, icon)
        pygame.display.set_icon(pygame.image.load(icon))

        screen = pygame.display.set_mode(size)

        self.screen = screen

        return screen

    def listImgLoad(self, list):

        img = []

        for i in range (0, len(list)):
            img.append(pygame.image.load(list[i]).convert())

        return img

    def blit(self, items, locations):

        for i in range (0, len(items)):
            self.screen.blit(items[i], locations[i])

    def grid(self, size, object):

        objects =[]
        locations = []

        x, y = size

        for xT in range (0, int(x / 20)):
            for yT in range(0, int(y / 20)):
                objects.append(object)
                locations.append((xT * 20, yT * 20))

        return objects, locations

1 个答案:

答案 0 :(得分:1)

更好的方法是为每个单元格创建一个Sprite类,如果单元格已经死亡或活着则添加bool到deteermine并相应地进行blit。

如果你熟悉Sprites这里是the docs,一开始可能会让人感到困惑,但它们会帮助制作更复杂的游戏,这里也是我The Game of Life

古德勒克