国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

基于Python實現的掃雷游戲實例代碼

2020-02-23 05:37:38
字體:
來源:轉載
供稿:網友

本文實例借鑒mvc模式,核心數據為model,維護1個矩陣,0表無雷,1表雷,-1表已經檢測過。
本例使用python的tkinter做gui,由于沒考慮可用性問題,因此UI比較難看,pygame更有趣更強大更好看,做這些小游戲更合適,感興趣的讀者可以嘗試一下!

具體的功能代碼如下:

# -*- coding: utf-8 -*-import randomimport sysfrom Tkinter import *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):  """  重新開始游戲  """  passif __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()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桐梓县| 明光市| 五华县| 青阳县| 闽清县| 西藏| 玛沁县| 满洲里市| 合山市| 耒阳市| 龙南县| 靖安县| 晋城| 永靖县| 莫力| 汕尾市| 阿图什市| 洛川县| 彭泽县| 澄城县| 五莲县| 嘉黎县| 邳州市| 天柱县| 奇台县| 清徐县| 长治市| 漳平市| 泌阳县| 海口市| 宜良县| 赤水市| 阿拉善左旗| 金门县| 明水县| 平果县| 海晏县| 鄄城县| 永宁县| 个旧市| 宜君县|