import os
import random
# 0-9表示周围零的数量并且可以展示
# -1表示雷
# -2表示不可以展示class Map:line = 0column = 0mines = 0relieve = 0find = 0traps = []map = []outside = []def __init__(self,line=8,column=8,mines=10):self.line=lineself.column=columnself.mines=minesself.relieve=0self.find=0self.traps=[]self.map=[]self.outside=[]for i in range(0,24):self.map.append([0 for j in range(0,24)])self.outside.append([0 for j in range(0,24)])self.trapsDown(self.mines)for i in range(0,len(self.map)):for j in range(0,len(self.map[i])):self.outside[i][j]=-2def randomPoint(self):while True:trap = (random.randint(0, self.line-1), random.randint(0, self.column-1))if trap not in self.traps:return trapdef diffusion(self,trap,default=1):self.map[trap[0]][trap[1]] = -1try:if self.map[trap[0] + 1][trap[1]] != -1:self.map[trap[0] + 1][trap[1]] += defaultexcept:passtry:if self.map[trap[0] - 1][trap[1]] != -1:self.map[trap[0] - 1][trap[1]] += defaultexcept:passtry:if self.map[trap[0]][trap[1] + 1] != -1:self.map[trap[0]][trap[1] + 1] += defaultexcept:passtry:if self.map[trap[0]][trap[1] - 1] != -1:self.map[trap[0]][trap[1] - 1] += defaultexcept:passtry:if self.map[trap[0] + 1][trap[1] + 1] != -1:self.map[trap[0] + 1][trap[1] + 1] += defaultexcept:passtry:if self.map[trap[0] - 1][trap[1] + 1] != -1:self.map[trap[0] - 1][trap[1] + 1] += defaultexcept:passtry:if self.map[trap[0] - 1][trap[1] - 1] != -1:self.map[trap[0] - 1][trap[1] - 1] += defaultexcept:passtry:if self.map[trap[0] + 1][trap[1] - 1] != -1:self.map[trap[0] + 1][trap[1] - 1] += defaultexcept:passdef trapsDown(self,mines):for i in range(0,mines):trap = self.randomPoint()self.traps.append(trap)self.diffusion(trap)def show(self,map):os.system("cls")print("  ",end="")for i in range(0,self.line):print(" %2d "%(i+1),end="")print()print("  ",end="")for i in range(0,self.line):print("+---",end="")print("+")for i in range(0,self.line):print("%2d|"%(i+1),end="")for j in range(0,self.column):if map[i][j]==-2:print("   ",end="|")elif map[i][j]==-1:print(" * ",end="|")else:print("%2d"%(map[i][j]),end=" |")print()print("  |",end="")for i in range(0, self.line):print("---", end="+")print()print(" relieve:%3d,mines:%3d,last:%3d"%(self.relieve,self.mines-self.find,self.mines-self.find))def unfold(self,i,j):if i < 0 or i >= self.line or j < 0 or j >= self.column or self.outside[i][j]!=-2:returnif self.map[i][j]>0:self.outside[i][j]=self.map[i][j]self.relieve+=1elif self.map[i][j]<0:returnelse:self.outside[i][j] = self.map[i][j]self.relieve+=1self.unfold(i, j+1)self.unfold(i+1, j)self.unfold(i-1, j)self.unfold(i, j-1)self.unfold(i+1, j+1)self.unfold(i+1, j-1)self.unfold(i-1, j+1)self.unfold(i-1, j-1)def round(self,trap,default=1):self.map[trap[0]][trap[1]] = 0try:if self.map[trap[0] + 1][trap[1]] == -1:self.map[trap[0]][trap[1]] += defaultexcept:passtry:if self.map[trap[0] - 1][trap[1]] != -1:self.map[trap[0]][trap[1]] += defaultexcept:passtry:if self.map[trap[0]][trap[1] + 1] != -1:self.map[trap[0]][trap[1]] += defaultexcept:passtry:if self.map[trap[0]][trap[1] - 1] != -1:self.map[trap[0]][trap[1]] += defaultexcept:passtry:if self.map[trap[0] + 1][trap[1] + 1] != -1:self.map[trap[0]][trap[1]] += defaultexcept:passtry:if self.map[trap[0] - 1][trap[1] + 1] != -1:self.map[trap[0]][trap[1]] += defaultexcept:passtry:if self.map[trap[0] - 1][trap[1] - 1] != -1:self.map[trap[0]][trap[1]] += defaultexcept:passtry:if self.map[trap[0] + 1][trap[1] - 1] != -1:self.map[trap[0]][trap[1]] += defaultexcept:passdef game(self):firstClick = Truewhile True:try:self.show(self.outside)print("1. click")print("2. flag")print("3. exit")dos = input("Please enter your move:")if dos == "3":breakif dos.split(" ")[0] not in ["1","2"]:continue# print(dos.split(" "))if int(dos.split(" ")[0]) == 2:if self.outside[int(dos.split(" ")[1]) - 1][int(dos.split(" ")[2]) - 1]>=0:print("flag is not allowed")elif self.outside[int(dos.split(" ")[1]) - 1][int(dos.split(" ")[2]) - 1] == -1:self.find-=1self.outside[int(dos.split(" ")[1]) - 1][int(dos.split(" ")[2]) - 1] = -2else:self.find+=1self.outside[int(dos.split(" ")[1]) - 1][int(dos.split(" ")[2]) - 1] = -1else:# firstClick = Falseif self.map[int(dos.split(" ")[1]) - 1][int(dos.split(" ")[2]) - 1] == -1:if firstClick:trap = self.randomPoint()self.traps.append(trap)self.diffusion(trap)trap = (int(dos.split(" ")[1]) - 1,int(dos.split(" ")[2]) - 1)self.diffusion(trap,-1)self.traps.remove(trap)self.round(trap)self.show(self.map)os.system("color 4")print("u lose")input("Enter and go")breakelse:self.unfold(int(dos.split(" ")[1]) - 1, int(dos.split(" ")[2]) - 1)if self.relieve + self.mines == self.line*self.column:print("\t*******************")print("\t*  Wonderful try  *")print("\t*******************")input("Enter for go on")firstClick = False# input("Enter and go")# input("Enter and go")except:passdef mode(self):while True:os.system("cls")os.system("color 7")print("Welcome to Minesweeper")print("Please choose your difficulty:")print("  1: Beginner 8 x 8 grid with 10 mines")print("  2: Intermediate 16 x 16 grid with 40 mines")print("  3: Expert 24 x 24 grid with 99 mines")print("  0. Exit")choice = input("input>")if choice=="1":self.__init__(8,8,10)elif choice=="2":self.__init__(16,16,40)elif choice=="3":self.__init__(24,24,99)elif choice=="0":exit(0)self.game()
map=Map()
map.mode()

