扫雷游戏板

时间:2015-11-23 01:39:30

标签: python python-3.x minesweeper

我必须创建一个为扫雷创建游戏板的功能(我对编码也很新)。

我打算让董事会最初从覆盖的每个空间开始,并且我的免费,由字符串"C "表示。

然后我需要将地雷分配到我的2D列表中的随机空间,将"C*"的实例替换为# create board function def createBoard (rows, cols, mines): board = [] #set the range to the number of rows and columns provided +1 #for every row, create a row and a column for r in range (0,rows+1): board.append([]) for c in range (0,cols+1): board[r].append("C ") #set # of mines to 0 num_mines=0 while num_mines < mines : x = random.choice(board) y = random.choice(x) if y == "C ": x[y]= "C*" num_mines = num_mines+1

SML

我的问题是我不知道如何实际替换字符串。

2 个答案:

答案 0 :(得分:0)

当您选择随机项时,最终会引用它。由于您正在获取字符串,因此您可以引用字符串。当你想改变它时......你不能这样做,因为字符串是不可变的。不是获取对字符串的引用,而是在list中获取对其位置的引用。然后,您可以替换该元素。

x = random.choice(board)
y = random.randint(0, len(x)-1)
if x[y] == "C ":
    x[y] = "C*"

不使用random.choice,而是使用random.randint在两个参数之间选择一个随机整数(包括,所以我们必须从该子列表的长度中减去1)。它被用作该子列表的索引,以便我们可以更改相应的元素。

答案 1 :(得分:0)

首先注意你的电路板有一个额外的列和行。 (只需使用range(rows)range(cols)

然后随机选择&#39;坐标&#39;:

    x = random.randrange(rows)
    y = random.randrange(cols)

然后很自然:

    if board[x][y] == "C ":
        board[x][y] = "C*"