编程之Python扫雷(1)

#定义下边长

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)

你可能感兴趣的:(编程之Python扫雷(1))