介绍
这篇文章主要讲解了python如何实现文字版扫雷,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
python版本:2.7
游戏运行图:
代码已经注释得很清楚,不废话了,直接上代码:
2个算法:1、随机数生成算法,2,广度优先
#编码:utf - 8 导入系统 进口随机 进口队列 #保存不同游戏难度数据格式:难度:(行,行,我的) DIFFICUL_DATA=https://www.yisu.com/zixun/{1: (8 8 5), 2: (10、10、20), 3: (15100)} #保存不同游戏结果的一些数据 RESULT_DATA={ 0:“数据统计”, 1:“游戏胜利”, 2:“游戏失败” } 类Sweep_Mine(对象): def __init__(自我): ”“” 功能:实例化函数 ”“” 自我。行=0 自我。行=0 自我。mine_num=0 自我。map_list=[] 自我。clean_count=0 自我。step_count=0 自我。水平=0 自我。结果=0 #保存游戏结果,0:还未结束,1:游戏胜利,2:游戏失败 自我。队列=Queue.Queue () def show_desc(自我): ”“” 功能:打印游戏说明 ”“” 打印”==============================" 打印”|游戏说明|” 打印“| |” 打印“| |” 打印”| #为没扫雷过的位置|” 打印”| *为地雷的位置|” 打印“| 0为空白区域|” 打印”| 1 - 8为周围雷的数目|” 打印“| |” 打印“| |” 打印”|输入X/Y:扫雷的位置|” 打印”| X/Y输入99:刷新地图|” 打印”| X/Y输入88:退出游戏|” 打印“| |” 打印”==============================" 打印”- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -” def show_result(自我): ”“” 功能:打印信息显示 参数: 选择0打印数据统计 1打印游戏胜利 2打印游戏结束 ”“” 打印”/n============================" 打印RESULT_DATA.get (self.result) #从RESULT_DATA中打印结果数据 打印”/n地雷数:% d步数:% d % (self.mine_num self.step_count) 打印”已扫雷坑:% d剩余雷坑:% d % (self.clean_count,/self.row *自我。线——自我。clean_count -self.mine_num) 打印”============================" def init_data(自我): ”“” 功能:难度选择,数据初始化 ”“” 自我。clean_count=0 自我。step_count=0 自我。行=DIFFICUL_DATA[自我。水平][0]#从全局变量Grade_Data获取难度数据 自我。行=DIFFICUL_DATA [self.level] [1] 自我。mine_num=DIFFICUL_DATA [self.level] [2] 自我。map_list=[[' # '因为我在范围(self.row)]我的范围(self.line)] # map_list填充“#” random_list=random.sample(范围(self.row * self.line), self.mine_num) #获取mine_num个随机数 因为我在random_list: x=我的自我。行#用随机数对横取余 y=i/自我。行#用随机数对横取商 自我。map_list [y] [x]=?’#随机位置设置雷 def set_level(自我,级): ”“” 功能:设置游戏难度 参数: 级为1 2 3不同难度 返回: 真正的设置等级成功 虚假设置等级失败 ”“” 如果级==1==2级或者级==3: 自我。=级水平 self.init_data () 还真 其他: 返回假 def check_result(自我): ”“” 功能:判断游戏是否胜利 返回: self.result 0未结束 1胜利 2失败 ”“” 如果self.row * self.line-self。clean_count <=self.mine_num: 自我。结果=1 返回self.result def bfs(自我): ”“” BFS广度优先搜索空白区 ”“” queue_temp=[] 约=[[1],[0,1],[1],[1,0],[1,0],[1],[0,1],[1]] 虽然不是self.queue.empty (): 自我。clean_count +=1 我=0 q_x=self.queue.get () q_y=self.queue.get () 的价值: 行=q_y +值[0] 行=q_x +值[1] 如果<0或线>=自我。行或行<0或行>=self.row: 继续 如果自我。map_list(线)(行)==?’: 我+=1 elif自我。map_list(线)(行)==?”: queue_temp.append([行,行])#暂时保存到queue_temp 如果我> 0: 自我。map_list [q_y] [q_x]=str(我)#标注雷的数目 queue_temp=[] #清空queue_temp 其他: 自我。map_list [q_y] [q_x]=' 0 ' #设置为空白区' 0 ' 而len (queue_temp): #将queue_temp里面的值放到队列队列里面 temp=queue_temp.pop (0) 自我。map_list[临时[0]][临时[1]]=' 0 ' #防止回头 self.queue.put(临时[1])#将空白的点加入队列 self.queue.put(临时[0]) def show_game(自我,showmine=False): ”“” 功能:显示扫雷地图 参数:默认showmine为假普通显示,隐藏地雷的位置 showmine为真正的特殊显示,显示地图中地雷的位置 ”“” output_temp=[] #保存输出字符 num_temp=[] #保存横纵坐标的序号 len=自我。行如果自我。行>=自我。行自我。行#保存行或线长的一边 num的范围(len): 如果numpython如何实现文字版扫雷