我正在创建一个个人项目,以尝试更好地使用python。我正在制作的游戏是Yahtzee。我将其设置为可以滚动所有模具的位置,它将告诉您所拥有的。我也有使用Tkinter的窗口设置。我正在尝试做的是在每个数字下方都显示一个“ HOLD”(保持)按钮。如果您知道yahtzee的工作原理,就会知道为什么。我只希望此按钮可以阻止骰子在您第一次掷骰后再次掷骰。
我在此处查看了Stack Overflow上的其他帖子,但是这些帖子都不符合我一直试图找出的方式。
# Window
def hold():
window = Tk()
window.title("Sam's Yahtzee")
window.configure(background="black")
Button(window, text="HOLD", width=6, command=hold) .grid(row=3, column=0,
sticky=W)
window.mainloop()
# Dice Roll
roll1 = random.randint(1, 6)
roll2 = random.randint(1, 6)
roll3 = random.randint(1, 6)
roll4 = random.randint(1, 6)
roll5 = random.randint(1, 6)
print(roll1, roll2, roll3, roll4, roll5)
# Choosing What Num to Hold
# Roll Num Storing
userRollHold = {'roll1': roll1,
'roll2': roll2,
'roll3': roll3,
'roll4': roll4,
'roll5': roll5}
我希望有一个能够阻止号码再次滚动的按钮。
答案 0 :(得分:0)
不确定这是否是您要查找的内容,但是您可以创建一个具有hold属性的类,然后根据需要设置和取消设置该类:
例如:
class Dice:
def __init__(self):
self.held = False
self.val = None
def roll(self):
self.val = random.randint(1, 6) if not self.held else self.val
return self.val
def hold(self):
self.held = True
def unhold(self):
self.held = False
这是概念验证测试代码:
dice_1, dice_2, dice_3 = Dice(), Dice(), Dice()
print dice_1.roll(), dice_2.roll(), dice_3.roll()
dice_1.hold()
dice_3.hold()
print dice_1.roll(), dice_2.roll(), dice_3.roll()
print dice_1.roll(), dice_2.roll(), dice_3.roll()
dice_1.unhold()
print dice_1.roll(), dice_2.roll(), dice_3.roll()
输出:
5 3 5
5 1 5
5 6 5
3 1 5
答案 1 :(得分:0)
您可以使用Checkbutton
作为保持按钮并检查其状态,以确定是否在下一卷中保持相应的骰子。以下是示例代码(使用Checkbutton
作为骰子本身):
from tkinter import *
from random import randint
root = Tk()
root.title("Sam's Yahtzee")
def roll(dice, times):
if times > 0:
dice['text'] = randint(1, 6)
root.after(10, roll, dice, times-1)
def roll_dices():
for i in range(5):
if dices[i][1].get() == 0:
# dice is not held, so roll it
roll(dices[i][0], 10)
dices = []
for i in range(5):
ivar = IntVar()
dice = Checkbutton(root, text=randint(1, 6), variable=ivar, bg='silver', bd=1, font=('Arial', 24), indicatoron=False, height=3, width=5)
dice.grid(row=0, column=i)
dices.append([dice, ivar])
Button(text='Dice', command=roll_dices, height=2, font=(None, 16, 'bold')).grid(row=1, column=0, columnspan=5, sticky='ew')
root.mainloop()