有效的图像组

时间:2013-11-13 16:45:30

标签: python image key pygame match

我正在制作一款具有非常宝石般的感觉的益智游戏。当游戏开始时,棋盘上充满了三种不同颜色的随机空白方块。在某些位置,字母方块将取代三种不同颜色的空白方块。这些字母方块称为rareshapes,每个字母都分配一个数字。例如,“红色A”方块被指定为0.“蓝色C”被指定为6.总共有15(0-14)个指定的颜色/字母方块。

现在,棘手的部分。目前,当4个相同颜色的正方形(无论正方形上的字母)彼此相邻时,它们就像在宝石迷阵游戏中一样消失。但是,这不是我们希望它工作的方式。

对于我们的游戏,任何数量的空白色方块彼此相邻都不会清除它们。为了使“匹配”有效,它必须有两个字母正方形和两个相同颜色的空白正方形。

为了使事情变得更复杂,代码需要检查它是否是有效匹配。我已经包含了一些有效的比赛。我有一种感觉,这将需要很多if语句,所以一旦我知道它是如何工作的,我可以创建其余的。需要从棋盘中删除有效和无效的匹配,但无效的匹配将计入玩家。

有效匹配:

2 blank red squares + 1 "Red C" (assigned to rareshapes[1]) + 1 "Red G" (assigned to rareshapes[2])

2 blank blue squares + 1 "blue A" (assigned to rareshapes[5]) + 1 "Blue T " (assigned to rareshapes[8])

2 blank Yellow squares + 1 "Yellow A" (assigned to rareshapes[10]) + 1 "Yellow U" (assigned to rareshapes[14])

无效匹配:

2 blank red squares + 1 "Red C" (assigned to rareshapes[1]) + 1 "Red T" (assigned to rareshapes[3])

我尝试了一些改动,但我对编程很新,对python来说是全新的。我很难让它上班。我在python中发现了一个惊人的宝石迷阵游戏示例。它使用intertools.groupby和其他元素来检查匹配,我无法弄清楚如何修改密钥以使其工作。尝试了一些if语句并更改了密钥本身,它或者给了我一个错误或清除了循环中的所有内容。

有人可以提供上面有效匹配之一的代码示例,这样我就可以了解如何执行此操作。我已经发布了图像加载代码(如果需要的话)以及find_matches代码。

图片加载:

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

    colors = 'red blue yellow'
    letters = 'acgtu'

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

查找匹配代码:

def find_matches(self):
    """
    Search for matches (lines of cells with identical images) and
    return a list of them, each match being represented as a list
    of board positions.
    """
    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.image_color.get(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
                    if self.strikes <= 2:
                        self.strikes = self.strikes + 1
    return list(matches())

处理罢工的代码位于“占位符”位置,因此我可以确保它有效。如果发生无效匹配,则跟踪计数将增加,而不是像现在一样,每次匹配都会增加。

0 个答案:

没有答案