编程之Python扫雷(1)
2018-12-30 本文已影响25人
东方支柱
#定义下边长
ps=10
#初始化二维列表,多加2格作为边界
#防止浅拷贝问题
#minemap=[[0]*(ps+2)]*(ps+2)
# error! need deep copy
minemap=[[0 for _ in range(ps+2)] for _ in range(ps+2)]
#初始化雷,使用random.shuffle,简单快捷!
def m(maps,mine_num=int(ps*1.2)):
import random
mines=[]
ii=list(range(ps*ps))
random.shuffle(ii)
for i in range(mine_num):
j=ii[i]
r,c=j//ps+1,j%ps+1
maps[r][c]=-1
mines.append((r,c))
#计算雷边的数字,用数据标识雷的周边,简化编程
ar=((-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1))
for r,c in mines:
for a in ar:
if maps[r+a[0]][c+a[1]]!=-1:
maps[r+a[0]][c+a[1]]+=1
m(minemap)