用python寫掃雷游戲?qū)嵗a分享
更新時(shí)間:2018年05月27日 14:34:45 投稿:laozhang
我們給大家分享了一篇關(guān)于用python寫一個(gè)掃雷經(jīng)典游戲的實(shí)例代碼,大家可以測(cè)試運(yùn)行下。
掃雷是一個(gè)非常經(jīng)典的WIN游戲,我們教給大家用python語言來寫出這個(gè)游戲,以下是全部實(shí)例代碼:
#!/usr/bin/python
#coding:utf-8
#python 寫的掃雷游戲
import sys
import random
class MineSweeping():
#掃雷主程序
def __init__(self,row = 8 ,line= 8,mineNum = 15):
self.row = row
self.line = line
self.score = 0 #分?jǐn)?shù)
self.mineNum = mineNum
self.xy_list = [[0 for i in range(self.line)] for i in range(self.row)]
def initData(self):
# 初始化狀態(tài)值
# 游戲開始的時(shí)候狀態(tài)值為清零(再重新設(shè)置狀態(tài)值)
self.xy_list = [[0 for i in range(self.line)] for i in range(self.row)]
# 設(shè)置雷的數(shù)量
maxMine = self.mineNum
while maxMine > 0 :
num_x = random.randint(0,self.row-1)
num_y = random.randint(0,self.line-1)
if self.xy_list[num_x][num_y] == 0:
self.xy_list[num_x][num_y] = 1
maxMine -= 1
#獲取x坐標(biāo)
def get_pos(self,str_pos):
#獲取x坐標(biāo)
while 1:
try:
num_x = raw_input(str_pos)
if int(num_x) in range(self.line) and num_x :
break
else:
print u'輸入無效值'
except:
pass
return int(num_x)
#進(jìn)行掃雷
def mine_clear(self,x,y):
# 設(shè)置顯示進(jìn)行掃過的數(shù)目
# 設(shè)置數(shù)字
# 0 表示掃過的雷
# 1 表示類
# 2 表示掃過的類
#獲取坐標(biāo)的數(shù)字
pos = self.xy_list[x][y]
if pos == 0 :
self.xy_list[x][y] = 2
return 0
elif pos == 2 :
return 2
else:
return 1
#界面的顯示
def mineFace(self,state):
#顯示界面的內(nèi)容
#設(shè)置游戲的狀態(tài)
#1 表示運(yùn)行的狀態(tài)
#2 表示輸出的狀態(tài)
#3 表示游戲結(jié)束的狀態(tài)
#4 表示游戲獲得了完勝
if state == 1:
print '+=================+'
print ' Game start '
print '+=================+'
tt = ' #'
print '**************************'
for i in range(self.line):
str_t = ''
for t in xrange(self.row):
str_t += tt
print "|%s|"%(str_t,)
print '**************************'
print 'Please input values of x,y(0-7):'
#刷新用戶界面
if state == 2:
tt = ' #'
print '**************************'
for i in range(self.line):
str_t = ''
for t in xrange(self.row):
if self.xy_list[i][t] == 2:
str_t += str(self.xy_list[i][t]).rjust(2)
else:
str_t += tt
print "|%s|"%(str_t,)
print '**************************'
if state == 3:
print '**************************'
for i in range(self.line):
str_t = ''
for t in xrange(self.row):
if int(self.xy_list[i][t]) != 1:
str_t += ' 2'
else:
str_t += ' *'
print "|%s|"%(str_t,)
print '**************************'
if state == 4:
tt = ' #'
print '**************************'
for i in range(self.line):
str_t = ''
for t in xrange(self.row):
if self.xy_list[i][t] == 2:
str_t += str(self.xy_list[i][t]).rjust(2)
else:
str_t += ' @'
print "|%s|"%(str_t,)
print '**************************'
def MainLoop(self):
#創(chuàng)建游戲主循環(huán)
#創(chuàng)建界面的運(yùn)行
self.mineFace(1)
self.score = 0
self.initData()
#print self.xy_list
# 進(jìn)入主循環(huán)
while 1:
#獲取坐標(biāo)的位置
x = self.get_pos(' X = ')
y = self.get_pos(' Y = ')
num = self.mine_clear(x,y)
#判斷是不過的了完勝
win = True
for i in self.xy_list:
if 0 in i:
win = False
break
if win:
num = 4
#執(zhí)行刷新界面的函數(shù)
if num == 0:
self.mineFace(2)
self.score += 10
elif num == 2:
print u'這個(gè)位置已經(jīng)被排過了,證實(shí)沒有雷'
elif num == 1:
print '+=================+'
print ' Game over '
print '+=================+'
print u'分?jǐn)?shù) : ', self.score
self.mineFace(3)
# 是不是進(jìn)行下一句
next = raw_input(u'是夠進(jìn)行下一局:Y or N ')
if next.upper().startswith('Y'):
print u'下一局開始'
self.nextGame()
else:
print '>>> Game exit'
break
else:
self.score += 10
print u'恭喜您獲得的完全的勝利'
print u'分?jǐn)?shù) : ', self.score
self.mineFace(4)
next = raw_input(u'是夠進(jìn)行下一局:Y or N ')
if next.upper().startswith('Y'):
print u'下一局開始'
self.nextGame()
else:
print '>>> Game exit'
break
# 下一局初始化信息
def nextGame(self):
self.mineFace(1)
self.score = 0
self.initData()
if __name__ == '__main__':
mi = MineSweeping(10,10,20)
mi.MainLoop()
sys.exit()
如果大家在測(cè)試的時(shí)候還有任何疑問,可以在下方的留言區(qū)討論,感謝大家對(duì)腳本之家的支持。
相關(guān)文章
python?playwright?庫(kù)上傳和下載操作(自動(dòng)化測(cè)試?playwright)
這篇文章主要介紹了python?playwright?庫(kù)上傳和下載操作(自動(dòng)化測(cè)試?playwright?),playwright中的上傳和下載比selenium的上傳和下載要簡(jiǎn)便些,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
Python requests.post方法中data與json參數(shù)區(qū)別詳解
這篇文章主要介紹了Python requests.post方法中data與json參數(shù)區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Python Django基礎(chǔ)二之URL路由系統(tǒng)
這篇文章主要介紹了Python Django基礎(chǔ)二之URL路由系統(tǒng) 的相關(guān)資料,需要的朋友可以參考下2019-07-07
將.ipynb文件轉(zhuǎn)換成.py文件詳細(xì)步驟(一看就會(huì))
這篇文章主要給大家介紹了關(guān)于如何將.ipynb文件轉(zhuǎn)換成.py文件的詳細(xì)步驟,文中通過圖文介紹的非常詳細(xì),大家基本一看就會(huì),需要的朋友可以參考下2023-07-07
pytest用例間參數(shù)傳遞的兩種實(shí)現(xiàn)方式示例
pytest提供了許多運(yùn)行命令以供定制化運(yùn)行某一類測(cè)試用例或者某個(gè)測(cè)試用例等,下面這篇文章主要給大家介紹了關(guān)于pytest用例間參數(shù)傳遞的兩種實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12

