用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 10 Python
python实现将文本转换成语音的方法
May 28 Python
Python中使用插入排序算法的简单分析与代码示例
May 04 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
Dec 19 Python
Python实现读取机器硬件信息的方法示例
Jun 09 Python
python 数字类型和字符串类型的相互转换实例
Jul 17 Python
python爬虫超时的处理的实例
Dec 19 Python
基于Pyinstaller打包Python程序并压缩文件大小
May 28 Python
手把手教你怎么用Python实现zip文件密码的破解
May 27 Python
Python天气语音播报小助手
Sep 25 Python
Python爬虫入门案例之爬取二手房源数据
Oct 16 Python
python 远程执行命令的详细代码
Feb 15 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
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
PHP SEO优化之URL优化方法
2011/04/21 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
2014年最新推荐的10款 PHP 开发框架
2014/08/01 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
PHP常用日期加减计算方法实例小结
2018/07/31 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
自动更新作用
2006/10/08 Javascript
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
跟我学习javascript的函数调用和构造函数调用
2015/11/16 Javascript
JavaScript中数组添加值和访问值常见问题
2016/02/06 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
JS实现京东商品分类侧边栏
2020/12/11 Javascript
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
python实现Flappy Bird源码
2018/12/24 Python
python集合常见运算案例解析
2019/10/17 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
python中JWT用户认证的实现
2020/05/18 Python
Python爬虫爬取有道实现翻译功能
2020/11/27 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
使用CSS3配合IE滤镜实现渐变和投影的效果
2015/09/06 HTML / CSS
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
护士找工作求职信
2014/07/02 职场文书
大学生赌博检讨书
2014/09/22 职场文书
2014年自愿离婚协议书范本
2014/09/25 职场文书
骨干教师申报材料
2014/12/17 职场文书
处级干部考察材料
2014/12/24 职场文书
道歉的话怎么说
2015/05/12 职场文书
初中毕业感言300字
2015/07/31 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
小程序wx.getUserProfile接口的具体使用
2021/06/02 Javascript
Python多个MP4合成视频的实现方法
2021/07/16 Python