python字符串实现扫雷 摸鱼好帮手

python字符串实现扫雷

1、使用方法

运行代码后,每次输入一个坐标,输入格式为 【2,3】(注意:不包含【】,表示第二行第三列)
在坐标前输入‘b’,即表示标记该坐标位置,如果该坐标已经标记,则此操作可取消标记

2、展示

运行后输出如下:
在这里插入图片描述
输入2,3后回车
在这里插入图片描述
输入b1,3后
在这里插入图片描述
再次输入b1,3后
在这里插入图片描述

代码部分

import numpy as np
import time
#地图边界
L = [10,10]
#地雷数
X = 10

biaoti = ''
for i in range(L[1]):
    biaoti = biaoti +str(i+1) +'  '
save = np.zeros(L)
dilei = []
while True:
    if len(dilei) == X:
        break
    x = np.random.randint(1, L[0])
    y = np.random.randint(1, L[1])
    if [x,y] in dilei:
        continue
    else:
        dilei.append([x,y])

for i in dilei:
    save[i[0],i[1]] = -999

for i in range(L[0]):
    for j in range(L[1]):
        S = 0
        try:
            if save[i, j] == -999:
                continue
        except:
            pass
        try:
            if save[i - 1, j - 1] == -999:
                S = S + 1
        except:
            pass
        try:
            if save[i - 1, j] == -999:
                S = S + 1
        except:
            pass
        try:
            if save[i - 1, j + 1] == -999:
                S = S + 1
        except:
            pass
        try:
            if save[i, j - 1] == -999:
                S = S + 1
        except:
            pass
        try:
            if save[i, j + 1] == -999:
                S = S + 1
        except:
            pass
        try:
            if save[i + 1, j - 1] == -999:
                S = S + 1
        except:
            pass
        try:
            if save[i + 1, j] == -999:
                S = S + 1
        except:
            pass
        try:
            if save[i + 1, j + 1] == -999:
                S = S + 1
        except:
            pass
        save[i, j] = S

n = '.  '*L[1]
new = []
for i in range(L[0]):
    new.append(n)

dnew = new.copy()
for i in range(L[0]):
    for j in range(L[1]):
        if save[i,j] != -999:
            dnew[i] = dnew[i][:3 * j] + str(int(save[i, j])) + dnew[i][3 * j + 1:]

def dp(new,dcos):
    nnew = new.copy()
    for i in dcos:
        nnew[i[0]] = nnew[i[0]][:3 * i[1]] + '*' + nnew[i[0]][3 * i[1] + 1:]
    nnew.insert(0, '_'*L[1]*3)
    nnew.insert(0,biaoti)
    for i in range(len(nnew)):
        if i<=1:
            c = ' '
        else:
            c = str(i-1)
        if i-1<10:
            print(c+'  |'+nnew[i])
        else:
            print(c + ' |' + nnew[i])

def pz(save,sin):
    id = [sin,[sin[0]-1,sin[1]-1],[sin[0]-1,sin[1]],[sin[0]-1,sin[1]+1],[sin[0],sin[1]-1],[sin[0],sin[1]+1],[sin[0]+1,sin[1]-1],[sin[0]+1,sin[1]],[sin[0]+1,sin[1]+1]]
    xid = []
    for i in range(len(id)):
        if (id[i][0]<0) | (id[i][1]<0) | (id[i][0]>=L[0]) | (id[i][1]>=L[1]):
            pass
        else:
            xid.append(id[i])
    id0 = []
    for i in xid[1:]:
        if save[i[0],i[1]] == 0:
            id0.append(i)

    for i in xid:
        a[i[0],i[1]] = -1
    return a,xid,id0
dcos = []
statime = time.time()
while True:
    try:
        if new == dnew:
            print('success !')
            print('time: '+str(round(time.time()-statime,2))+' s')
            break
        dp(new,dcos)
        cos = input('\n输入控制坐标:')
        if cos[0] == 'b':
            cos = eval('[' + cos[1:] + ']')
            cos = [cos[0] - 1, cos[1] - 1]
            if cos in dcos:
                dcos.remove(cos)
            else:
                dcos.append(cos)
            continue
        else:
            sin = eval('['+cos+']')
            sin = [sin[0]-1,sin[1]-1]
    
        if save[sin[0],sin[1]] == -999:
            print('bigbong ! ! ! ')
            break
    
        elif save[sin[0],sin[1]] == 0:
            id00 = [sin]
            xidd = []
            a = save.copy()
            while True:
                if len(id00)==0:
                    break
                a,xid,id0 = pz(a,id00[0])
                xidd = xidd + xid
                id00 = id00 + id0
                del id00[0]
            xidd = [i for n , i in enumerate(xidd) if i not in xidd[:n]]
            for i in xidd:
                new[i[0]] = new[i[0]][:3 * i[1]] + str(int(save[i[0], i[1]])) + new[i[0]][3 * i[1] + 1:]
        else:
            new[sin[0]] = new[sin[0]][:3*sin[1]]+str(int(save[sin[0],sin[1]]))+new[sin[0]][3*sin[1]+1:]
    except:
        pass
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值