python扫雷程序
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扫雷程序相关推荐
- 基友扫雷通关跟我炫耀!于是用Python自动扫雷程序十秒通关
起因是这样的,基友和我一起玩扫雷高难度,今天他来告诉我他的通关了! 各种炫耀,如下图! 于是,我用就用Python开发了个自动扫雷程序!跟他装了逼,瞬间喊我哥,要我教他 好了,不废话了!本文用于娱乐, ...
- python扫雷脚本_Python自动扫雷实现方法
本文实例讲述了Python自动扫雷实现方法.分享给大家供大家参考.具体如下: #pyWinmineCrack.py # coding: utf-8 import win32gui import win ...
- 基于概率分析的智能AI扫雷程序秒破雷界世界纪录
大家好,我是小小明,上次的我带大家玩了数独: <让程序自动玩数独游戏让你秒变骨灰级数独玩家> <Python调用C语言实现数独计算逻辑提速100倍> 今天我将带你用非常高端的姿 ...
- python购物车程序2019_Python实现购物车程序
本文实例为大家分享了程序:Python购物车程序,具体内容如下 需求: 启动程序后,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就 ...
- python 获取程序运行时间
python 获取程序运行时间 import time # 时间测试 start =time.time() # 运行程序 for i in range(100000000):pass end =tim ...
- 《Python 3程序开发指南(第2版•修订版)》——1.2 Python的关键要素
本节书摘来自异步社区<Python 3程序开发指南(第2版•修订版)>一书中的第1章,第1.2节,作者[英]Mark Summerfield,王弘博,孙传庆 译,更多章节内容可以访问云栖社 ...
- spark指定python版本_如何将正常的Python应用程序正确转换为PySpark版本
我是PySpark的初学者,最近我尝试向我的Spark集群提交一个简单的python应用程序(批量调整大小图片).我可以成功地通过pycharm运行该应用程序,并且当我将应用程序提交给spark时,图 ...
- python语言包含的错误,Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种...
Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种 答:编译错误 人体体温能自动调控在37度,其原因是( ). 答:人体内产生的热能是分批放出的 人体内有完善的 ...
- C++/Php/Python/Shell 程序按行读取文件或者控制台方法总结。
C++/Php/Python/Shell 程序按行读取文件或者控制台方法总结. 一.总结 C++/Php/Python/Shell 程序按行读取文件或者控制台(php读取标准输入:$fp = fope ...
最新文章
- 直接在sublime中运行php
- 要懂得利用和筛选友情链接
- 每天一道LeetCode-----计算二叉树的最大深度及最小深度,判断二叉树是否是高度平衡二叉树
- addView的误区
- 驱动的定义、分类、安全性
- 域外计算机访问域内共享,域外用户如何拥有让其他电脑加域或退域的权限
- 【网页】如何下载网页中mathplayer插件中的pdf文件
- Shell脚本学习指南 下载
- 解决Python包下载慢/超时的方法
- vs2019(C语言) 使用教程
- Web项目 引入Editormd
- Beyond Compare的文档比较工具的设置
- 最多能匹配出多长的相同连续子序列_论文导读 | GPU加速子图同构算法
- java流重定向如何分类,Java 文件流與標准流之間的重定向
- 插入法排序(c语言)
- 记录解决nonebot2中定时器报时区问题的错误
- 笔记本更换固态硬盘的教程
- 给定一个不多于5位的正整数,判断它是几位数,并输出。 输入
- 【转载】使用Pandas创建数据透视表
- 如何利用hosts碰撞技术遨游内网web系统