Python Minesweeper值索引

时间:2017-03-14 07:04:12

标签: python python-2.7

我有一个程序可以生成“扫雷板”值列表。列表中的每个项目现在都是字符串“0”或“BOMB”。

我一直在努力提高程序效率,抽象和分解,递归等等。显然我可以挂入 for 循环并从那里移动(我已经完成了lol) ,但我希望这能够在(半)大规模工作。

我如何能够有效地计算给定列表中单元格中的炸弹数量?

class Sweeper:
    '''
    Sweeper(xin, yin) : xin = far right x int, yin = bottom y int
    0 
     |
    y|_____ 
      0   x 
    '''

    def __init__(self, xin, yin):
        '''generates values, number of mines and starts gears'''
        self.values = list("0" * xin * yin)
        #self.mines =  int(yin * xin ** 1.11 - yin * xin)
        self.genmines(self.mines)#Start Generation

    def genmines(self, amt):
        '''Generates Mines'''
        for ite in range(amt):
            self.values[random.randint(0, len(self.values) - 1)] = 'BOMB' 
    def getvalues(self):
        ######
Sweeper(9, 9).getvalues()

将输出:

['0', '0', '0', '0', 'BOMB', '0', '0', '0', '0', '0', '0', 'BOMB', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'BOMB', '0', 'BOMB', '0', '0', '0', '0', '0', '0', 'BOMB', '0', 'BOMB', '0', 'BOMB', '0', 'BOMB', '0', '0', '0', 'BOMB', '0', '0', 'BOMB', '0', '0', '0', 'BOMB', 'BOMB', 'BOMB', '0', 'BOMB', '0', '0', 'BOMB', '0', '0', '0', '0', '0', '0', '0', '0', 'BOMB', '0', '0', '0', '0', 'BOMB', '0', '0', '0', 'BOMB', 'BOMB', '0', '0', 'BOMB', '0', '0']

我有一些方程式的想法使用似乎有用的(x)变量,但我不知道如何有效地实现它们。如果在评论中提示,将详细阐述它们,因为我觉得他们只会堵塞帖子。谢谢!

2 个答案:

答案 0 :(得分:0)

<iframe src="http://players.brightcove.net/4338955589001/Bkh63tBcx_default/index.html?videoId=5347595845001" width="320" height="240" allowfullscreen></iframe>

这将为您创建一个地图。 您可以使用

访问地图索引
from random import randint
minelist = []
cols = 20
rows = 20
chanceofbomb = 10
for x in range(cols):
    xlist = []
    for y in range(rows):
        isBomb = randint(0,chanceofbomb)
        if isBomb == 0:
            xlist.append("Bomb!")
        else:
            xlist.append('0')
    minelist.append(xlist)

实施例

minelist[requiredx][requiredy]

答案 1 :(得分:0)

def findValue(x, y):
    valueOfSpot = 0
    for xa in range(cols):
        for ya in range(rows):
            if abs(minelist[xa] - (x*10)) < 2 and abs(minelist[ya] - (y*10)) < 2:
                valueOfSpot += 1
    minelist[x][y] = valueOfSpot

这可能会使过程更快。

for xb in range(cols):
    for yb in range(rows):
        findValue(xb, yb)