用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
思路提示:
  1. 概率可以用random模块。不熟悉random用法可 当然这里只用到最简单的,random.random()
import random
random.random会出现0-1之间的随机一个数
如果此数大于p,则不是地雷,小于p则是地雷。
random.random()
0.456191592839295
  1. 要考虑到边界处的情况。所以这里可以建立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]]
经验分享 程序员 微信小程序 职场和发展