我正在制作一款具有非常宝石般的感觉的益智游戏。当游戏开始时,棋盘上充满了三种不同颜色的随机空白方块。在某些位置,字母方块将取代三种不同颜色的空白方块。这些字母方块称为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())
处理罢工的代码位于“占位符”位置,因此我可以确保它有效。如果发生无效匹配,则跟踪计数将增加,而不是像现在一样,每次匹配都会增加。