【问题标题】:Minesweeper game board in扫雷游戏板在
【发布时间】:2015-11-23 09:54:43
【问题描述】:

我必须创建一个为扫雷游戏创建游戏板的函数(我对编码也很陌生)。

我打算让电路板最初从每个空间都被覆盖和释放,由字符串 "C " 表示。

然后我需要将地雷分配给我的 2D 列表中的随机空间,将 "C " 的实例替换为 "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

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

【问题讨论】:

    标签: python python-3.x minesweeper


    【解决方案1】:

    首先请注意,您的图板有一个额外的列和行。 (只需使用range(rows)range(cols)

    然后随机选择“坐标”:

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

    那么自然而然:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-15
        • 2014-12-25
        • 1970-01-01
        • 2023-03-04
        • 2021-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多