上篇python连连看与记忆翻牌游戏(2)完成了界面,今天完成最后一篇算法与游戏结合,比较简单,这里简单讲讲。
最终效果:
之前的连接算法中,我们是通过一个矩阵来测试的。
数据结构:二维矩阵
[[1 0 1 0]
[1 0 0 0]
[0 1 1 0]
[1 0 0 0]]
这里我们将游戏图片也对应到一个矩阵中。
首先在游戏初始化中,初始化一个self.grid的空矩阵。
class MyGame():
def __init__(self):
pygame.init()
self.screen = pygame.display.set_mode([Config.SCREEN_WIDTH, Config.SCREEN_HEIGHT])
self.clock = pygame.time.Clock()
self.grid = np.zeros((Config.ROW_COUNT,Config.COLUMN_COUNT),dtype='<U10')
[['' '' '' '' '' '' '' '']
['' '' '' '' '' '' '' '']
['' '' '' '' '' '' '' '']
['' '' '' '' '' '' '' '']]
然后图片初始化的时候将图片名称填充到矩阵中。
def init_imgs_obj(self):
for row in range(Config.ROW_COUNT):
for column in range(Config.COLUMN_COUNT):
x = (Config.MARGIN + Config.WIDTH) * column + Config.MARGIN
y = (Config.MARGIN + Config.HEIGHT) * row + Config.MARGIN
obj = ImageButton(self.screen,self.all_imgs_obj[row * Config.COLUMN_COUNT + column],x,y)
self.grid[row,column] = self.all_imgs[row * Config.COLUMN_COUNT + column]
self.all_imgs_button.append(obj)
print(self.grid)
[['猫_4.png' '猫_4.png' '猫_7.png' '猫_6.png' '猫_1.png' '猫_1.png' '猫_4.png'
'猫_6.png']
['猫_5.png' '猫_1.png' '猫_5.png' '猫_7.png' '猫_2.png' '猫_3.png' '猫_5.png'
'猫_6.png']
['猫_7.png' '猫_6.png' '猫_3.png' '猫_4.png' '猫_2.png' '猫_1.png' '猫_5.png'
'猫_8.png']
['猫_2.png' '猫_8.png' '猫_2.png' '猫_3.png' '猫_3.png' '猫_8.png' '猫_7.png'
'猫_8.png']]
接着将原来的算法作为一个模块link.py;
# link.py
......
def can_remove(array,p1, p2):
if p1[0] == p2[0] and p1[1] == p2[1]:
print('同一个点')
return False
elif array[p1[0], p1[1]] == array[p2[0], p2[1]]:
# 边界
if edge(array,p1,p2):
return True
elif h(array,p1, p2):
print('水平')
return True
elif v(array,p1, p2):
print('竖直')
return True
elif turn_one(array,p1, p2):
print('一个拐')
return True
elif turn_two(array,p1, p2):
print('两个拐')
return True
else:
print('无法匹配')
return False
并从里面导入can_remove方法,用于判断两个点是否可以相连。
from link import can_remove
最后更改判断代码:
原来的:
#判断是否相同
if self.match_img[1]["pbtn_img"] == self.match_img[2]["pbtn_img"] and self.match_img[1]['point'] != self.match_img[2]['point']:
print('匹配成功')
...
更改后,增加can_remove判断,
#判断是否相同
if self.match_img[1]["pbtn_img"] == self.match_img[2]["pbtn_img"] and can_remove(self.grid,self.match_img[1]['point'],self.match_img[2]['point'])
(全文完)