python编写小游戏教程_用Python开发 写个消消乐小游戏

提到开心消消乐这款小游戏,相信大家都不陌生,其曾在 2015 年获得过玩家最喜爱的移动单机游戏奖,受欢迎程度可见一斑,本文我们使用 Python 来做个简单的消消乐小游戏。

实现

消消乐的构成主要包括三部分:游戏主体、计分器、计时器,下面来看一下具体实现。

先来看一下游戏所需 Python 库。

定义一些常量,比如:窗口宽高、网格行列数等,代码如下

接着创建一个主窗口,代码如下:

看一下效果:

再接着在窗口中画一个 8 x 8 的网格,代码如下:

看一下效果:

再接着在网格中随机放入各种拼图块,代码如下:

看一下效果:

再接着加入计分器和计时器,代码如下:

看一下效果:

当设置的游戏时间用尽时,我们可以生成一些提示信息,代码如下:

看一下效果:

说完了游戏图形化界面相关的部分,我们再看一下游戏的主要处理逻辑。

我们通过鼠标来操纵拼图块,因此程序需要检查有无拼图块被选中,代码实现如下:

我们需要将鼠标连续选择的拼图块进行位置交换,代码实现如下:

每一次交换拼图块时,我们需要判断是否有连续一样的三个及以上拼图块,代码实现如下:

def isMatch(self):for x in range(NUMGRID):for y in range(NUMGRID):if x + 2 < NUMGRID:if self.getGemByPos(x, y).type == self.getGemByPos(x+1, y).type == self.getGemByPos(x+2, y).type:return [1, x, y]if y + 2 < NUMGRID:if self.getGemByPos(x, y).type == self.getGemByPos(x, y+1).type == self.getGemByPos(x, y+2).type:return [2, x, y]return [0, x, y]

当出现三个及以上拼图块时,需要将这些拼图块消除,代码实现如下:

将匹配的拼图块消除之后,我们还需要随机生成新的拼图块,代码实现如下:

def generateNewGems(self, res_match):if res_match[0] == 1:start = res_match[2]while start > -2:for each in [res_match[1], res_match[1]+1, res_match[1]+2]:gem = self.getGemByPos(*[each, start])if start == res_match[2]:self.gems_group.remove(gem)self.all_gems[each][start] = Noneelif start >= 0:gem.target_y += GRIDSIZEgem.fixed = Falsegem.direction = 'down'self.all_gems[each][start+1] = gemelse:gem = Puzzle(img_path=random.choice(self.gem_imgs), size=(GRIDSIZE, GRIDSIZE), position=[XMARGIN+each*GRIDSIZE, YMARGIN-GRIDSIZE], downlen=GRIDSIZE)self.gems_group.add(gem)self.all_gems[each][start+1] = gemstart -= 1elif res_match[0] == 2:start = res_match[2]while start > -4:if start == res_match[2]:for each in range(0, 3):gem = self.getGemByPos(*[res_match[1], start+each])self.gems_group.remove(gem)self.all_gems[res_match[1]][start+each] = Noneelif start >= 0:gem = self.getGemByPos(*[res_match[1], start])gem.target_y += GRIDSIZE * 3gem.fixed = Falsegem.direction = 'down'self.all_gems[res_match[1]][start+3] = gemelse:gem = Puzzle(img_path=random.choice(self.gem_imgs), size=(GRIDSIZE, GRIDSIZE), position=[XMARGIN+res_match[1]*GRIDSIZE, YMARGIN+start*GRIDSIZE], downlen=GRIDSIZE*3)self.gems_group.add(gem)self.all_gems[res_match[1]][start+3] = gemstart -= 1

之后反复执行这个过程,直至耗尽游戏时间,游戏结束。

最后,我们动态看一下游戏效果。

总结

本文我们使用 Python 实现了一个简单的消消乐游戏,有兴趣的可以对游戏做进一步扩展,比如增加关卡等。

------------------- End -------------------

往期精彩文章推荐:

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

需要Python学习教程请在后台回复【教程】领取

万水千山总是情,点个【在看】行不行

/今日留言主题/

随便说一两句吧~~

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值