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

首頁(yè) > 編程 > Python > 正文

基于Python實(shí)現(xiàn)的掃雷游戲?qū)嵗a

2019-11-25 18:18:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

具體的功能代碼如下:

# -*- coding: utf-8 -*-import randomimport sysfrom Tkinter import *class Model:  """  核心數(shù)據(jù)類,維護(hù)一個(gè)矩陣  """  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):    """    設(shè)置某個(gè)位置的值為value    """    self.items[r][c]=value;  def checkValue(self,r,c,value):    """    檢測(cè)某個(gè)位置的值是否為value    """    if self.items[r][c]!=-1 and self.items[r][c]==value:      self.items[r][c]=-1 #已經(jīng)檢測(cè)過(guò)      return True    else:      return False      def countValue(self,r,c,value):    """    統(tǒng)計(jì)某個(gè)位置周圍8個(gè)位置中,值為value的個(gè)數(shù)    """    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):    """    點(diǎn)擊事件    case 1:是雷,所有都顯示出來(lái),游戲結(jié)束    case 2:是周圍雷數(shù)為0的,遞歸觸發(fā)周圍8個(gè)button的點(diǎn)擊事件    case 3:周圍雷數(shù)不為0的,顯示周圍雷數(shù)    """    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個(gè)暫定    """    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()
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 沐川县| 河北区| 昭平县| 利津县| 阿勒泰市| 易门县| 巴中市| 太原市| 信宜市| 巴里| 镇赉县| 绵阳市| 巧家县| 襄樊市| 阳江市| 澄迈县| 屏南县| 依兰县| 长阳| 万州区| 宝丰县| 锡林郭勒盟| 新宾| 会宁县| 荆州市| 留坝县| 应用必备| 高安市| 罗田县| 定结县| 石门县| 凤台县| 临朐县| 扬中市| 焦作市| 宽城| 西藏| 阿鲁科尔沁旗| 阿坝县| 商洛市| 康乐县|