快捷搜索: 王者荣耀 脱发

Python 扫雷游戏 完整源代码+图片素材

  1. 设计需求

基础功能 实现windows扫雷游戏初级的所有功能 扫雷尺寸99 方格 每个方格尺寸3030 游戏初始化时,随机分布10个地雷 当左键点击雷区任意方格时,则游戏开始 鼠标左键点击为翻开方格,为雷则游戏失败,非雷则显示其周围一圈地雷的数量(0-8) 鼠标右键单击标记为旗帜,此时左键单击无效。 鼠标右键再次单击标记为旗帜的方格,则标记转为问号,表明疑问,此时左键单击有效。 第一步 默认不能踩雷 (如果是雷,强制重新随机分布直至为非雷)

点开一片区域 当左键点击方格时,如果为非雷且其周围一圈的地雷数量为0,则自动翻开其周围一圈的方格,再检测是否还存在数量为0的方格,如有则继续翻开其周围一圈方格,直至没有数量为0的方格为止。(视觉效果上相当于点开一片区域)

当鼠标左键和右键同时单击一块方格时: 1) 未翻开方格点击无效 2) 已翻开方格,获取方格的数字(1-8),然后检测其周围8个方格中 剩余未翻开方格 == 当前方格数字,则自动标记为旗帜 剩余未翻开方格 > 当前方格数字,无动作 剩余未翻开方格中已标记旗帜数量 == 当前方格数字,则自动翻开其它剩余未翻开方格,如果有雷则游戏失败 剩余未翻开方格中已标记旗帜数量 != 当前方格数字,无动作

其它功能 计时器:方格第一步左键翻开之后即开始计时,直至游戏结束(成功或失败) 雷数:每标记一个旗帜则雷数减1,雷数允许为负值 游戏状态:游戏开始为normal脸,游戏成功为smile脸,游戏失败为cry脸。任意时刻点击任意状态的脸都将重置游戏

游戏失败判定:左键翻开方格为雷或者左键右键同时点击自动翻开未翻开方格时有雷则判定游戏失败 游戏成功判定:正确使用旗帜标记出所有地雷,且雷数显示为0(即没有多标旗帜)

  1. 主要功能模块实现思路

1) 如何检测鼠标左键和右键同时按下 设置鼠标每个键(左键,右键,滚轮)的状态位,检测其按下和松开两个状态 当鼠标左键按下且未松开时,检测到右键按下时,则认为两键同时按下 反之同理

2)随机雷分布 通过列表生成式生成二维数组,表示地雷分布的row和line值。 随机生成的二维数组可能存在重复值,所以需要先将列表转换为tuple,再通过set去重 去重后数组可能小于10,所以为简化操作,一开始生成12组数值,如果去重后小于10则重复生成直到生成的去重数组大于10为止。 实际只取前10组数据。 参考代码如下:

#生成大于10个不重复的二维数组,如果数组长度小于10则再次生成直到数组长度大于10为止
num = 0
while num <10:
	random_number_0 = [[random.randint(0,8) for i in range(2)] for j in range(12)]
	#将列表转换为tuple,再通过set去重复数据
	random_number = list(set([tuple(t) for t in random_number_0]))
	num = len(random_number)

3)点开一片区域 利用 递归函数 先获取周围方格的坐标,然后计算周围方格的地雷数量,不为0则显示相应的数字,为0的话,则调用递归函数,继续计算。直至没有数量为0的方格为止

4)左右键同时按下的操作

未翻开方格点击无效 已翻开方格,获取方格的数字(1-8),然后检测其周围8个方格中

    剩余未翻开方格 == 当前方格数字,则自动标记为旗帜 剩余未翻开方格 > 当前方格数字,无动作 剩余未翻开方格中已标记旗帜数量 == 当前方格数字,则自动翻开其它剩余未翻开方格,如果有雷则游戏失败 剩余未翻开方格中已标记旗帜数量 != 当前方格数字,无动作

5)第一步就是雷的情况 如果第一次左键单击的方格就是雷,则强制重新执行随机雷分布,并不断检测点击的方格是否仍有地雷,如果还是有雷,则反复执行,直到该点击方格无雷为止

经验分享 程序员 微信小程序 职场和发展