我正在设计一个带有扭曲的宝石风格的游戏。与其匹配所有相同形状的块,不如匹配一对字母。董事会上总是会有大约10个字母,您正在尝试将它们放在一起。有三种不同的色块。每种颜色都有1个空白块,然后是5个带有不同字母的块。目标是在红色“ A”块旁边说一个红色“ T”块。这就是我遇到问题的地方。

现在,该代码将从板上清除三个或更多相同颜色和字母的代码。因此,如果我可以使三个红色的“ T”块彼此相邻,它们将被清除。该代码基本上扫描每行以寻找一组三(或更多)的组。我试图修改代码,以便即使是相同的颜色也可以清除(无论字母组合如何),但我什至无法正常工作。我认为这与我如何加载图像有关。我已经发布了大多数代码(无需进行任何疯狂的修改即可尝试使它正常运行,因为它刚刚破解了它),用于处理图像并查找匹配项。谁能帮助我修改代码,以便至少找到一个正确的匹配项。当红色的“ T”块紧挨着红色的“ A”块和空白的红色块时,应将其分类为匹配项,并将其从板上移除。只要有效,它就不必太复杂。谢谢你的帮助!

查找匹配代码:

def find_matches(self):
    def lines():
        for j in range(self.h):
            yield range(j * self.w, (j + 1) * self.w)
        for i in range(self.w):
            yield range(i, self.size, self.w)
    def key(i):
        return self.board[i].image
    def matches():
        for line in lines():
            for _, group in itertools.groupby(line, key):
                match = list(group)
                if len(match) >= MINIMUM_MATCH:
                    yield match
    return list(matches())


图片加载:

    shapes = 'red blue yellow'
    rareshapes = 'reda redc redg redt redu bluea bluec blueg bluet blueu yellowa yellowc yellowg yellowt yellowu'
    self.shapes = [pygame.image.load('images/{}.png'.format(shape))
                   for shape in shapes.split()]
    self.rareshapes = [pygame.image.load('rareimages/{}.png'.format(shape))
                       for shape in rareshapes.split()]


编辑:

自发布以来,该游戏发生了很多变化和更新。它具有声音和背景音乐,是新的计分系统,新的计时器系统的基础,我可以指定在游戏首次开始时要出现在网格上特定位置的稀有形状。但是,我仍然无法解决核心游戏玩法。我讨厌拖长职位,但我对如何使它工作感到茫然。我搞砸了没有运气的比赛代码。

基本上,稀有形状分配有编号。因此,红色的A是0,红色的T是3,一直到黄色的T(它是14)。要使游戏玩法按照我们预期的方式工作,用户需要获得红色的A(0),红色T(3),以及彼此相邻的2个空白红色方块,使其成为有效的匹配并从板上清除。这是从板上清除正方形的唯一正确方法。彼此相邻放置4个相同颜色的空白方块不会将其删除。

但是,代码也需要检测它们是否也获得了无效的配对。例如,如果他们得到一个红色的A(0),一个红色的C(1)和两个空白的红色方块,它将消失,但算作对他们的打击。

游戏的目标是在时间用完之前删除所有字母块,而不会出现三击。由于我们可以指定字母块现在出现的数量和位置,因此仅取决于匹配项。有人知道如何进行这项工作吗?

最佳答案

我正在阅读您发布的代码,我对自己说,这看起来很不错-一维板表示形式,命名良好的变量,itertools.groupby的使用-这几乎就是我自己编写的方式。 And then I remembered that I had written it myself.不过,我很高兴看到有人在使用我的代码!

(话虽如此,我注意到您删除了文档字符串。为什么这样做?立即将其放回去!)

无论如何,此匹配查找器使用itertools.groupby查找序列中相同项目的运行。或者更确切地说,由于给出了key函数,因此运行key函数返回相同结果的项目。

您会看到,所编写的按键功能只是将图像返回到板子位置。这意味着只要木板包含相同的图像,木板位置就匹配。但是您想放松一下:只要木板位置包含相同颜色的图像,就希望它们匹配。

因此,您需要修改按键功能,以使其返回电路板位置的图像颜色。例如,当您加载图像时,可以创建一个字典,将图像映射为其颜色:

self.image_colour = {}
self.shapes = []
self.rareshapes = []

colours = 'red blue yellow'
letters = 'acgtu'

for c in colours.split():
    im = pygame.image.load('images/{}.png'.format(c))
    self.shapes.append(im)
    self.image_colour[im] = c
    for l in letters:
        im = pygame.image.load('rareimages/{}{}.png'.format(c, l))
        self.rareshapes.append(im)
        self.image_colour[im] = c


然后在关键功能中,您可以查找图像以找到其颜色:

def key(i):
    return self.image_colour.get(self.board[i].image)

关于python - gem 迷阵游戏比赛,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19276935/

10-14 15:11
查看更多