由键盘输入 n 代表 n * n 的棋盘,然后再由键盘输入 m 代表雷的个数,接下来的 m 行,每行两个参数,并且用空格分隔开,代表雷的位置。
对于每个不是雷的方块,对其赋值为周围3*3范围内的雷数目,对于雷单位,其值赋值为9,输出最终转化
的矩阵。
对于上述得到的扫雷棋盘,实现以下操作,用随机数模块生成 t 个随机点数( xy )0< x <= n ,0< y <= n ),对于这些点数带入扫雷棋盘中进行计算,判断是否踩雷,如果踩到雷,输出 error 并且输出踩到雷时的步数以及位置,如
果没有,输出success
#随机生产num步不同位置
def make_list(num,l):
i=0
while i!=num:
random.seed()
x=random.randint(0,n-1)
y=random.randint(0,n-1)
flag=True
for j in l:
if j==[x,y]:
flag=False
break
if flag:
i+=1
l.append([x,y])
print('请输入正方形棋盘大小:')
n=int(input())
print('雷的个数:')
m=int(input())
#初始化棋盘
dd= [[1]*n for _ in range(n)]
#手动输入雷的位置
# print('输入雷的位置:')
# for i in range(m):
# l=input().split(' ')
# dd[int(l[0])][int(l[1])]=9
#随机产生m个雷的位置
l=[]
make_list(m, l)
for i in l:
dd[i[0]][i[1]]=9
#统计不是雷的位置的数值
for i in range(n):
for j in range(n):
count=0
if dd[i][j]==9:
continue
for k in range(i-1,i+2):
if k<0 or k>n-1:
continue
for s in range(j-1,j+2):
if s<0 or s>n-1:
continue
if dd[k][s]==9:
count+=1
dd[i][j]=count
print(np.array(dd))
#产生随机走棋的步骤,最多n*n-m步,每步不能相同
t=n*n-m
foot=[]
make_list(t, foot)
print(foot)
#按照步骤下棋
for i in range(len(foot)):
flag=True
if dd[foot[i][0]][foot[i][1]]==9:
print('error',f"{i+1}步",f"位置{[foot[i][0],foot[i][1]]}")
flag=False
break
if flag:
print('success')
一步一步做呗,让你干什么你就干什么,这哪需要思路啊
1.既然是n*n的棋盘,你好歹有个nxn的矩阵吧,lst=[[0 for x in range(n)] for x in range(n)]
2.读入雷的坐标,就把对应坐标值修改为9
3.循环,判断如果值是9,就把周围所有不是9的点+1,循环完毕输出矩阵
4.随机,判断坐标是不是9,是就输出error,这里需要有个变量设置成0,如果踩雷把它变成1,如果变量最后还是0,输出success
实现步骤和代码如下:
import random
def generate_mine_board(n, m, mines):
board = [[0 for _ in range(n)] for _ in range(n)] # 创建n*n的矩阵
for x, y in mines:
board[x-1][y-1] = 9 # 将雷的位置赋值为9
for i in range(x-1, x+2): # 循环遍历周围3*3范围
for j in range(y-1, y+2):
if 0 <= i < n and 0 <= j < n and board[i][j] != 9: # 如果不是雷
board[i][j] += 1 # 雷数目+1
return board
def check_mine(board, x, y):
if board[x-1][y-1] == 9: # 判断是否踩雷
return "error"
else:
return "success"
n = int(input())
m = int(input())
mines = [tuple(map(int, input().split())) for _ in range(m)]
board = generate_mine_board(n, m, mines)
for _ in range(t):
x, y = random.randint(1, n), random.randint(1, n)
result = check_mine(board, x, y)
if result == "error":
print("error")
print("Steps: ", _+1)
print("Position: ", x, y)
break
else:
print("success")