資源簡介
簡易的9*9掃雷,程序使用python3.x實現,使用tkinter庫實現圖形化
代碼片段和文件信息
#?author:zwj
#?date:2018-1-30
#?掃雷?v1.0
import?random
import?tkinter
#?創建程序窗口
root?=?tkinter.Tk()
#?窗口標題
root.title(“掃雷v1.0“)
#?窗口大小和顯示位置
root.geometry(‘470x425+500+150‘)
btns?=?[]??#?存儲生成的按鈕
mines?=?[]??#?存儲地雷
#?按鈕類
class?MyButton(tkinter.Button):
????#?剩余安全按鈕的個數
????left?=?71
????def?__init__(self?obj?string?wid?hei):
????????self.flag?=?True
????????#?按鈕上顯示的字符
????????self.strvar?=?tkinter.StringVar()
????????#?調用父類的__init__方法
????????super(MyButton?self).__init__(obj?textvariable=self.strvar?width=wid?height=hei?command=self.check)
????????self.index?=?int(string)
????#?設置按鈕上要顯示的字符
????def?settext(self?text):
????????self.strvar.set(text)
????#?判斷是否為雷
????def?check(self):
????????#?判斷所有安全的按鈕是否全部別點擊了
????????if?MyButton.left?==?0:
????????????#?游戲勝利
????????????win()
????????#?判斷點擊的按鈕是否為雷
????????else:
????????????index_x?=?0
????????????if?self.index?10:
????????????????index_y?=?self.index?-?1
????????????else:
????????????????tmp?=?int(self.index?/?9)
????????????????index_y?=?self.index?-?tmp?*?9
????????????????if?index_y?==?0:
????????????????????index_x?=?tmp?-?1
????????????????????index_y?=?8
????????????????else:
????????????????????index_x?=?tmp
????????????????????index_y?=?index_y?-?1
????????????if?mines[index_x][index_y]?==?-99:
????????????????#?游戲失敗,游戲結束
????????????????gameover()
????????????#?按鈕上顯示周圍雷的數量
????????????else:
????????????????self.strvar.set(str(mines[index_x][index_y]))
????????????????#?安全按鈕的個數減一
????????????????if?self.flag:
????????????????????MyButton.left?-=?1
????????????????????self.flag?=?False
def?init(x=9?y=9):
????#?按鈕的序號
????count?=?1
????for?index?in?range(x):
????????for?index2?in?range(y):
????????????#?生成新的按鈕
????????????btn?=?MyButton(root?str(count)?6?2)
????????????count?+=?1
????????????#?將生成的按鈕加入按鈕列表中
????????????btns.append(btn)
????for?i?in?range(x):
????????for?j?in?range(y):
????????????#?按鈕布置到窗口中
????????????btns[i?*?9?+?j].grid(row=i?column=j)
#?設置雷
def?set_mine():
????for?rand?in?range(9):
????????#?每個位置的初始值設為0,-99代表雷
????????mines.append([0?0?0?0?0?0?0?0?0])
????#?隨機生成1~81中的十個數,用來設置雷
????random_list?=?[]
????for?i?in?range(10):
????????tmp?=?random.randint(1?81)
????????if?tmp?not?in?random_list:
????????????random_list.append(tmp)
????#?在相應的位置設置-99表示雷
????for?each?in?random_list:
????????if?each?10:
????????????mines[0][each?-?1]?=?-99
????????else:
????????????tmp?=?int(each?/?9)
????????????index?=?each?-?tmp?*?9
????????????if?index?==?0:
????????????????mines[tmp?-?1][8]?=?-99
????????????else:
????????????????mines[tmp][(each?-?tmp?*?9)?-?1]?=?-99
????#?計算mines[0][0]周圍地雷的數量
????if?mines[0][0]?!=?-99:
????????if?mines[0][1]?==?-99:
????????????mines[0][0]?+=?1
????????if?mines[1][0]?==?-99:
????????????mines[0][0]?+=?1
????????if?mines[1][1]?==?-99:
????????????mines[0][0]?+=?1
????#?計算mines[0][8]周圍地雷的數量
????if?mines[0][8
評論
共有 條評論