用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 异常处理总结
Oct 18 Python
Python基础知识_浅谈用户交互
May 31 Python
python检测主机的连通性并记录到文件的实例
Jun 21 Python
使用Pandas对数据进行筛选和排序的实现
Jul 29 Python
Python图像处理之图片文字识别功能(OCR)
Jul 30 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
Aug 13 Python
Python简易计算器制作方法代码详解
Oct 31 Python
python 求定积分和不定积分示例
Nov 20 Python
基于python调用psutil模块过程解析
Dec 20 Python
Python使用type动态创建类操作示例
Feb 29 Python
深入了解NumPy 高级索引
Jul 24 Python
Python 调用C++封装的进一步探索交流
Mar 04 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
PHP 类相关函数的使用详解
2013/05/10 PHP
分享PHP header函数使用教程
2013/09/05 PHP
php生成4位数字验证码的实现代码
2015/11/23 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
PHP微信开发之模板消息回复
2016/06/24 PHP
PHP封装curl的调用接口及常用函数详解
2018/05/31 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
dojo学习第二天 ajax异步请求之绑定列表
2011/08/29 Javascript
推荐40款强大的 jQuery 导航插件和教程(上篇)
2012/09/14 Javascript
jquery offset函数应用实例
2012/11/14 Javascript
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
使用python实现baidu hi自动登录的代码
2013/02/10 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
用python简单实现mysql数据同步到ElasticSearch的教程
2018/05/30 Python
Python设计模式之原型模式实例详解
2019/01/18 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
Django接收自定义http header过程详解
2019/08/23 Python
python中的线程threading.Thread()使用详解
2019/12/17 Python
Python 爬虫的原理
2020/07/30 Python
Docker如何部署Python项目的实现详解
2020/10/26 Python
python IP地址转整数
2020/11/20 Python
python如何修改文件时间属性
2021/02/05 Python
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
省优秀教师事迹材料
2014/01/30 职场文书
企业内控岗位的职责
2014/02/07 职场文书
《社戏》教学反思
2014/04/15 职场文书
初婚未育证明样本
2014/10/24 职场文书