python-3.x - 在数组中创建一组随机数字,而同一数字连续重复三次
问题描述
嗨,所以我基本上必须创建一个像 candy crush saga 这样的游戏,并且我创建了一个二维数组来开始,我能够根据我的数组的索引创建带有相应图片的游戏板。但是,我必须确保一开始我不能连续拥有 3 张相同的图片或糖果或其他任何东西。要首先创建数组,我使用了:
board = [[random.randint(1,6) for i in range(7)] for j in range(9)]
创建一个 9x7 板,基本上 1-6 中的每个数字都对应于一张特定的图片,但我不知道如何迭代并检查是否有三个相同的数字连续。有任何想法吗?谢谢
解决方案
此解决方案不会赢得选美比赛,但它会一次性生成棋盘,与生成整个棋盘并在它们上运行计数相比,它应该提供显着的性能优势,直到您设法获得幸运棋盘(大约有 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]
推荐阅读
- powershell - 当我向我的对象添加新列时,即使我的值相等也会出错?
- git - 在 CloudRun 上使用 git2go 克隆
- java - 根据属性值返回过滤后的 java 对象列表
- java - 在 Jenkins 上部署 Spring Boot 应用程序
- java - 如何将读取和强制转换为 char 数组
- django - django频道redis关闭时间过长被杀
- ms-access - SSIS 脚本任务打开 MS Access 运行宏
- ios - Swift:无论用户单击哪个按钮操作,都会显示请求审核
- azure - Azure B2C 自定义属性固定长度
- java - 通过 Java 中的 FileOutputStream 写入的文件没有被 python 使用 AudioSegment.from_file 访问