用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定时检查启动某个exe程序适合检测exe是否挂了
Jan 21 Python
Windows系统下安装Python的SSH模块教程
Feb 05 Python
简单谈谈Python的pycurl模块
Apr 07 Python
Python hashlib模块用法实例分析
Jun 12 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
Oct 30 Python
使用Python横向合并excel文件的实例
Dec 11 Python
详解python算法之冒泡排序
Mar 05 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
Python实现12306火车票抢票系统
Jul 04 Python
python 解决mysql where in 对列表(list,,array)问题
Jun 06 Python
pyqt5 textEdit、lineEdit操作的示例代码
Aug 12 Python
详解Python如何批量采集京东商品数据流程
Jan 22 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+MYSQL开发工具及资源收藏
2007/01/02 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
2012/02/23 Javascript
eclipse如何忽略js文件报错(附图)
2013/10/30 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
jquery表单插件Autotab使用方法详解
2016/06/24 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
VUE实现一个分页组件的示例
2017/09/13 Javascript
nodeJs实现基于连接池连接mysql的方法示例
2018/02/10 NodeJs
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
python字符串分割及字符串的一些常规方法
2019/07/24 Python
详解python opencv、scikit-image和PIL图像处理库比较
2019/12/26 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
Django如何继承AbstractUser扩展字段
2020/11/27 Python
使用CSS3的rem属性制作响应式页面布局的要点解析
2016/05/24 HTML / CSS
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
护理专业毕业生自荐信范文
2014/01/05 职场文书
幼儿园校车司机的岗位职责
2014/01/30 职场文书
酒店节能降耗方案
2014/05/08 职场文书
工商管理自荐书
2014/07/06 职场文书
社区娱乐活动方案
2014/08/21 职场文书
店面出租协议书范本
2014/11/28 职场文书
欢送会主持词
2015/07/01 职场文书
python基于机器学习预测股票交易信号
2021/05/25 Python
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis
实例详解Python的进程,线程和协程
2022/03/13 Python