python掃雷游戲課程設計小組任務計劃與分配表_python實現掃雷游戲

本文為大家分享了python實現掃雷游戲的具體代碼,供大家參考,具體內容如下

本文實例借鑒mvc模式,核心數據為model,維護1個矩陣,0表無雷,1表雷,-1表已經檢測過。

本例使用python的tkinter做gui,由于沒考慮可用性問題,因此UI比較難看,pygame更有趣更強大更好看,做這些小游戲更合適,感興趣的讀者可以嘗試一下!

具體的功能代碼如下:

# -*- 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('',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()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持我們。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533542.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533542.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533542.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

時間同步服務器java,Windows 配置時間同步服務器以及配置時間同步間隔

如何修改windows下的時間同步間隔操作步驟如下&#xff1a;打開注冊表&#xff1a;在“開始”菜單→“運行”項下(或按WinR)輸入“Regedit”進入注冊表編輯器。2.修改默認時間服務器IP&#xff1a;展開HKEY_LOCAL_MACHINE->SYSTEM->CurrentControlSet->Services->W…

房價python爬取_python爬取并解析 重慶2015-2019房價走勢

1 #! /usr/bin/env python2 #-*- coding:utf-8 -*-34 5 Created on 2019年11月24日67 author: Admin8 910 importrequests11 from lxml importetree12 importtime13 importcsv1415 16 方法名稱&#xff1a;spider17 功能&#xff1a; 爬取目標網站&#xff0c;并以源碼文本18 參…

PHP遞歸刪除目錄面試題,PHP 遞歸刪除目錄中文件

/*** 遞歸刪除目錄中文件* param $pathname* return bool*/public static function delDir($pathname)//要刪除的目錄{if(file_exists($pathname)) {if(is_file($pathname)) {unlink($pathname);} else {$dir opendir($pathname);while($filename readdir($dir)) {if($filena…

python中 12_python編程中常用的12種基礎知識總結

1、正則表達式替換目標: 將字符串line中的 overview.gif 替換成其他字符串>>> line >>> more.compile(r(?<SRC)"([\w\.])",re.I)>>> mo.sub(r"\1****",line)>>> mo.sub(rreplace_str_\1,line)< /span>>&…

php smarty分頁原理,SMARTY分頁詳解

<?phprequire_once (include/common.inc.php);//這里是個接口common.inc.php里面包函了一些常用到的函數類庫以及SMARTYinclude_once(header.php);//調用頭部信息,SESSION的信息全都保存在這里,這樣做的好處是幾乎所有的頁面都不需要在開頭輸入session_start();$smarty new…

python十個一行_python 如何將一系列數字十個一行輸出

展開全部答案如下&#xff1a;代碼詳解1、使用循環輸出列表&#xff0c;利用 計數器控制輸出數量&#xff0c;當輸出到第十個&#xff0c;62616964757a686964616fe4b893e5b19e31333365663532計數器歸零&#xff0c;重新開始計數2、print輸出增加end參數可以控制輸出后以什么結尾…

sql oracle 遞歸查詢語句,Oracle使用SQL語句進行遞歸查詢

idpid問題描述&#xff1a;102031415262738495取出id為1及其下屬的所有的數據,結果為下idpid1031417384SQL> CREATE TABLE TBL_TEST2 (3 ID NUMBER,4 NAME VARCHAR2(100 BYTE),5 PID NUMBER DEFAULT 06 );Table createdS…

python中與0xf2相等的是_python中__str__與__repr__

(1)背景python中&#xff0c;對于類(自定義類)的實例對象的默認顯示既沒有太大用處&#xff0c;也不美觀。比如&#xff1a;1 classadder:2 def __init__(self,value0):3 self.datavalue #初始化數據4 def __add__(self,other):5 self.dataother6>>> xadder()7>>…

oracle清理asm歸檔日志,【Oracle】 rman 刪除歸檔日志的命令

因為數據倉庫上asm的磁盤空間不足&#xff0c;需要刪除早期的歸檔日志&#xff0c;查看資料有以下兩種方式&#xff1a;delete archivelog until time sysdate-N;delete archivelog all completed before sysdate-N;這兩個命令的差別在哪里呢&#xff1f;使用list 命令來查看一…

求逆矩陣計算器_991CN的矩陣運算

昨天的推文中說了一道二端口的題目&#xff0c;虛線中的大二端口由兩個小二端口級聯而成&#xff0c;在計算過程中&#xff0c;我們需要使用到矩陣的運算&#xff0c;昨天講題的時候說會說一下用計算器進行矩陣運算&#xff0c;今天我們就來說一下。其實在算電路的時候&#xf…

