最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)掃雷游戲

 更新時(shí)間:2020年03月03日 13:24:34   作者:嗨學(xué)編程  
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了python實(shí)現(xiàn)掃雷游戲的具體代碼,供大家參考,具體內(nèi)容如下

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

具體的功能代碼如下:

# -*- coding: utf-8 -*-
import random
import sys
from Tkinter import *
'''
想要學(xué)習(xí)Python?

'''
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):
 """
 重新開始游戲
 """
 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()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Python函數(shù)print用法

    詳解Python函數(shù)print用法

    今天給大家?guī)?lái)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著Python print函數(shù)的用法展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 在Pycharm terminal中字體大小設(shè)置的方法

    在Pycharm terminal中字體大小設(shè)置的方法

    今天小編就為大家分享一篇在Pycharm terminal中字體大小設(shè)置的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python中匹配模糊的字符串問(wèn)題分析

    Python中匹配模糊的字符串問(wèn)題分析

    這篇文章主要介紹了Python中匹配模糊的字符串的過(guò)程,我們將學(xué)習(xí)如何使用process 模塊,該模塊允許我們?cè)谀:址壿嫷膸椭掠行У仄ヅ浠蛱崛∽址?需要的朋友可以參考下
    2023-09-09
  • 對(duì)Python進(jìn)行數(shù)據(jù)分析_關(guān)于Package的安裝問(wèn)題

    對(duì)Python進(jìn)行數(shù)據(jù)分析_關(guān)于Package的安裝問(wèn)題

    下面小編就為大家?guī)?lái)一篇對(duì)Python進(jìn)行數(shù)據(jù)分析_關(guān)于Package的安裝問(wèn)題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • PyCM多類別混淆矩陣分析python庫(kù)功能使用探究

    PyCM多類別混淆矩陣分析python庫(kù)功能使用探究

    這篇文章主要為大家介紹了python編寫的PyCM多類混淆矩陣庫(kù),用于多類別混淆矩陣分析,幫助用戶從不同角度評(píng)價(jià)分類模型的表現(xiàn),這些指標(biāo)包括但不限于準(zhǔn)確率、召回率、F1分?jǐn)?shù)、Kappa?統(tǒng)計(jì)量等,支持二分類、多分類及多標(biāo)簽分類問(wèn)題
    2024-01-01
  • Python實(shí)現(xiàn)手機(jī)號(hào)自動(dòng)判斷男女性別(實(shí)例解析)

    Python實(shí)現(xiàn)手機(jī)號(hào)自動(dòng)判斷男女性別(實(shí)例解析)

    這篇文章主要介紹了Python實(shí)現(xiàn)手機(jī)號(hào)自動(dòng)判斷男女性別,本文性別判斷主要依靠airtest中的自動(dòng)化測(cè)試實(shí)現(xiàn),通過(guò)實(shí)例代碼給大家講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • python中裝飾器級(jí)連的使用方法示例

    python中裝飾器級(jí)連的使用方法示例

    裝飾器本質(zhì)上是一個(gè)Python函數(shù),它可以讓其他函數(shù)在不需要做任何代碼變動(dòng)的前提下增加額外功能,下面這篇文章主要給大家介紹了關(guān)于python中裝飾器級(jí)連的使用方法,需要的朋友可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • 解決Django Static內(nèi)容不能加載顯示的問(wèn)題

    解決Django Static內(nèi)容不能加載顯示的問(wèn)題

    今天小編就為大家分享一篇解決Django Static內(nèi)容不能加載顯示的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • ndarray的轉(zhuǎn)置(numpy.transpose()與A.T命令對(duì)比分析)

    ndarray的轉(zhuǎn)置(numpy.transpose()與A.T命令對(duì)比分析)

    這篇文章主要介紹了ndarray的轉(zhuǎn)置(numpy.transpose()與A.T命令對(duì)比分析),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • python3 requests中使用ip代理池隨機(jī)生成ip的實(shí)例

    python3 requests中使用ip代理池隨機(jī)生成ip的實(shí)例

    今天小編就為大家分享一篇python3 requests中使用ip代理池隨機(jī)生成ip的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05

最新評(píng)論

紫云| 漠河县| 盘锦市| 嵊泗县| 香河县| 苗栗县| 城步| 山东省| 普兰县| 天镇县| 南陵县| 宜阳县| 明水县| 依安县| 邳州市| 平泉县| 江阴市| 大理市| 岐山县| 石台县| 廉江市| 南漳县| 棋牌| 曲水县| 宁国市| 黄龙县| 雷山县| 阳山县| 安阳市| 西昌市| 松滋市| 泽库县| 长兴县| 雷波县| 高唐县| 巴林左旗| 静海县| 贡觉县| 巨鹿县| 白银市| 中牟县|