日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python扫雷的代码及原理_基于Python实现的扫雷游戏实例代码

發(fā)布時(shí)間:2024/9/15 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python扫雷的代码及原理_基于Python实现的扫雷游戏实例代码 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

摘要:這篇Python開發(fā)技術(shù)欄目下的“基于Python實(shí)現(xiàn)的掃雷游戲?qū)嵗a”,介紹的技術(shù)點(diǎn)是“Python實(shí)現(xiàn)、Python、實(shí)例代碼、掃雷游戲、掃雷、游戲”,希望對(duì)大家開發(fā)技術(shù)學(xué)習(xí)和問題解決有幫助。這篇文章主要介紹了基于Python實(shí)現(xiàn)的掃雷游戲?qū)嵗a,對(duì)于Python的學(xué)習(xí)以及Python游戲開發(fā)都有一定的借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例借鑒mvc模式,核心數(shù)據(jù)為model,維護(hù)1個(gè)矩陣,0表無雷,1表雷,-1表已經(jīng)檢測(cè)過。

本例使用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):

"""

檢測(cè)某個(gè)位置的值是否為value

"""

if self.items[r][c]!=-1 and self.items[r][c]==value:

self.items[r][c]=-1 #已經(jīng)檢測(cè)過

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:是雷,所有都顯示出來,游戲結(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()

總結(jié)

以上是生活随笔為你收集整理的python扫雷的代码及原理_基于Python实现的扫雷游戏实例代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。