温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用python实现扫雷游戏的案例

发布时间:2021-03-23 11:17:37 来源:亿速云 阅读:199 作者:小新 栏目:开发技术

这篇文章给大家分享的是有关使用python实现扫雷游戏的案例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

具体的功能代码如下:

# -*- coding: utf-8 -*- import random import sys from Tkinter import * ''' 想要学习Python? ''' class Model:  """  核心数据类,维护一个矩阵  """  def __init__(self,row,col):  self.width=col  self.height=row  self.items=[[0 for c in range(col)] for r in range(row)]    def setItemValue(self,r,c,value):  """  设置某个位置的值为value  """  self.items[r][c]=value;    def checkValue(self,r,c,value):  """  检测某个位置的值是否为value  """  if self.items[r][c]!=-1 and self.items[r][c]==value:  self.items[r][c]=-1 #已经检测过  return True  else:  return False    def countValue(self,r,c,value):  """  统计某个位置周围8个位置中,值为value的个数  """  count=0  if r-1>=0 and c-1>=0:  if self.items[r-1][c-1]==1:count+=1  if r-1>=0 and c>=0:  if self.items[r-1][c]==1:count+=1  if r-1>=0 and c+1<=self.width-1:  if self.items[r-1][c+1]==1:count+=1  if c-1>=0:  if self.items[r][c-1]==1:count+=1  if c+1<=self.width-1 :  if self.items[r][c+1]==1:count+=1  if r+1<=self.height-1 and c-1>=0:  if self.items[r+1][c-1]==1:count+=1  if r+1<=self.height-1 :  if self.items[r+1][c]==1:count+=1  if r+1<=self.height-1 and c+1<=self.width-1:  if self.items[r+1][c+1]==1:count+=1  return count     class Mines(Frame):  def __init__(self,m,master=None):  Frame.__init__(self,master)  self.model=m  self.initmine()  self.grid()  self.createWidgets()        def createWidgets(self):  #top=self.winfo_toplevel()  #top.rowconfigure(self.model.height*2,weight=1)  #top.columnconfigure(self.model.width*2,weight=1)  self.rowconfigure(self.model.height,weight=1)  self.columnconfigure(self.model.width,weight=1)  self.buttongroups=[[Button(self,height=1,width=2) for i in range(self.model.width)]  for j in range(self.model.height)]  for r in range(self.model.width):  for c in range(self.model.height):  self.buttongroups[r][c].grid(row=r,column=c)  self.buttongroups[r][c].bind('<Button-1>',self.clickevent)  self.buttongroups[r][c]['padx']=r  self.buttongroups[r][c]['pady']=c    def showall(self):  for r in range(model.height):  for c in range(model.width):  self.showone(r,c)    def showone(self,r,c):  if model.checkValue(r,c,0):  self.buttongroups[r][c]['text']=model.countValue(r,c,1)  else:  self.buttongroups[r][c]['text']='Mines'    def recureshow(self,r,c):  if 0<=r<=self.model.height-1 and 0<=c<=self.model.width-1:  if model.checkValue(r,c,0) and model.countValue(r,c,1)==0:  self.buttongroups[r][c]['text']=''  self.recureshow(r-1,c-1)  self.recureshow(r-1,c)  self.recureshow(r-1,c+1)  self.recureshow(r,c-1)  self.recureshow(r,c+1)  self.recureshow(r+1,c-1)  self.recureshow(r+1,c)  self.recureshow(r+1,c+1)  elif model.countValue(r,c,1)!=0:  self.buttongroups[r][c]['text']=model.countValue(r,c,1)  else:  pass      def clickevent(self,event):  """  点击事件  case 1:是雷,所有都显示出来,游戏结束  case 2:是周围雷数为0的,递归触发周围8个button的点击事件  case 3:周围雷数不为0的,显示周围雷数  """  r=int(str(event.widget['padx']))  c=int(str(event.widget['pady']))  if model.checkValue(r,c,1):#是雷  self.showall()  else:#不是雷  self.recureshow(r,c)      def initmine(self):  """  埋雷,每行埋height/width+2个暂定  """  r=random.randint(1,model.height/model.width+2)  for r in range(model.height):  for i in range(2):  rancol=random.randint(0,model.width-1)  model.setItemValue(r,rancol,1)      def printf(self):  """  打印  """  for r in range(model.height):  for c in range(model.width):  print model.items[r][c],  print '/n'     def new(self):  """  重新开始游戏  """  pass   if __name__=='__main__':  model=Model(10,10)  root=Tk()    #menu  menu = Menu(root)  root.config(menu=menu)  filemenu = Menu(menu)  menu.add_cascade(label="File", menu=filemenu)  filemenu.add_command(label="New",command=new)  filemenu.add_separator()  filemenu.add_command(label="Exit", command=root.quit)    #Mines  m=Mines(model,root)  #m.printf()  root.mainloop()

感谢各位的阅读!关于“使用python实现扫雷游戏的案例”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI