Для моего класса информатики я работаю над проектом конца года, и я решил создать игру Yahtzee с использованием Python и Tkinter. Я начал код, но то, что у меня до сих пор не работает, и я не знаю, почему, может кто-нибудь мне помочь?Может кто-нибудь помочь мне сделать игру Yahtzee?
Код после «# roll1», «# roll2» и т. Д. заключается в создании точек для каждой возможности броска на пяти игральных костях. Они хранятся в определениях, о которых я мало что знаю. Флажки используются для определения того, какие кости требуется игроку, но когда я проверил кнопку roll с возможностью проката 1, он не работал. Также я хотел, чтобы флажки были организованы по горизонтали, но по какой-то причине они вертикальны. Кто-то, пожалуйста, помогите!
from Tkinter import *
import random
root = Tk()
drawpad = Canvas(root, width=600, height=600, background='white')
dice1 = drawpad.create_rectangle(10, 10, 110, 110, fill="white")
dice2 = drawpad.create_rectangle(130, 10, 230, 110, fill="white")
dice3 = drawpad.create_rectangle(250, 10, 350, 110, fill="white")
dice4 = drawpad.create_rectangle(370, 10, 470, 110, fill="white")
dice5 = drawpad.create_rectangle(490, 10, 590, 110, fill="white")
check1 = False
check2 = False
check3 = False
check4 = False
check5 = False
# roll 1
roll1 = []
for i in range(1, 6, 1):
x = (120 * i) - 65
y = x + 10
roll1.append(drawpad.create_oval(x, 55, y, 65, fill="red", state=HIDDEN))
# roll 2
roll2 = {}
for i in range(1, 6, 1):
x = (120 * i) - 98
y = x + 10
x2 = (120 * i) - 33
y2 = x2 + 10
roll2[i] = [drawpad.create_oval(x, 23, y, 33, fill="red", state=HIDDEN), drawpad.create_oval(
x2, 87, y2, 97, fill="red", state=HIDDEN)]
# roll3
roll3 = {}
for i in range(1, 6, 1):
x = (120 * i) - 65
y = x + 10
x2 = (120 * i) - 98
y2 = x2 + 10
x3 = (120 * i) - 33
y3 = x3 + 10
roll3[i] = [drawpad.create_oval(x, 55, y, 65, fill="red", state=HIDDEN), drawpad.create_oval(
x2, 23, y2, 33, fill="red", state=HIDDEN), drawpad.create_oval(x3, 87, y3, 97, fill="red", state=HIDDEN)]
# roll4
roll4 = {}
for i in range(1, 6, 1):
x = (120 * i) - 98
y = x + 10
x2 = (120 * i) - 33
y2 = x2 + 10
roll4[i] = [drawpad.create_oval(x, 23, y, 33, fill="red", state=HIDDEN), drawpad.create_oval(x2, 23, y2, 33, fill="red", state=HIDDEN), drawpad.create_oval(
x2, 87, y2, 97, fill="red", state=HIDDEN), drawpad.create_oval(x, 87, y, 97, fill="red", state=HIDDEN)]
# roll5
roll5 = {}
for i in range(1, 6, 1):
x = (120 * i) - 98
y = x + 10
x2 = (120 * i) - 33
y2 = x2 + 10
x3 = (120 * i) - 65
y3 = x3 + 10
roll5[i] = [drawpad.create_oval(x, 23, y, 33, fill="red", state=HIDDEN), drawpad.create_oval(x2, 23, y2, 33, fill="red", state=HIDDEN), drawpad.create_oval(
x2, 87, y2, 97, fill="red", state=HIDDEN), drawpad.create_oval(x, 87, y, 97, fill="red", state=HIDDEN), drawpad.create_oval(x3, 55, y3, 65, fill="red", state=HIDDEN)]
# roll6
roll6 = {}
for i in range(1, 6, 1):
x = (120 * i) - 98
y = x + 10
x2 = (120 * i) - 33
y2 = x2 + 10
roll6[i] = [drawpad.create_oval(x, 23, y, 33, fill="red", state=HIDDEN), drawpad.create_oval(x2, 23, y2, 33, fill="red", state=HIDDEN), drawpad.create_oval(x2, 87, y2, 97, fill="red", state=HIDDEN), drawpad.create_oval(
x, 87, y, 97, fill="red", state=HIDDEN), drawpad.create_oval(x, 55, y, 65, fill="red", state=HIDDEN), drawpad.create_oval(x2, 55, y2, 65, fill="red", state=HIDDEN)]
class MyApp(object):
def __init__(self, parent):
global drawpad
self.myParent = parent
self.myContainer1 = Frame(parent)
self.myContainer1.pack()
# Roll Button
self.rollButton = Button(self.myContainer1)
self.rollButton.configure(text="Roll", background= "green")
self.rollButton.grid(row=0,column=0)
# Stop Button
self.stop = Button(self.myContainer1)
self.stop.configure(text="End Turn", background= "green")
self.stop.grid(row=0,column=1)
# Dice Checkboxes
self.var1 = IntVar()
c = Checkbutton(root, text="Dice 1",variable = self.var1,command=self.cb)
c.grid(row=1,column=0)
self.var2 = IntVar()
c2 = Checkbutton(root, text="Dice 2",variable = self.var2,command=self.cb2)
c2.grid(row=1,column=1)
self.var3 = IntVar()
c3 = Checkbutton(root, text="Dice 3",variable = self.var3,command=self.cb3)
c3.grid(row=1,column=2)
self.var4 = IntVar()
c4 = Checkbutton(root, text="Dice 4",variable = self.var4,command=self.cb4)
c4.grid(row=1,column=3)
self.var5 = IntVar()
c5 = Checkbutton(root, text="Dice 5",variable = self.var5,command=self.cb5)
c5.grid(row=1,column=4)
self.rollButton.bind("<Button-1>", self.rollButtonClick)
c.pack()
c2.pack()
c3.pack()
c4.pack()
c5.pack()
drawpad.pack()
def cb(self):
global check1
if(self.var1.get() == 1):
check1 = True
else:
check1 = False
def cb2(self):
global check2
if(self.var2.get() == 1):
check2 = True
else:
check2 = False
def cb3(self):
global check3
if(self.var3.get() == 1):
check3 = True
else:
check3 = False
def cb4(self):
global check4
if(self.var4.get() == 1):
check4 = True
else:
check4 = False
def cb5(self):
global check5
if(self.var5.get() == 1):
check5 = True
else:
check5 = False
def rollButtonClick(self, event):
global drawpad
global roll1
global check
global check2
global check3
global check4
global check5
dice1=0
dice2=0
dice3=0
dice4=0
dice5=0
diceValues = [dice1,dice2,dice3,dice4,dice5]
if(check1==True):
dice1 = random.randint(1,6)
if(check2==True):
dice2 = random.randint(1,6)
if(check3==True):
dice3 = random.randint(1,6)
if(check4==True):
dice4 = random.randint(1,6)
if(check5==True):
dice5 = random.randint(1,6)
for i in (0,4,1):
if(diceValues[i]==1):
drawpad.itemconfig(roll1[i],state=NORMAL)
app = MyApp(root)
root.mainloop()
Этот код, полный 'globals', сумасшедший. Это недостаток Python, у вас много плохого программирования ... Также вы можете подумать о том, чтобы иметь список для длинного перечисления переменных, которые у вас есть с помощью вашего кода ... – nbro
@Xenomorph Я не думаю, что плохое OP дизайн - это ошибка Python ... – jonrsharpe
@Xenomorph Я действительно не знаю, что я делаю, пожалуйста, помогите! И список для каких переменных? –