我正在设计一个带有扭曲的宝石风格的游戏。与其匹配所有相同形状的块,不如匹配一对字母。董事会上总是会有大约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/