欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統(tǒng) 1639 0

本文實(shí)例借鑒mvc模式,核心數(shù)據(jù)為model,維護(hù)1個(gè)矩陣,0表無(wú)雷,1表雷,-1表已經(jīng)檢測(cè)過(guò)。
本例使用python的tkinter做gui,由于沒(méi)考慮可用性問(wèn)題,因此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):
    """
    檢測(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('
            
              ',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()
            
          

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产日韩在线观看一区 | 欧美性一区 | 欧美国产成人一区二区三区 | 色综合区 | 色呦呦在线免费观看 | 天天影视综合网色综合国产 | 婷婷综合久久狠狠色99h | 国产精品毛片无码 | 精品欧美一区二区三区精品久久 | 久久久久久久国产精品 | 国产高清视频在线观看 | 国产真实精品久久二三区 | 国产成人高清视频 | 91久久综合九色综合欧美亚洲 | 欧美精品1区 | 日韩一区二区中文字幕 | 国产一区 | 久草干 | 一级片观看 | 国产熟妇无码A片AAA毛片视频 | 狠狠色噜噜综合社区 | 99视频这里有精品 | 免费福利视频在线观看 | 亚洲欧美中文日韩二区一区 | 一级毛片视频在线 | 欧美日韩一区二区三区在线观看 | 婷婷色国产偷v国产偷v小说 | 狠狠色欧美亚洲狠狠色www | 免费一级毛片在线播放视频 | 在线播放一区二区三区 | 免费人成又黄又爽的视频强 | 亚洲欧洲精品一区二区 | 欧美亚洲另类在线 | 久久国产精品一区二区 | 岛国毛片一级一级特级毛片 | 男女性关系视频免费观看软件 | 免费观看视频网站 | 国产精品一区二 | 免费看特黄特黄欧美大片 | 91社区在线高清 | 国内精品久久久久久99蜜桃 |