python3扫雷代码_python3 命令行 扫雷
简单练习
import numpy as np
class BoomGame:
def __init__(self, n=6, m=6):
self.n = n
self.m = m
# 保存不是地雷的格子的个数
self.all_cnt = 0
# 记录点开的格子数目,如果入all_cnt相等,则说明游戏结束
self.tmp_cnt = 0
# 随机生成炸弹数组
# 每个格子出现雷的概率
self.p = 0.1
self.boom = np.array(
[
[
1 if j < self.p else 0 for j in x
] for x in np.random.random([n, m])
]
)
self.all_cnt = n * m - np.sum(self.boom)
print('all_cnt:', self.all_cnt)
# 数字数组
self.nums = np.full([n, m], 0, dtype=np.int32)
# 显示数组
self.view = np.full([n, m], '*', dtype=np.str)
# 计算num数组
dire = [
[-1, -1],
[-1, 0],
[-1, 1],
[0, -1],
[0, 1],
[1, -1],
[1, 0],
[1, 1]
]
for i in range(n):
for j in range(m):
sum = 0
for k in range(len(dire)):
nx = i + dire[k][0]
ny = j + dire[k][1]
if n > nx >= 0 and m > ny >= 0:
sum += self.boom[nx, ny]
self.nums[i, j] = sum
print(self.boom)
print(self.nums)
print(self.view)
def show(self, mat):
s = ''
for i in range(self.n):
for j in range(self.m):
s += str(mat[i][j]) + ' '
s += '\n'
print(s)
def start(self):
self.show(self.view)
while True:
# 获取输入的坐标
x, y = map(lambda x: int(x.strip()), input("请输入点击位置:\n").strip().split(' '))
print(x, y)
if not (self.n > x >= 0 and self.m > y >= 0):
print('坐标越界')
continue
if self.boom[x, y] == 1:
# 是雷
print('gg')
self.show(self.boom)
return
elif self.view[x, y] == '*' and self.nums[x, y] > 0:
# 是比1大的数字
self.tmp_cnt += 1
self.view[x, y] = self.nums[x, y]
elif self.view[x, y] == '*' and self.nums[x, y] == 0:
# 是0,将0周围的0展开
vis = np.full([self.n, self.m], 0, dtype=np.int32)
q = []
dire = [
[0, 1], [0, -1], [1, 0], [-1, 0]
]
q.append([x, y])
vis[x, y] = 1
while len(q) > 0:
t = q.pop(0)
self.view[t[0], t[1]] = '.'
self.tmp_cnt += 1
for k in range(len(dire)):
nx = t[0] + dire[k][0]
ny = t[1] + dire[k][1]
# 如果邻接的方块在范围内,并且数字是0且未被访问
if self.n > nx >= 0 and self.m > ny >= 0 and vis[nx, ny] == 0:
if self.nums[nx, ny] == 0:
# 在拓展时,如果周围是0,则继续拓展
q.append([nx, ny])
vis[nx, ny] = 1
else:
# 如果邻接的是数字则显示数字
self.view[nx, ny] = self.nums[nx, ny]
self.show(self.view)
if self.tmp_cnt == self.all_cnt:
print('成功')
return
bg = BoomGame(2, 3)
bg.start()
python3扫雷代码_python3 命令行 扫雷相关推荐
- mysql的sqlyog学习笔记(查询部分)(代码用命令行显示 )
索引 语言 查询 基础查询 select 查询列表 from 表名; 查询函数(调用函数,获取返回值) 起别名 +的作用 distinct的使用(去重) 查看表的结构 条件查询 按关系表达式筛选 按逻 ...
- 扫雷大战(命令行版,可以连续扫除一片空白区域)
扫雷大战(含递归算法扫出空白) 扫雷的基本思路 扫雷代码实现的详细步骤 完整代码 1.game.h部分(运行游戏需要的头文件和函数的声明) 2.game.c部分(游戏引擎) 3.test.c部分(测试 ...
- android 环境配置和安装, Android系统包说明,基本控件,常用代码,ADB 命令行,APK文件确解,小技艺,...
一. 环境配置和安装(Android2.2) 参考文章:这里 1.1 JDK 1.2 SDK 下载地址:http://dl.google.com/android ...
- 【Python】Python3.7.3 - Python命令行参数详解
文章目录 Python命令行参数概览 -c cmd参数示例 -m mod参数示例 file参数示例 - 参数示例 命令行选项详解 -b 选项 -B选项 -d选项 -E选项 -h / -? / --he ...
- Python3改变cmd(命令行)输出颜色
用Python写命令行程序的时候,单一的输出颜色太单调.其实我们可以加些色彩,比如用红色表示警告,绿色表示结果正常等.这里,对Windows下CMD输出彩色进行完整的讲解和易用的代码函数库展示. 先上 ...
- linux终端使用python3,3 个 Python 命令行工具 | Linux 中国
原标题:3 个 Python 命令行工具 | Linux 中国 用 Click.Docopt 和 Fire 库写你自己的命令行应用. -- Jeff Triplett, Lacey Williams ...
- 用java代码执行命令行并获取返回结果
public class CmdUtil {public static void main(String[] args) {System.out.println(CmdUtil.exec(new St ...
- python乘号的字符代码_python 命令行参数传入 乘号(*) 时出错
环境 Mac Os X 10.9 python 2.7 实现功能 命令行传入公式,输出结果 出错原因 '*' 号把整个目录下的文件都当作参数传入了 问题 如何正确传入 * 号? 操作 输入公式 '2 ...
- python扫雷代码_室友扫雷通关来炫耀!我用Python做出自动扫雷十秒通关!
自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式. 代码已上传至GitHub: https://github.com/chestnu ...
最新文章
- thinkPHP 模板的使用技巧(十三)
- 在python中、列表中的元素可以是_在Python中存储一个列表的元素,在另一个列表中 – 通过引用?...
- 30个漂亮的大自然风格网页设计作品欣赏
- AngularJS 自定义控件
- 2021新茶饮研究报告
- Envoy 源码分析--network L4 filter manager
- oracle11g分区表维护,Oracle11g维护分区(一)AddingPartitions
- A Singular Value Decomposition Approach For Recommendation Systems
- Hibernate视频学习笔记(8)Lazy策略
- 华为USG6000V双机热备HRRP
- React 18 超全升级指南
- 数论 - 质数(素数)基础【 素数的判断 + 试除法分解质因数 + 求1-n之间的素数的三种筛法 】
- 【2019-06-27】现在不杂
- jvm gc垃圾回收情况
- 恭喜宿主获得鸿蒙,我在混沌开学院
- “~i“在C语言的for循环中是什么意思
- [kernel 启动流程] 前篇——vmlinux.lds分析
- Python基础学习_函数数def_返回值及返回值类型_函数块
- 计算机网络英语技术支持题目,计算机网络英语学论文选题 计算机网络英语论文题目选什么比较好...
- MT8665芯片处理器,MT8665模块方案开发
热门文章
- 数据库每日一题 2020.04.30
- MySQL访问行更新慢、用户线程大量堆积竟是因为它
- 升级更新:Oracle关于DB Link在2019年升级的10g版本兼容性
- 普通用户竟这样执行xp_cmdshell存储过程!
- 为了减少代码复杂度,我将if-else升级为面向状态编程
- 从源码角度详解Java的Callable接口
- 关于单元测试的那些事儿,Mockito 都能帮你解决
- 实操案例:字符串哈希表操作
- 【华为云技术分享】如何整合hive和hbase
- oracle 交叉链接,Oracle里的交叉SQL语句写法-数据库专栏,ORACLE