用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+Wordpress制作小说站
Apr 14 Python
解决python3 json数据包含中文的读写问题
May 10 Python
对numpy中shape的深入理解
Jun 15 Python
python 删除字符串中连续多个空格并保留一个的方法
Dec 22 Python
对Python Class之间函数的调用关系详解
Jan 23 Python
通过python爬虫赚钱的方法
Jan 29 Python
Python3数字求和的实例
Feb 19 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
对PyQt5中树结构的实现方法详解
Jun 17 Python
对Python中 \r, \n, \r\n的彻底理解
Mar 06 Python
Python常用扩展插件使用教程解析
Nov 02 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
Jan 23 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
destoon数据库表说明汇总
2014/07/15 PHP
Yii实现文章列表置顶功能示例
2016/10/18 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
2016/06/06 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
用v-html解决Vue.js渲染中html标签不被解析的问题
2016/12/14 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
2017/12/22 Javascript
Vue写一个简单的倒计时按钮功能
2018/04/20 Javascript
vue-router跳转时打开新页面的两种方法
2019/07/29 Javascript
[15:57]教你分分钟做大人:斧王
2014/10/30 DOTA
Python线程详解
2015/06/24 Python
Python获取央视节目单的实现代码
2015/07/25 Python
Python 自动刷博客浏览量实例代码
2017/06/14 Python
import的本质解析
2017/10/30 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
python用for循环求和的方法总结
2019/07/08 Python
Python循环实现n的全排列功能
2019/09/16 Python
python自动化测试无法启动谷歌浏览器问题
2019/10/10 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
2020/02/26 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
python 监控logcat关键字功能
2020/09/04 Python
python中pyplot基础图标函数整理
2020/11/10 Python
乌克兰机票、铁路和巴士票、酒店搜索、保险:Tickets.ua
2020/01/11 全球购物
历史系自荐信范文
2013/12/24 职场文书
开办化妆品公司创业计划书
2013/12/26 职场文书
先进事迹材料范文
2014/12/29 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android