python-扫雷小游戏源码(使用tkinter模块)

Python-利用tkinter模块实现扫雷小游戏(含代码)

开发意图

忽然想起来扫雷小游戏,感觉逻辑应该挺简单的,因此自己尝试学习写代码实现了低配版扫雷,虽然一些功能还是有问题,但是勉强还是能玩的。
细数当前明显的不足如下:

  1. UI不好看(自己图片自己画的,很丑陋,懒得细琢磨了)
  2. 当踩到周围没有雷的方块时没有办法自动将附近的空白方块打开(这个很尴尬,导致每一个方块你都必须点击)
  3. 标记有雷的区域时,如果误标记到已经踩过的区域,能标记成功,且没有办法消失(正常是不应该标记成功的)
  4. 成功和失败都选用的警告类的提示框,这个懒得找了,就为了游戏的完整性才加入的。因此没研究。

游戏UI

UI如下,因为是学习使用,所以没有精心设计的很美观,全部都是糙手工完成。。。。有点丑陋,不要嫌弃。。。。

刚进去游戏的界面
刚进入游戏的界面
游戏中:
游戏中1

游戏中2:
游戏中2

结束游戏:
在这里插入图片描述

下面是一些学习时用到的我个人觉得比较重要的,当记录笔记。

使用库

tkinter库 - 图形化界面使用的模块
random库 - 生成随机数,初始布雷时使用

注意事项

1. PhotoImage只支持gif格式的文件。
一开始我使用bmp图片文件,有时候能识别,我以为是bmp文件也支持,但是后来就总是报错,最终还是使用gif格式的图片解决了问题。
2. PhotoImage的zoom和subsumple方法的参数只支持整型。
也就是PhotoImage对图片进行缩放时只支持放大/缩小整数倍。
3. button的右键功能的设置可以使用bind函数。
一直不知道怎么弄按钮的右键功能,一开始准备放弃了,不弄小旗了,但是后来查资料发现使用bind函数可以,所以就使用了这个函数。虽然还是有一些问题(比如bind函数中的事件完全无视前面设置的state=disable,导致出现如下问题:
已经被翻牌子的无雷地区依然可以被加flag。。。我也不知道为啥。。。也不知道怎么处理,谁知道的话可以告诉我一下。。。)
4. 利用bind函数添加的事件如果需要传参,可以添加一个适配函数。
这个是我查资料,参考的如下文章:https://blog.csdn.net/weixin_38428980/article/details/81225731。利用这个文章中提到的方法进行的传参。

代码示例

图片处理代码:
图片加载后进行缩放

pic_blank=PhotoImage(file=r'.\blank.gif').subsample(zoomlevel)

利用bind函数进行按钮右键事件传参:

#不考虑代码整体的完整性,只考虑与bind相关的部分
def rightclick(event,button):
    imagetemp = pic_flag
    button.configure(image=imagetemp)
    mywin.update()

def rightclickAdapter(fun,**kwds):
    return lambda event,fun=fun,kwds=kwds:fun(event,**kwds)

button1.bind("<Button-3>", rightclickAdapter(rightclick,button=button1))

感言

一开始抱着熟悉tkinter模块的目的写的。心想凑合着勉强能玩就好,写到一般觉得可能还是pygame更适合写小游戏,但是懒得重写(而且本来就是为了熟悉tkinter),最后出来能玩,我还是挺开心哒~
感兴趣的可以到我的资源中下载(代码图片包,图片真的很丑陋…)试玩一下~
下载地址:https://download.csdn.net/download/qq_16149631/11970966
如果觉得我这边有逻辑或其他没有注意到的漏洞,也欢迎帮忙提出。
python萌新期待大家的纠正。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值