python如何实现文字版扫雷

  介绍

这篇文章主要讲解了python如何实现文字版扫雷,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

python版本:2.7

游戏运行图:

 python如何实现文字版扫雷

代码已经注释得很清楚,不废话了,直接上代码:
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):   如果num

python如何实现文字版扫雷