用python写扫雷游戏实例代码分享


Posted in Python onMay 27, 2018

扫雷是一个非常经典的WIN游戏,我们教给大家用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()

如果大家在测试的时候还有任何疑问,可以在下方的留言区讨论,感谢大家对三水点靠木的支持。

Python 相关文章推荐
Python内建数据结构详解
Feb 03 Python
Python使用PyCrypto实现AES加密功能示例
May 22 Python
Python将DataFrame的某一列作为index的方法
Apr 08 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
Jun 25 Python
Django 查询数据库并返回页面的例子
Aug 12 Python
pandas factorize实现将字符串特征转化为数字特征
Dec 19 Python
Python遍历字典方式就实例详解
Dec 28 Python
如何使用python传入不确定个数参数
Feb 18 Python
python 解压、复制、删除 文件的实例代码
Feb 26 Python
Python3爬虫中关于Ajax分析方法的总结
Jul 10 Python
Python 合并拼接字符串的方法
Jul 28 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
Aug 17 Python
和孩子一起学习python之变量命名规则
May 27 #Python
儿童学习python的一些小技巧
May 27 #Python
django初始化数据库的实例
May 27 #Python
django 删除数据库表后重新同步的方法
May 27 #Python
Django 根据数据模型models创建数据表的实例
May 27 #Python
Django使用Mysql数据库已经存在的数据表方法
May 27 #Python
django中模板的html自动转意方法
May 27 #Python
You might like
如何冲泡挂耳包咖啡?技巧是什么
2021/03/04 冲泡冲煮
部署PHP项目应该注意的几点事项分享
2013/12/20 PHP
php解析json数据实例
2014/08/19 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
javascript中String对象的slice()方法分析
2014/12/20 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
2016/02/17 Javascript
关于angularJs指令的Scope(作用域)介绍
2016/10/25 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
详解vue中axios请求的封装
2019/04/08 Javascript
JavaScript实现单英文金山打字通
2020/07/24 Javascript
vue实现列表滚动的过渡动画
2020/06/29 Javascript
python PIL模块与随机生成中文验证码
2016/02/27 Python
Django的HttpRequest和HttpResponse对象详解
2018/01/26 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
2019/10/14 Python
python excel多行合并的方法
2020/12/09 Python
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
HTML5中indexedDB 数据库的使用实例
2017/05/11 HTML / CSS
海淘零差价,宝贝全球购: 宝贝格子
2016/08/24 全球购物
荷兰家电销售网站:Welhof
2020/12/08 全球购物
竞聘演讲稿开场白
2014/08/25 职场文书
环卫工人节活动总结
2014/08/29 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
2015年护士节活动策划方案
2015/05/04 职场文书
公司表扬信格式
2015/05/04 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
因个人工作失误检讨书
2019/06/21 职场文书
解析目标检测之IoU
2021/06/26 Python
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
2021/08/02 MySQL
mysql timestamp比较查询遇到的坑及解决
2021/11/27 MySQL
Matplotlib绘制条形图的方法你知道吗
2022/03/21 Python
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL