用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应用03 使用PyQT制作视频播放器实例
Dec 07 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 Python
Python实现返回数组中第i小元素的方法示例
Dec 04 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
python识别图像并提取文字的实现方法
Jun 28 Python
Pytorch中accuracy和loss的计算知识点总结
Sep 10 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 Python
Python的缺点和劣势分析
Nov 19 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
Apr 07 Python
基于python实现把json数据转换成Excel表格
May 07 Python
Python爬取豆瓣数据实现过程解析
Oct 27 Python
python基于tkinter实现gif录屏功能
May 19 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数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
PHP获取http请求的头信息实现步骤
2012/12/16 PHP
深入apache host的配置详解
2013/06/09 PHP
学习PHP Cookie处理函数
2016/08/09 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
深入理解JavaScript定时机制
2010/10/29 Javascript
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
js创建子窗口并且回传值示例代码
2013/07/02 Javascript
js中的for如何实现foreach中的遍历
2014/05/31 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
2014/07/27 Javascript
JS获取图片lowsrc属性的方法
2015/04/01 Javascript
js中new一个对象的过程
2017/02/20 Javascript
利用vueJs实现图片轮播实例代码
2017/06/03 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
关于vue表单提交防双/多击的例子
2019/10/31 Javascript
javascript实现贪吃蛇经典游戏
2020/04/10 Javascript
小程序自定义弹框效果
2020/11/16 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
python中列表元素连接方法join用法实例
2015/04/07 Python
Python使用python-docx读写word文档
2019/08/26 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
在ipython notebook中使用argparse方式
2020/04/20 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
python压包的概念及实例详解
2021/02/17 Python
在HTML5 canvas里用卷积核进行图像处理的方法
2018/05/02 HTML / CSS
新文化运动的口号
2014/06/21 职场文书
高一军训的心得体会
2014/09/01 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
2015年审计人员工作总结
2015/05/26 职场文书
实施意见格式范本
2015/06/05 职场文书
新闻报道稿范文
2015/07/23 职场文书
客户答谢会致辞
2015/07/30 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书