用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装饰器使用方法实例
Nov 21 Python
python爬取个性签名的方法
Jun 17 Python
python 返回列表中某个值的索引方法
Nov 07 Python
浅谈python写入大量文件的问题
Nov 09 Python
python切片的步进、添加、连接简单操作示例
Jul 11 Python
Numpy 中的矩阵求逆实例
Aug 26 Python
Python assert关键字原理及实例解析
Dec 13 Python
python 利用已有Ner模型进行数据清洗合并代码
Dec 24 Python
pytorch 改变tensor尺寸的实现
Jan 03 Python
python中提高pip install速度
Feb 14 Python
python 实现两个npy档案合并
Jul 01 Python
详解Flask前后端分离项目案例
Jul 24 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
递归列出所有文件和目录
2006/10/09 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
PHP以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
十个PHP高级应用技巧果断收藏
2015/09/25 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
jQuery 使用手册(六)
2009/09/23 Javascript
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
原生js实现移动开发轮播图、相册滑动特效
2015/04/17 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
2016/07/22 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
2017/03/02 Javascript
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
Vuex的基本概念、项目搭建以及入坑点
2018/11/04 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
Vue的路由及路由钩子函数的实现
2019/07/02 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
原生JavaScript实现进度条
2021/02/19 Javascript
Python3.2中的字符串函数学习总结
2015/04/23 Python
Python3计算三角形的面积代码
2017/12/18 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
python读csv文件时指定行为表头或无表头的方法
2019/06/26 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
python中reload重载实例用法
2020/12/15 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
Parfumdreams芬兰:购买香水和化妆品
2021/02/13 全球购物
世界经理人咨询有限公司面试
2014/09/23 面试题
应届毕业生求职自荐书
2014/01/03 职场文书
小学二年级评语
2014/04/21 职场文书
保险专业求职信
2014/07/07 职场文书
十佳党员事迹材料
2014/08/28 职场文书
情感电台广播稿
2015/08/18 职场文书
详解Python魔法方法之描述符类
2021/05/26 Python
如何利用golang运用mysql数据库
2022/03/13 Golang