代码拉取完成,页面将自动刷新
这是一个由Python编写的扫雷游戏,基于tkinter/Tkinter开发,支持python2和python3。
游戏算法总体为一个有限状态机。一共有游戏中、成功、失败,其中后两种为最终状态。状态转化为点击某个方格。
游戏的动作是点击某个方格,有三种情况
一个扫雷地图可以由三个属性组成:
比如下面一个地图
1000
0000
0101
1001
表示为
Map(width=4, height=4, mine_list=((0,0),(2,1),(2,3),(3,0),(33)))
由这三个属性可以算出其他的属性。
游戏类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
其中
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。