首页 > 解决方案 > 在数组中创建一组随机数字,而同一数字连续重复三次

问题描述

嗨,所以我基本上必须创建一个像 candy crush saga 这样的游戏,并且我创建了一个二维数组来开始,我能够根据我的数组的索引创建带有相应图片的游戏板。但是,我必须确保一开始我不能连续拥有 3 张相同的图片或糖果或其他任何东西。要首先创建数组,我使用了:

board = [[random.randint(1,6) for i in range(7)] for j in range(9)]

创建一个 9x7 板,基本上 1-6 中的每个数字都对应于一张特定的图片,但我不知道如何迭代并检查是否有三个相同的数字连续。有任何想法吗?谢谢

标签: python-3.x

解决方案


此解决方案不会赢得选美比赛,但它会一次性生成棋盘,与生成整个棋盘并在它们上运行计数相比,它应该提供显着的性能优势,直到您设法获得幸运棋盘(大约有 10% 的机会随机板将有效)。

def generate_board(rows=9, cols=7):
    board = []

    for i in range(rows):
        board.append([0] * cols)

        for j in range(cols):
            while not board[i][j]:
                c = random.randint(1, 6)

                if (i < 2 or board[i-2][j] != c or board[i-1][j] != c) and \
                   (j < 2 or board[i][j-2] != c or board[i][j-1] != c):
                    board[i][j] = c

    return board

一些示例输出板:

[6, 1, 3, 3, 2, 5, 5] [3, 5, 6, 5, 2, 1, 1] [2, 2, 1, 5, 4, 6, 6] [4, 1, 1, 5, 2, 6, 2]
[4, 2, 5, 5, 3, 5, 3] [4, 2, 2, 1, 4, 3, 1] [5, 3, 6, 2, 3, 4, 5] [1, 3, 6, 1, 2, 4, 2]
[5, 2, 6, 5, 1, 4, 6] [2, 4, 1, 4, 3, 3, 6] [4, 1, 4, 1, 4, 1, 3] [4, 3, 4, 3, 1, 6, 3]
[5, 6, 2, 6, 3, 6, 6] [4, 5, 5, 3, 4, 5, 5] [5, 5, 3, 3, 1, 6, 3] [2, 4, 1, 5, 5, 1, 5]
[2, 1, 4, 2, 4, 3, 5] [4, 6, 5, 1, 5, 3, 4] [1, 3, 2, 3, 6, 2, 4] [4, 6, 4, 3, 6, 4, 2]
[1, 3, 4, 1, 6, 3, 1] [6, 2, 1, 5, 1, 2, 1] [6, 3, 3, 2, 4, 6, 6] [2, 3, 3, 6, 2, 1, 5]
[2, 1, 1, 3, 2, 5, 4] [6, 5, 5, 4, 5, 3, 3] [2, 4, 2, 2, 3, 6, 3] [2, 1, 3, 6, 1, 2, 6]
[3, 1, 2, 3, 3, 5, 1] [5, 3, 6, 1, 5, 4, 1] [4, 2, 1, 6, 5, 3, 6] [3, 6, 5, 2, 1, 5, 5]
[2, 6, 3, 1, 5, 6, 4] [6, 6, 4, 2, 3, 4, 2] [5, 4, 6, 6, 4, 2, 6] [5, 3, 1, 6, 3, 6, 2]

尝试一下!


推荐阅读