网络编程
位置:首页>> 网络编程>> Python编程>> 用python写扫雷游戏实例代码分享

用python写扫雷游戏实例代码分享

作者:laozhang  发布时间:2023-03-31 05:12:38 

标签:python,扫雷游戏

扫雷是一个非常经典的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()

如果大家在测试的时候还有任何疑问,可以在下方的留言区讨论,感谢大家对脚本之家的支持。

0
投稿

猜你喜欢

  • 修改 index.js 内容,写一些 ES6 的语法:const arr = [  new Promise(() => {}
  • 目录while语句if 语句for语句BreakContinuePass流程控制无非就是if else之类的控制语句,今天我们来看一下Pyt
  • 前言哈希 又称作 “散列”,它接收任何一组任意长度的输入信息,通过 哈希 算法变换成固定长度的数据指
  • 流程,通俗来讲,就是许多人,在做一系列的事情时,怎样相互协调,安排好这一系列事情的先后顺序,有什么事先的约定,需要达到怎样的预期目标。在UE
  • 背景环境:ArcGis10.2.2。C#开发程序一直以来以调用Desktop的python环境(32位)来做数据处理分析。但是数据量大时,出
  • 看到这个标题,你我可能都笑了。你会笑,因为你以为这个东西太小儿科了,还用得着做一个标题?!我会笑,是因为我确信你看完后会改变你的想法。首先我
  • 这年头,信息和获得信息的渠道越来越多。随着信息量的增大,先有了分类,又有了导航,再有了搜索,后面的发展还不得而知。在此只是根据平日的所看所想
  • 前言闲暇时间抽个空写了个三国杀武将手册的小程序,中间有个需求设计的是合成武将皮肤图、竖排的武将姓名、以及小程序码,然后提供保存图片到相册,最
  •  简单生成器有许多优点。生成器除了能够用更自然的方法表达一类问题的流程之外,还极大地改善了许多效率不足之处。在 Python 中,
  • 在设计中保持一致性(uniformity)是网页设计中一个重要的组成部分,它能使你的设计有效地传达信息而不会导致用户迷惑或焦虑。保证一致性的
  • 之前有看过一个博文写的是白社会的设计很好但运营却有些遭,因为对每一个WebGame的推出时间把握不准,会有几个应用同时上线造成影响力的冲突,
  •  前言今天,我无聊的时候做了一个搜索文章的软件,有没有更加的方便快捷不知道,好玩就行了。基于Python tkinter 制作文章
  • 网页制作中用到的特效字,你一定是用图象处理软件制作的吧!告诉你,不用图象处理软件,我也能做出漂亮的特效字来,你看,阴影字我就是这样做出来的。
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容
  • 第一章:霍夫变换检测圆① 实例演示1这个是设定半径范围 0-50 后的效果。② 实例演示2这个是设定半径范围 50-70 后的效果,因为原图
  • 本文实例讲述了PHP实现执行外部程序的方法。分享给大家供大家参考,具体如下:在一些特殊情况下,会使用PHP调用外部程序执行,比如:调用she
  • 接触python已有一段时间了,下面针对python基础知识的使用做一完整梳理:1)避免‘\n'等特殊字符的两种方式:a)利用转义字
  • 本文实例讲述了php实现的一段简单概率相关代码。分享给大家供大家参考,具体如下:<?phpfor($i=1;$i<100000;
  • 简介在SQL SERVER中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,仅仅是几个文件而已.SQL SER
  • 由于新云CMS系统,网站底部“版权信息”字段在数据库中是“文本”类型,有250个字符的限制。想在这里给加网站统计代码,因为字数限制的原因,就
手机版 网络编程 asp之家 www.aspxhome.com