-1

これらの関数を以下に示します。マトリックス内の特定の場所に文字「b」を配置しています。(私はマインスイーパを作成しています。これらの "b" は、マトリックス内で爆弾が配置されている場所を表します)。関数に 'z' 爆弾を配置する必要がありますが、爆弾が配置される場所は複数回発生することはありません。それらを関数内に配置する方法は知っていますが、それらが繰り返されているかどうかを見つけることはわかりません

from random import*

mat1 = []
mat2 = []
def makemat(x):
    for y in range(x):
        list1 = []
        list2 = []
        for z in range(x):
            list1.append(0)
            list2.append("-")
        mat1.append(list1)
        mat2.append(list2)
makemat(2)

def printmat(mat):
    for a in range(len(mat)):
        for b in range(len(mat)):
            print(str(mat[a][b]) + "\t",end="")  
        print("\t")

def addmines(z):
    for a in range(z):
        x = randrange(0,len(mat1))
        y = randrange(0,len(mat1))   
        mat1[y][x] = "b"            
addmines(4)                         

ありがとう

4

2 に答える 2

1

質問の意味がわからないかもしれませんが、「b」が既に存在するかどうかを確認してみませんか?

def addmines(z):
for a in range(z):
    x = randrange(0,len(mat1))
    y = randrange(0,len(mat1))
    if mat1[y][x] == "b":
        addmines(1)
    else:
        mat1[y][x] = "b"
addmines(4)
于 2012-11-15T03:14:55.810 に答える
0

あなたがやろうとしているのは、交換せずにサンプルを採取することです。使ってみてくださいrandom.sample

import random

...

def addmines(countMines):
    countRows = len(mat1)
    countCols = len(mat1[0])
    countCells = countRows * countCols

    indices = random.sample(range(countCells), countMines)

    rowColIndices = [(i // countRows, i % countRows) for i in indices]

    for rowIndex, colIndex in rowColIndices:
        mat1[rowIndex][colIndex] = 'b'
于 2012-11-15T03:30:04.090 に答える