在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:python版扫雷开源软件地址:https://gitee.com/wututua/mine-sweeping-in-python开源软件介绍:Minesweeper(扫雷)English中文这是一个由Python编写的扫雷游戏,基于tkinter/Tkinter开发,支持python2和python3。 功能概述
算法概述游戏算法总体为一个有限状态机。一共有游戏中、成功、失败,其中后两种为最终状态。状态转化为点击某个方格。 游戏的动作是点击某个方格,有三种情况
地图描述一个扫雷地图可以由三个属性组成:
比如下面一个地图 1000000001011001 表示为 Map(width=4, height=4, mine_list=((0,0),(2,1),(2,3),(3,0),(33))) 由这三个属性可以算出其他的属性。 游戏(Game)游戏类Game被设计为一个状态机程序,以一个地图Map对象作为数据来源。一个游戏对象除了Map对象之外用相同的二维对象_swept_state_map表示地图相应的位置是否被扫过雷。 0010000000100000 在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 其中
|
请发表评论