python扫雷程序相关推荐

  1. 基友扫雷通关跟我炫耀!于是用Python自动扫雷程序十秒通关

    起因是这样的,基友和我一起玩扫雷高难度,今天他来告诉我他的通关了! 各种炫耀,如下图! 于是,我用就用Python开发了个自动扫雷程序!跟他装了逼,瞬间喊我哥,要我教他 好了,不废话了!本文用于娱乐, ...

  2. python扫雷脚本_Python自动扫雷实现方法

    本文实例讲述了Python自动扫雷实现方法.分享给大家供大家参考.具体如下: #pyWinmineCrack.py # coding: utf-8 import win32gui import win ...

  3. 基于概率分析的智能AI扫雷程序秒破雷界世界纪录

    大家好,我是小小明,上次的我带大家玩了数独: <让程序自动玩数独游戏让你秒变骨灰级数独玩家> <Python调用C语言实现数独计算逻辑提速100倍> 今天我将带你用非常高端的姿 ...

  4. python购物车程序2019_Python实现购物车程序

    本文实例为大家分享了程序:Python购物车程序,具体内容如下 需求: 启动程序后,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就 ...

  5. python 获取程序运行时间

    python 获取程序运行时间 import time # 时间测试 start =time.time() # 运行程序 for i in range(100000000):pass end =tim ...

  6. 《Python 3程序开发指南(第2版•修订版)》——1.2 Python的关键要素

    本节书摘来自异步社区<Python 3程序开发指南(第2版•修订版)>一书中的第1章,第1.2节,作者[英]Mark Summerfield,王弘博,孙传庆 译,更多章节内容可以访问云栖社 ...

  7. spark指定python版本_如何将正常的Python应用程序正确转换为PySpark版本

    我是PySpark的初学者,最近我尝试向我的Spark集群提交一个简单的python应用程序(批量调整大小图片).我可以成功地通过pycharm运行该应用程序,并且当我将应用程序提交给spark时,图 ...

  8. python语言包含的错误,Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种...

    Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种 答:编译错误 人体体温能自动调控在37度,其原因是( ). 答:人体内产生的热能是分批放出的 人体内有完善的 ...

  9. C++/Php/Python/Shell 程序按行读取文件或者控制台方法总结。

    C++/Php/Python/Shell 程序按行读取文件或者控制台方法总结. 一.总结 C++/Php/Python/Shell 程序按行读取文件或者控制台(php读取标准输入:$fp = fope ...

最新文章

  1. 直接在sublime中运行php
  2. 要懂得利用和筛选友情链接
  3. 每天一道LeetCode-----计算二叉树的最大深度及最小深度,判断二叉树是否是高度平衡二叉树
  4. addView的误区
  5. 驱动的定义、分类、安全性
  6. 域外计算机访问域内共享,域外用户如何拥有让其他电脑加域或退域的权限
  7. 【网页】如何下载网页中mathplayer插件中的pdf文件
  8. Shell脚本学习指南 下载
  9. 解决Python包下载慢/超时的方法
  10. vs2019(C语言) 使用教程
  11. Web项目 引入Editormd
  12. Beyond Compare的文档比较工具的设置
  13. 最多能匹配出多长的相同连续子序列_论文导读 | GPU加速子图同构算法
  14. java流重定向如何分类,Java 文件流與標准流之間的重定向
  15. 插入法排序(c语言)
  16. 记录解决nonebot2中定时器报时区问题的错误
  17. 笔记本更换固态硬盘的教程
  18. 给定一个不多于5位的正整数,判断它是几位数,并输出。 输入
  19. 【转载】使用Pandas创建数据透视表
  20. 如何利用hosts碰撞技术遨游内网web系统

热门文章

  1. 强烈推荐邱锡鹏人工智能书籍《神经网络与深度学习》
  2. 魔兽争霸中的恶搞笑话集
  3. S4HANA For ABAP(6):ABAP Channels
  4. 激光雷达点云--点云栅格化(二)
  5. VS Code报错:应为表达式 ts1109
  6. Mac Navicat Premium 12.1 已破解软件下载
  7. GhostParty
  8. 【转】SAP物料主档关键栏位
  9. linux ipv6邻居信息,IPv6邻居发现协议基本原理
  10. 微信小程序获取当前经纬度