去快捷方式小箭頭_電腦桌面如何快速去掉快捷方式小箭頭

我們使用電腦時會發現在電腦桌面圖標上經常有一個小箭頭&#xff0c;這是什么原因呢&#xff1f;原來&#xff0c;這個小箭頭只存在于快捷方式的軟件圖標上&#xff0c;就是說通過快捷方式創建的圖標就有這個小箭頭。那么如何去掉這些小箭頭呢&#xff01;不知道也沒關系&#…

Oracle里silent,靜默方式(silent)安裝Oracle軟件

有的時候不方便登陸Linux/Unix的圖形界面安裝數據庫&#xff0c;且GUI方式安裝讓我們無法知道具體是做了什么操作&#xff0c;我們完全可以采用命令模式安裝和刪除Oracle軟件(代替OUI)、建立和刪除數據庫庫(代替dbca)。平臺&#xff1a;RHEL4.5&#xff0c;Oracle10.2.0.11、上…

oracle 移動日志文件,Oracle數據庫移動數據文件、日志文件和控制文件

1、關閉數據庫SQL> shutdown immediate;2、移動數據文件和日志文件到新位置SQL> host mv /u01/olddata.dbf /u02/newdata.dbf;SQL> host mv /u01/oldredo.log /u02/newredo.log;3、以加載模式啟動數據庫SQL> startup mount;4、在數據庫中更改數據文件和日志文件路徑…

python3導入_Python3導入相對還是絕對的正確方法?

我正在編寫一個python模塊。在Python2中一切正常&#xff0c;但在Python3中&#xff0c;導入失敗。這是我的代碼結構。neuralnet/__init__.pytrain.py # A wrapper to train (does not define new things)neuralnet.py # Defines the workhorse class neuralnetlayers/__init__…

oracle pdb是什么意思,淺談Oracle數據庫12c PDB技術

PDB大致功能描述&#xff1a;創建&#xff1a;用create pluggable database的命令&#xff0c;用file_name_convert的方式拷貝seed pdb的文件到對應的新pdb的路徑下。拷貝的是最基本system和sysaux表空間&#xff0c;將新建的pdb從mount的狀態打開到read write的狀態。建立pdb用…

oracle查詢sql時間ain,Oracle SQL 時間查詢

一、在使用Oracle的to_date函數來做日期轉換時&#xff0c;很多Java程序員也許會和我一樣&#xff0c;直覺的采用ldquo;yyyy-MM-dd HH:mm:ssrdquo;的to_date()與24小時制表示法及mm分鐘的顯示&#xff1a;一、在使用Oracle的to_date函數來做日期轉換時&#xff0c;很多Java程序…

室內定位算法_001:室內定位算法技術咨詢服務工作室簡介(更新)

點擊藍字關注我們團隊成員&#xff1a;何博士(中國科學院大學&#xff0c;博士) 楊博士(加拿大多倫多大學&#xff0c;博士后)微信聯系號&#xff1a;UWB_cwhe服務模式&#xff1a;1. 為企業提供定位算法技術支持與指導&#xff0c;以提高企業室內定位系統產品的穩定…

雙系統還是虛擬機 linux系統時間,你會選擇Mac虛擬機還是雙系統

在Mac上運行雙系統&#xff0c;你是會選擇Mac虛擬機呢還是直接雙系統&#xff1f;今天我們就這個問題來討論一下這兩之前的區別&#xff0c;究竟是選擇Mac最好用的虛擬機 parallels desktop還是Boot Camp&#xff1f;1、安裝在pd虛擬機中&#xff0c;安裝系統和安裝驅動完全自動…

oracle中修改多個字段默認值_利用VBA代碼在已有的數據表中刪除、添加、修改字段...

大家好,今日繼續給大家講解VBA數據庫解決方案的第21講,如何利用VBA代碼在已有的數據表中刪除&#xff0c;添加&#xff0c;修改字段。這個內容是操作數據庫的一項必修的內容&#xff0c;還望大家在實際工作中多利用&#xff0c;所以這節的知識&#xff0c;對于讀者提高自己的數…

cs1.5 linux服務端,CS1.5在linux上的配置

CS1.5在linux上的配置作者&#xff1a;作者第一步下載所需要的軟件&#xff1a;hlds_l_3110_full.tar.gzhlds_l_3110b_beta.tar.gzcs_15_full.tar.gzmetamod-1.13.tgzcm_cstrike_1_80_19-en_beta.zipsm_cstrike-2.6.15.zip第二步 解壓 hlds_l_3110_full.tar.gzhlds_l_3110b_bet…