用Python实现最简单的扫雷小游戏——思路+代码
题目描述
编写一个拥有三个参数(m, n, p) 的程序:并生成一个m行n列的布尔类型数组,依据概率p填入“地雷”。在扫雷游戏中,已被占有的一格为“地雷”,未被占有的 一格为“安全”格。用星号“*”表示“地雷”,用半角句号“.”表示“安全” 格,打印出此数组。然后,使用邻近(上、下、左、右及对角线)地雷的数量来 替换安全格的句号并打印结果。
代码:
import random def minesweeper(m,n,p): # m行 n列 p为概率 matrix = [[0 for col in range(n+2)] for row in range(m+2)] for row in range(1,m+1): for col in range(1,n+1): ran = random.random() if ran>p: matrix[row][col] = 0 # 如果ran大于p,说明不是地雷。因为这里的p表示的是地雷的概率。 else: matrix[row][col] = "*" for row in range(1,m+1): for col in range(1,n+1): if matrix[row][col] == "*": #如果这个地方是地雷,就在它周围一圈里的非地雷方格都加1 for i in range(row-1,row+1+1): for j in range(col-1,col+1+1): if matrix[i][j] != "*": #只有在该方格不是地雷的时候才会+1 matrix[i][j] += 1 # 打印 for i in range(1, m+1): for j in range(1, n+1): print("*",end = " ") if matrix[i][j] == "*" else print(".",end = " ") print() print() for i in range(1, m+1): for j in range(1, n+1): print(matrix[i][j],end = " ") print()
测试:
minesweeper(4,6,0.4) # 4行6列,每个格子为地雷的概率为0.4
. . . . * * . * . . * * . . . * * * . . . * * . 1 1 1 2 * * 1 * 2 4 * * 1 1 3 * * * 0 0 2 * * 3
思路提示:
- 概率可以用random模块。不熟悉random用法可 当然这里只用到最简单的,random.random()
import random random.random会出现0-1之间的随机一个数 如果此数大于p,则不是地雷,小于p则是地雷。 random.random()
0.456191592839295
- 要考虑到边界处的情况。所以这里可以建立n+2行,n+2列。
#3行4列时使用5行6列。 [[0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 0], [0, 1, 1, 1, 1, 0], [0, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0]]
下一篇:
设计模式_1_单例模式_饿汉懒汉