python编写扫雷_python 写的扫雷游戏

#!/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 #分数

self.mineNum = mineNum

self.xy_list = [[0 for i in range(self.line)] for i in range(self.row)]

def initData(self):

# 初始化状态值

# 游戏开始的时候状态值为清零(再重新设置状态值)

self.xy_list = [[0 for i in range(self.line)] for i in range(self.row)]

# 设置雷的数量

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坐标

def get_pos(self,str_pos):

#获取x坐标

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)

#进行扫雷

def mine_clear(self,x,y):

# 设置显示进行扫过的数目

# 设置数字

# 0 表示扫过的雷

# 1 表示类

# 2 表示扫过的类

#获取坐标的数字

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):

#显示界面的内容

#设置游戏的状态

#1 表示运行的状态

#2 表示输出的状态

#3 表示游戏结束的状态

#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):

#创建游戏主循环

#创建界面的运行

self.mineFace(1)

self.score = 0

self.initData()

#print self.xy_list

# 进入主循环

while 1:

#获取坐标的位置

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

#执行刷新界面的函数

if num == 0:

self.mineFace(2)

self.score += 10

elif num == 2:

print u'这个位置已经被排过了,证实没有雷'

elif num == 1:

print '+=================+'

print ' Game over '

print '+=================+'

print u'分数 : ', self.score

self.mineFace(3)

# 是不是进行下一句

next = raw_input(u'是够进行下一局: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'分数 : ', self.score

self.mineFace(4)

next = raw_input(u'是够进行下一局: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()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值