用python写扫雷游戏实例代码分享
扫雷是一个非常经典的WIN游戏,我们教给大家用python语言来写出这个游戏,以下是全部实例代码:
#!/usr/bin/python
#coding:utf-8
#python写的扫雷游戏
importsys
importrandom
classMineSweeping():
#扫雷主程序
def__init__(self,row=8,line=8,mineNum=15):
self.row=row
self.line=line
self.score=0#分数
self.mineNum=mineNum
self.xy_list=[[0foriinrange(self.line)]foriinrange(self.row)]
definitData(self):
#初始化状态值
#游戏开始的时候状态值为清零(再重新设置状态值)
self.xy_list=[[0foriinrange(self.line)]foriinrange(self.row)]
#设置雷的数量
maxMine=self.mineNum
whilemaxMine>0:
num_x=random.randint(0,self.row-1)
num_y=random.randint(0,self.line-1)
ifself.xy_list[num_x][num_y]==0:
self.xy_list[num_x][num_y]=1
maxMine-=1
#获取x坐标
defget_pos(self,str_pos):
#获取x坐标
while1:
try:
num_x=raw_input(str_pos)
ifint(num_x)inrange(self.line)andnum_x:
break
else:
printu'输入无效值'
except:
pass
returnint(num_x)
#进行扫雷
defmine_clear(self,x,y):
#设置显示进行扫过的数目
#设置数字
#0表示扫过的雷
#1表示类
#2表示扫过的类
#获取坐标的数字
pos=self.xy_list[x][y]
ifpos==0:
self.xy_list[x][y]=2
return0
elifpos==2:
return2
else:
return1
#界面的显示
defmineFace(self,state):
#显示界面的内容
#设置游戏的状态
#1表示运行的状态
#2表示输出的状态
#3表示游戏结束的状态
#4表示游戏获得了完胜
ifstate==1:
print'+=================+'
print'Gamestart'
print'+=================+'
tt='#'
print'**************************'
foriinrange(self.line):
str_t=''
fortinxrange(self.row):
str_t+=tt
print"|%s|"%(str_t,)
print'**************************'
print'Pleaseinputvaluesofx,y(0-7):'
#刷新用户界面
ifstate==2:
tt='#'
print'**************************'
foriinrange(self.line):
str_t=''
fortinxrange(self.row):
ifself.xy_list[i][t]==2:
str_t+=str(self.xy_list[i][t]).rjust(2)
else:
str_t+=tt
print"|%s|"%(str_t,)
print'**************************'
ifstate==3:
print'**************************'
foriinrange(self.line):
str_t=''
fortinxrange(self.row):
ifint(self.xy_list[i][t])!=1:
str_t+='2'
else:
str_t+='*'
print"|%s|"%(str_t,)
print'**************************'
ifstate==4:
tt='#'
print'**************************'
foriinrange(self.line):
str_t=''
fortinxrange(self.row):
ifself.xy_list[i][t]==2:
str_t+=str(self.xy_list[i][t]).rjust(2)
else:
str_t+='@'
print"|%s|"%(str_t,)
print'**************************'
defMainLoop(self):
#创建游戏主循环
#创建界面的运行
self.mineFace(1)
self.score=0
self.initData()
#printself.xy_list
#进入主循环
while1:
#获取坐标的位置
x=self.get_pos('X=')
y=self.get_pos('Y=')
num=self.mine_clear(x,y)
#判断是不过的了完胜
win=True
foriinself.xy_list:
if0ini:
win=False
break
ifwin:
num=4
#执行刷新界面的函数
ifnum==0:
self.mineFace(2)
self.score+=10
elifnum==2:
printu'这个位置已经被排过了,证实没有雷'
elifnum==1:
print'+=================+'
print'Gameover'
print'+=================+'
printu'分数:',self.score
self.mineFace(3)
#是不是进行下一句
next=raw_input(u'是够进行下一局:YorN')
ifnext.upper().startswith('Y'):
printu'下一局开始'
self.nextGame()
else:
print'>>>Gameexit'
break
else:
self.score+=10
printu'恭喜您获得的完全的胜利'
printu'分数:',self.score
self.mineFace(4)
next=raw_input(u'是够进行下一局:YorN')
ifnext.upper().startswith('Y'):
printu'下一局开始'
self.nextGame()
else:
print'>>>Gameexit'
break
#下一局初始化信息
defnextGame(self):
self.mineFace(1)
self.score=0
self.initData()
if__name__=='__main__':
mi=MineSweeping(10,10,20)
mi.MainLoop()
sys.exit()
如果大家在测试的时候还有任何疑问,可以在下方的留言区讨论,感谢大家对毛票票的支持。