PyQt挖地雷遊戲學習筆記(3),pyqt學習筆記
這個程式使用了Python有特色的文法套路。先看第一個。
main.py裡的class MainWindow的函數init()中,有這樣的語句:
self.scene.setMap((conf.w, conf.h), conf.mines)
這裡的變數conf,定義在config.py中,由以下語句引入的:
from config import *
這裡的conf.w,conf.h和conf.mines是什麼呢?由此,轉入config.py,一探究竟。
#module: configimport json DEFAULTS = { 'splash':False, 'w': 10, 'h': 10, 'mines': 1, 'scores': [], }DEFAULT_SAVE_FILE = "config.cfg"class _Conf: def __getattr__(self,name): return DEFAULTS[name] def __setattr__(self,name,value): if type(value) != type(DEFAULTS[name]): raise Exception("%s %s is not %s:" % (value, type(value), type(DEFAULTS[name]))) DEFAULTS[name] = value def save(self,fileName=DEFAULT_SAVE_FILE): with open(fileName, 'w+') as fp: json.dump(DEFAULTS, fp, indent=True) def load(self,fileName=DEFAULT_SAVE_FILE): with open(fileName, 'r') as fp: global DEFAULTS DEFAULTS = json.load(fp)conf = _Conf()try: conf.load()except: pass
由此可見,main.py匯入該模組,會發生以下事情:
建立並初始化模組層級變數,詞典DEFAULTS;
建立並初始化模組層級變數,DEFAULT_SAVE_FILE = "config.cfg"
建立模組層級變數conf,並以此執行個體化 _Conf;
以conf引用 _Conf中的函數load(),把config.cfg檔案中的資料,讀入DEFAULTS。
遍觀 _Conf,並沒有成員變數w,h和mines,但為何使用conf.w,conf.h和conf.mines呢?
奧妙在於 _Conf中的特別函數 __getattr__(name)
當以conf.w讀資料時,__getattr__ 的參數name的值,就是“w”,
而它返回的值,是DEFAULTS[“w”]。這個值等於10。
Python的這一文法套路,讀取詞典DEFAULTS的操作,表現形式成了訪問class的成員。
挖地雷遊戲設計
我曾經寫過一個掃雷,不過應為不會使用滑鼠硬體參數,我的掃雷是每步都用鍵盤輸入想點擊的座標實現的
給你講講過程吧
1.首先是初始化:建立一個21*21的數組,最外邊加一層牆,填入-1,然後隨機放10個地雷
2.然後是點擊部分,重點!
分類(1),如果是點到地雷了->GAME OVER...
分類(2),點到數字了(旁邊有雷),就是判斷四周的格子有幾個雷,顯示
分類(3),四周都沒有雷,這裡用動態規劃,一直延伸到周圍全是數字包圍(包括牆上的-1)這是痛點
3.勝利判斷就簡單了,一直記錄剩餘的地雷就行了
錯誤提示