开发意图
忽然想起来扫雷小游戏,感觉逻辑应该挺简单的,因此自己尝试学习写代码实现了低配版扫雷,虽然一些功能还是有问题,但是勉强还是能玩的。
细数当前明显的不足如下:
- UI不好看(自己图片自己画的,很丑陋,懒得细琢磨了)
- 当踩到周围没有雷的方块时没有办法自动将附近的空白方块打开(这个很尴尬,导致每一个方块你都必须点击)
- 标记有雷的区域时,如果误标记到已经踩过的区域,能标记成功,且没有办法消失(正常是不应该标记成功的)
- 成功和失败都选用的警告类的提示框,这个懒得找了,就为了游戏的完整性才加入的。因此没研究。
游戏UI
UI如下,因为是学习使用,所以没有精心设计的很美观,全部都是糙手工完成。。。。有点丑陋,不要嫌弃。。。。
刚进去游戏的界面
游戏中:
游戏中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萌新期待大家的纠正。