我正在设计一款带有转折的宝石风格游戏。与其尝试匹配所有相同形状的块,不如尝试匹配一对字母。黑板上总是有大约 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) 和两个空白的红色方块,它会消失但算作对他们的打击。
游戏的目标是在时间用完之前消除所有字母块,而不会获得三击。由于我们可以指定现在出现的字母块的数量和位置,所以它归结为匹配。有人知道如何进行这项工作吗?