Minesweeper(扫雷)
这是一个由 Python 编写的扫雷游戏,基于 tkinter/Tkinter 开发,支持 python2 和 python3。
功能
概述
- 基本功能:左键扫雷,右键标记
- 记录游戏步数和时间
- 游戏重置:同一地图可进行多次游戏
- 自定义地图参数,默认提供初级、中级、高级三个级别
算法概述
游戏算法总体为一个有限状态机。一共有游戏中、成功、失败,其中后两种为最终状态。状态转化为点击某个方格。
游戏的动作是点击某个方格,有三种情况
- 点到已经被点过的,无任何改变,可以继续游戏
- 点到地雷,游戏失败
- 点到本身不是地雷
- 周围没有地雷,需要继续点开一大片地图(用个队列广度遍历搞定)
- 周围有地雷的,此时如果没有被点过的数目等于地雷数,游戏成功,否则继续游戏
地图描述
一个扫雷地图可以由三个属性组成:
- width:地图宽度
- height:地图高度
- mine_list:地雷列表,列表,每一个元素都是类似(x,y)的元组,表示该处是一个地雷。
比如下面一个地图
1000
0000
0101
1001
表示为
```
Map(width=4, height=4, mine_list=((0,0),(2,1),(2,3),(3,0),(33))) ```
由这三个属性可以算出其他的属性。
游戏(Game)
游戏类 Game 被设计为一个状态机程序,以一个地图 Map 对象作为数据来源。一个游戏对象除了 Map 对象之外用相同的二维对象_swept_state_map 表示地图相应的位置是否被扫过雷。
0010
0000
0010
0000
在 GUI 界面中也是根据这个地图改变相应单元格的状态。
开发
界面
这是由内置 tkinter 库编写的。
1 单元格按钮的响应函数。
(x,y)处左键点击函数
self.bt_map[x][y] = tk.Button(self.map_frame,text='',command = lambda x=x,y=y:self._on_click(x,y))
(x,y)处右键点击函数,采用闭包形式将 x,y 传入响应函数
def right_click_handler(event, self=self, x=x, y=y):
return self._on_right_click(event, x, y)
self.bt_map[x][y].bind('<Button-3>', right_click_handler)
2 自动计数控件
tkinter 的每个控件都有 after 和 after_cancel 两个方法,分别设置定时函数和取消定时函数。
基本方法如下:
``` def _timer(self): if self._state: self.increase() self._timer_id = self.after(1000, self._timer)
def start_timer(self): if not self._state: self._state = True self._timer()
def stop_timer(self): self._state = False if self._timer_id: self.after_cancel(self._timer_id) self._timer_id = None ```
测试
命令
python minesweeper test.py test
运行
python2 或 python3
python app_tk.pyw
打包
使用 PyInstaller 打包。 安装 PyInstaller
pip install PyInstaller
windows 下,在 path\Scripts\目录下生成 pyinstaller.exe 文件,将此目录添加到环境变量 执行以下命令即可。生成的文件在当前目录\dist\下。
pyinstaller app_tk.pyw -F -w
其中
- -F 单文件
- -w 窗口程序
参考文献
- 基于网络爬虫的信息采集分类系统设计与实现(厦门大学·周茜)
- 主题爬虫关键技术研究(哈尔滨工程大学·黄正德)
- 基于J2EE平台的工作流管理系统的运行引擎和客户端及管理工具的设计与实现(西北大学·门浩)
- 南洋学院网络新闻发布系统(电子科技大学·诸国华)
- 网络流量统计分析系统(吉林大学·石景龙)
- 基于AJAX的中国矿业信息网站的研究与开发(东北大学·禹申申)
- 基于Lucene的搜索引擎的研究与实现(大连理工大学·宏朴)
- 人才招聘系统的设计与实现(南昌大学·周新卫)
- 金融信息实时发布系统的设计与实现(东北大学·伦健)
- 主题微博爬虫的设计与实现(中原工学院·王艳阁)
- 网络流量统计分析系统(吉林大学·石景龙)
- 现代综合性物流管理系统的设计与实现(电子科技大学·杜云飞)
- 深度可定制的工具化爬虫系统的设计与实现(北京邮电大学·李笑语)
- 基于网络爬虫的信息采集分类系统设计与实现(厦门大学·周茜)
- 项目管理系统的规划与设计(吉林大学·梁雪欢)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码客栈网 ,原文地址:https://m.bishedaima.com/yuanma/35603.html