python+pygame实现小游戏连连看之三

发布时间:2026/9/23 10:32:29
python+pygame实现小游戏连连看之三 之二请看pythonpygame实现小游戏连连看之二五、之前我们已经实现了小图标的切割初始化游戏界面等基本内容下面是连连看的核心逻辑内容。首先连连看里面判断两个小图标能不能消除一般有以下三种类型当然前提是两个小图标是一样的直连 --- 单拐连 !--双拐连!---!而单拐连本质就是两个直连双拐连本质是两个单拐连。1、增加枚举常量def main(): ... EMPTYCELL -1 NONE_LINK 0 #不连 #新增 DIRECT_LINK 1 #直连 --- #新增 ONE_CORNER_LINK 5 #单拐连 !_ TWO_CORNER_LINK 8 #双拐连 !_! #新增 ...2、新增方法 getTwoIconsLinkType参数是两个小图标返回就是上述定义的枚举常量。def main(): ... 获得两个点连通类型 def getTwoIconsLinkType(Cell0, Cell8): #第一步两个cell里面的图片是否相同不同就不谈 if cur_game[Cell0[0]][Cell0[1]] ! cur_game[Cell8[0]][Cell8[1]]: return {type:NONE_LINK} if isDirectLink(Cell0,Cell8): return {type:DIRECT_LINK} if isOneCornerLink(Cell0,Cell8): return {type:ONE_CORNER_LINK} if isTwoCornerLink(Cell0,Cell8): return {type:TWO_CORNER_LINK} return {type:NONE_LINK} ...代码中首先看图片是否相同图片相同再看是哪种连通方式。3、getTwoIconsLinkType中涉及到isDirectLinkisOneCornerLinkisTwoCornerLink三个函数下面逐一添加isDirectLinkdef main(): ... DIRECT_LINK 1 #直连 --- def isDirectLink(C1, C2): start -1 end -1 # Y方向 if C1[1] C2[1]: # 大小判断 if C2[0] C1[0]: start C2[0] end C1[0] else: start C1[0] end C2[0] for x in range(start 1, end): if cur_game[x][C1[1]] ! EMPTYCELL: return False return True # X方向 elif C1[0] C2[0]: if C1[1] C2[1]: start C2[1] end C1[1] else: start C1[1] end C2[1] for y in range(start 1, end): if cur_game[C1[0]][y] ! EMPTYCELL: return False return True return False ...由于传入的是两个小图标的下标所以用下标可以判断是同行还是同列。以同行为例第一个下标相同首先比较两者的第二个下标将小的赋值给start大的赋值给end然后从start到end这之间的所有小图标都为空EMPTYCELL即没有阻挡的可以认为是直连类型。也就是怎么把要解决的问题转化为数学模型然后通过计算机的程序语言来实现就是我们码农要掌握的技能这也是常常说的逻辑思维能力的一种表现。当然你不是码农就不要理会。下面继续讲解单拐连的代码isOneCornerLinkdef main(): ... ONE_CORNER_LINK 5 #单拐连 !_ def isOneCornerLink(C1, C2): corner (C1[0], C2[1]) if isDirectLink(C1, corner) and isDirectLink(corner, C2) and isEmptyCell(corner[0],corner[1]): return True corner (C2[0], C1[1]) if isDirectLink(C1, corner) and isDirectLink(corner, C2) and isEmptyCell(corner[0],corner[1]): return True return False逻辑设计如下紧接着再完成双拐连的函数isTwoCornerLinkdef main(): ... TWO_CORNER_LINK 8 #双拐连 !_! def isTwoCornerLink(C1, C2): # Y方向 for y in range(-1, game_rows 1): corner1 (C1[0], y) corner2 (C2[0], y) if y C1[1] or y C2[1]: continue if y -1 or y game_rows: if isDirectLink(C1, corner1) and isDirectLink(corner2, C2): return True else: if isDirectLink(C1, corner1) and isDirectLink(corner1, corner2) and isDirectLink(corner2, C2) and isEmptyCell(corner1[0],corner2[1]) and isEmptyCell(corner2[0],corner2[1]): return True # X方向 for x in range(-1, game_cols 1): corner1 (x, C1[1]) corner2 (x, C2[1]) if x C1[0] or x C2[0]: continue if x -1 or x game_cols: if isDirectLink(C1, corner1) and isDirectLink(corner2, C2): return True else: if isDirectLink(C1, corner1) and isDirectLink(corner1, corner2) and isDirectLink(corner2, C2) and isEmptyCell(corner1[0],corner2[1]) and isEmptyCell(corner2[0],corner2[1]): return True return False ...至此我们的核心逻辑已经实现。六、修改mouseClick事件def main(): ... 鼠标点击响应 def mouseClick(posX,posY): nonlocal isFirst nonlocal compareCell nonlocal isStart if isStart: curCell getPoint(posX,posY) # print (curCell) if isUseful(curCell[0],curCell[1]) and not isEmptyCell(curCell[0],curCell[1]): if isFirst : drawRedRect(curCell[0],curCell[1]) isFirst False compareCell curCell else: if compareCell[0] curCell[0] and compareCell[1] curCell[1]: isFirst True delRedRectangle(curCell[0],curCell[1]) else: linkType getTwoIconsLinkType(compareCell, curCell) #新增 if linkType[type] ! NONE_LINK: #新增 pass #消掉匹配的小图标 #删除红色的首次选中框 #设置isFirst为True #if 游戏结束: 通关后重置isStartisFirst参数 else: #新增 无法消掉的时候去掉首个选中的红框将第二个赋值为首个选中给它画红框 delRedRectangle(compareCell[0],compareCell[1]) #新增 compareCell curCell #新增 drawRedRect(curCell[0],curCell[1]) #新增待更新...pythonpygame实现连连看小游戏之四

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询