简单练习

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 命令行 扫雷相关推荐

  1. mysql的sqlyog学习笔记(查询部分)(代码用命令行显示 )

    索引 语言 查询 基础查询 select 查询列表 from 表名; 查询函数(调用函数,获取返回值) 起别名 +的作用 distinct的使用(去重) 查看表的结构 条件查询 按关系表达式筛选 按逻 ...

  2. 扫雷大战(命令行版,可以连续扫除一片空白区域)

    扫雷大战(含递归算法扫出空白) 扫雷的基本思路 扫雷代码实现的详细步骤 完整代码 1.game.h部分(运行游戏需要的头文件和函数的声明) 2.game.c部分(游戏引擎) 3.test.c部分(测试 ...

  3. android 环境配置和安装, Android系统包说明,基本控件,常用代码,ADB 命令行,APK文件确解,小技艺,...

    一.             环境配置和安装(Android2.2) 参考文章:这里 1.1     JDK 1.2     SDK 下载地址:http://dl.google.com/android ...

  4. 【Python】Python3.7.3 - Python命令行参数详解

    文章目录 Python命令行参数概览 -c cmd参数示例 -m mod参数示例 file参数示例 - 参数示例 命令行选项详解 -b 选项 -B选项 -d选项 -E选项 -h / -? / --he ...

  5. Python3改变cmd(命令行)输出颜色

    用Python写命令行程序的时候,单一的输出颜色太单调.其实我们可以加些色彩,比如用红色表示警告,绿色表示结果正常等.这里,对Windows下CMD输出彩色进行完整的讲解和易用的代码函数库展示. 先上 ...

  6. linux终端使用python3,3 个 Python 命令行工具 | Linux 中国

    原标题:3 个 Python 命令行工具 | Linux 中国 用 Click.Docopt 和 Fire 库写你自己的命令行应用. -- Jeff Triplett, Lacey Williams ...

  7. 用java代码执行命令行并获取返回结果

    public class CmdUtil {public static void main(String[] args) {System.out.println(CmdUtil.exec(new St ...

  8. python乘号的字符代码_python 命令行参数传入 乘号(*) 时出错

    环境 Mac Os X 10.9 python 2.7 实现功能 命令行传入公式,输出结果 出错原因 '*' 号把整个目录下的文件都当作参数传入了 问题 如何正确传入 * 号? 操作 输入公式 '2 ...

  9. python扫雷代码_室友扫雷通关来炫耀!我用Python做出自动扫雷十秒通关!

    自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式. 代码已上传至GitHub: https://github.com/chestnu ...

最新文章

  1. thinkPHP 模板的使用技巧(十三)
  2. 在python中、列表中的元素可以是_在Python中存储一个列表的元素,在另一个列表中 – 通过引用?...
  3. 30个漂亮的大自然风格网页设计作品欣赏
  4. AngularJS 自定义控件
  5. 2021新茶饮研究报告
  6. Envoy 源码分析--network L4 filter manager
  7. oracle11g分区表维护,Oracle11g维护分区(一)AddingPartitions
  8. A Singular Value Decomposition Approach For Recommendation Systems
  9. Hibernate视频学习笔记(8)Lazy策略
  10. 华为USG6000V双机热备HRRP
  11. React 18 超全升级指南
  12. 数论 - 质数(素数)基础【 素数的判断 + 试除法分解质因数 + 求1-n之间的素数的三种筛法 】
  13. 【2019-06-27】现在不杂
  14. jvm gc垃圾回收情况
  15. 恭喜宿主获得鸿蒙,我在混沌开学院
  16. “~i“在C语言的for循环中是什么意思
  17. [kernel 启动流程] 前篇——vmlinux.lds分析
  18. Python基础学习_函数数def_返回值及返回值类型_函数块
  19. 计算机网络英语技术支持题目,计算机网络英语学论文选题 计算机网络英语论文题目选什么比较好...
  20. MT8665芯片处理器,MT8665模块方案开发

热门文章

  1. 数据库每日一题 2020.04.30
  2. MySQL访问行更新慢、用户线程大量堆积竟是因为它
  3. 升级更新:Oracle关于DB Link在2019年升级的10g版本兼容性
  4. 普通用户竟这样执行xp_cmdshell存储过程!
  5. 为了减少代码复杂度,我将if-else升级为面向状态编程
  6. 从源码角度详解Java的Callable接口
  7. 关于单元测试的那些事儿,Mockito 都能帮你解决
  8. 实操案例:字符串哈希表操作
  9. 【华为云技术分享】如何整合hive和hbase
  10. oracle 交叉链接,Oracle里的交叉SQL语句写法-数据库专栏,ORACLE