python - 如何使用 PySimpleGUI 将值随机放入 100 个按钮中的 10 个?
问题描述
所以我目前正在尝试创建一个简单的游戏,但我无法提出解决方案。游戏设置就像扫雷一样。它有 10 行和 10 列,所以有 100 个块(按钮)。现在,当您使用 PySimpleGUI 运行此程序时,板会出现,但是当您单击一个正方形时,该正方形上会显示 1 或 0。
你可以对板上的每个盒子都这样做,它会给你一个 1 或 0。
我一直试图让它随机选择网格上的 10 个按钮,并在 10 个“选择的正方形”中随机划分 1000 个点(一个正方形可能有 3 个点,另一个可能有 700 个点)。
我正在尝试创建一个简单的小“彩票”游戏,并使其成为玩家获得 10 次选秀权以找到尽可能多的积分的地方。
我不知道这是否有意义,但如果是这样,任何建议将不胜感激!如果您需要更多信息,请告诉我。
MAX_ROWS = MAX_COL = 10
board = [[randint(0,1) for j in range(MAX_COL)] for i in range(MAX_ROWS)]
layout = [[sg.Button('#', size=(4,2), key=(i,j)) for j in range(MAX_COL)] for i in range(MAX_ROWS)]
window = sg.Window('Mining GUI', layout)
# create the event loop:
while True:
event, values = window.read()
if event in (sg.WIN_CLOSED, 'Exit'):
break
# window[(row, col)].update('New Text') # to change a button's text, use this pattern
# for this example, change the text of the button to the board's value and turn color black
window[event].update(board[event[0]][event[1]], button_color=('white', 'black')) window.close()
解决方案
要在 10 个值之间随机分配 1000 个点,您可以执行以下操作:
这种方法很简单,但在统计上并不正确(第一个生成的值可能非常大,剩下的 9 个将留下很少的分数)。
bank = 1000
n_chosen = 10
chosen_scores = []
for i in range(bank):
chosen_scores.append(randint(0, bank))
bank -= chose_scores[-1]
这种方法更公平
bank = 1000
n_chosen = 10
bank_indices = list(range(bank+1))
chosen_indices = random.choices(bank_indices, k=n_chosen)
chosen_indices.sort()
chosen_scores = [chosen_indices[0]]
for i in range(1, n_chosen):
chosen_scores.append(chosen_scores[i] - chose_scores[i - 1])
之后chosen_scores
,您需要指定哪些按钮将获得相应的分数。我会做最简单的,但可以做得更好
board_indices = [(i, j) for i in range(MAX_COL) for j in range(MAX_ROWS)]
chosen_button_indices = random.choices(board_indices , k=n_chosen)
for i in range(n_chosen):
window[chosen_button_indices[i]].update(str(chosen_scores[i]))
我无法测试这一切是否有效,但这就是想法
推荐阅读
- c# - RemoveAt 不会从指定的索引中删除
- android - 覆盖 android.support.v7.app.AppCompactActivity 中的 onCreate 方法
- java - 通过内置属性配置 Maven 编译器?
- rust - 如何在特征中使用通用结构的实例变量?
- javascript - 表单提交后将内容加载到模态
- python - 用 pandas 计算一个周期内的行数
- javascript - 是 Angular 平台还是框架?
- r - 具有 Logloss 和 SMOTE 的决策树
- asp.net - .NET Core 网站消耗大量内存
- excel - Excel:为什么这个条件格式公式不起作用?