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

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

 更新時(shí)間:2014年08月01日 10:49:37   投稿:shichen2014  
這篇文章主要介紹了基于Python實(shí)現(xiàn)的掃雷游戲?qū)嵗a,對于Python的學(xué)習(xí)以及Python游戲開發(fā)都有一定的借鑒價(jià)值,需要的朋友可以參考下

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

具體的功能代碼如下:

# -*- coding: utf-8 -*-
import random
import sys
from 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):
    """
    檢測某個(gè)位置的值是否為value
    """
    if self.items[r][c]!=-1 and self.items[r][c]==value:
      self.items[r][c]=-1 #已經(jīng)檢測過
      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:是雷,所有都顯示出來,游戲結(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()

相關(guān)文章

  • python利用ffmpeg進(jìn)行錄制屏幕的方法

    python利用ffmpeg進(jìn)行錄制屏幕的方法

    今天小編就為大家分享一篇python利用ffmpeg進(jìn)行錄制屏幕的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 利用python實(shí)現(xiàn)終身免費(fèi)的聽書工具

    利用python實(shí)現(xiàn)終身免費(fèi)的聽書工具

    本文通過實(shí)際案例,詳細(xì)介紹了作者如何利用Python庫實(shí)現(xiàn)文本轉(zhuǎn)語音的過程,從安裝庫到實(shí)際操作案例,都有詳細(xì)的說明,為讀者提供了一定的參考價(jià)值
    2024-03-03
  • python3 如何使用 goto 跳轉(zhuǎn)執(zhí)行到指定代碼行

    python3 如何使用 goto 跳轉(zhuǎn)執(zhí)行到指定代碼行

    這篇文章主要介紹了python3 使用goto跳轉(zhuǎn)執(zhí)行到指定代碼行的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • django連接mysql配置方法總結(jié)(推薦)

    django連接mysql配置方法總結(jié)(推薦)

    這篇文章主要介紹了django連接mysql配置方法總結(jié)(推薦),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • python PIL Image 圖像處理基本操作實(shí)例

    python PIL Image 圖像處理基本操作實(shí)例

    這篇文章主要介紹了python PIL Image 圖像處理基本操作實(shí)例包括圖片加載、灰度圖,圖像通道分離和合并,在圖像上輸出文字,圖像縮放,圖像閾值分割、 二值化,圖像裁剪需要的朋友可以參考下
    2022-04-04
  • python使用opencv按一定間隔截取視頻幀

    python使用opencv按一定間隔截取視頻幀

    這篇文章主要為大家詳細(xì)介紹了python使用opencv按一定間隔截取視頻幀,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python如何獲取當(dāng)前路徑并列出當(dāng)前路徑下的所有文件

    Python如何獲取當(dāng)前路徑并列出當(dāng)前路徑下的所有文件

    這篇文章主要介紹了Python如何獲取當(dāng)前路徑并列出當(dāng)前路徑下的所有文件問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • python的re正則表達(dá)式實(shí)例代碼

    python的re正則表達(dá)式實(shí)例代碼

    這篇文章主要介紹了python的re正則表達(dá)式,分享了一則re模塊實(shí)現(xiàn)的正則表達(dá)式實(shí)例代碼,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • python生成excel的實(shí)例代碼

    python生成excel的實(shí)例代碼

    這篇文章主要為大家詳細(xì)介紹了python生成excel的實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • pandas中concat函數(shù)實(shí)現(xiàn)橫向連接

    pandas中concat函數(shù)實(shí)現(xiàn)橫向連接

    在pandas中,concat函數(shù)可用于合并不同的Series和DataFrame對象,本文主要介紹了pandas中concat函數(shù)實(shí)現(xiàn)橫向連接,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04

最新評論

谢通门县| 花垣县| 镇原县| 恩平市| 莆田市| 东莞市| 旬阳县| 乌拉特中旗| 登封市| 田阳县| 广宗县| 太原市| 崇信县| 布尔津县| 肇源县| 鄱阳县| 玉山县| 建德市| 青岛市| 通许县| 合作市| 噶尔县| 泽普县| 澄城县| 华池县| 桂东县| 抚松县| 沧源| 通许县| 读书| 勃利县| 阿拉善左旗| 年辖:市辖区| 杭州市| 当雄县| 章丘市| 两当县| 襄垣县| 兰西县| 安丘市| 铜梁县|