您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關使用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實現掃雷游戲的案例”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。