【发布时间】:2017-06-02 17:56:09
【问题描述】:
我正在创建一个游戏:Canon-man。你必须触摸一个目标,指定角度和速度。游戏分为三个阶段:
1- 您选择“播放”、“选项”或“退出”
2- 你选择难度“简单”、“中等”或“困难”
3- 游戏出现,您可以选择参数。
我的游戏分为两个类,第一个(Canon)处理第一和第二阶段,第二个(Man)处理第三阶段。
我可以进入前两个阶段,但是当我点击“简单”“中等”或“困难”时 我收到此错误:
" 不能将序列乘以 'float' 类型的非整数"
第三个窗口如下所示(Tkinter 的条目不在此处):
这是我班的人(其中的一部分):
def base(self):
self.height_c = 300
self.width_c = 700
self.choix = 0
self.lang = 0
self.flag = 0
bool(self.flag)
self.t = 0
self.x = 130
self.y = 225
self.root = Tk()
self.root.title("ShotDown")
self.can = Canvas(self.root, width=self.width_c, height=self.height_c)
self.can.grid(row=0, column=4, rowspan=4)
self.cible = PhotoImage(file="\image\\cible.png")
self.canon = PhotoImage(file="\image\\canon.png")
self.canontete = PhotoImage(file="\image\\canontete.png")
self.photo = PhotoImage(file="\image\\paysage_700.png")
self.hc45 = PhotoImage(file="\image\hc45.png")
self.Play = PhotoImage(file="\image\\Play.gif")
self.angle = Entry(self.root, textvariable="hey")
# initialisation:
#
# choix du fond
if self.lang == "0000":
self.photo = PhotoImage(file="\image\\paysage_700.png")
elif self.lang == "0001":
self.photo = PhotoImage(file="\image\\mer.png")
elif self.lang == "0010":
self.photo = PhotoImage(file="\image\\interstellar.png")
self.y_cible = random.randint(60, 240)
self.can.create_image(0, 0, anchor=NW, image=self.photo)
self.image = self.can.create_image(-50, -50, image=self.hc45)
# Creation des differents boutons
#
bou1 = Button(self.root, text='Quitter', width=8, command=self.root.quit)
bou1.grid(row=0, column=2)
bou2 = Button(self.root, text='Demarrer', width=8, command=Man.start_it(self))
bou2.grid(row=0, column=3)
bou3 = Button(self.root, text='Arreter', width=8, command=Man.stop_it)
# bou3.grid(row=2, column=1)
New_angle = StringVar()
New_angle.set("Saisir Nouvel Angle")
text_angle = Label(self.root, text="Angle :")
text_angle.grid(row=1, column=2)
self.angle = Entry(self.root, textvariable=New_angle)
self.angle.grid(row=1, column=3)
New_vitesse = StringVar()
New_vitesse.set("Saisir Nouvelle Vitesse")
text_vitesse = Label(self.root, text="Vitesse :")
self.in_vitesse = Entry(self.root, textvariable=New_vitesse)
text_vitesse.grid(row=2, column=2)
self.in_vitesse.grid(row=2, column=3)
bou_tir = Button(self.root, text='Tirer', width=8, command=Man.start_it(self))
bou_tir.grid(row=0, column=3)
if self.flag == 0:
self.base = self.can.create_image(50, 260, image=self.canontete)
self.can.create_image(self.width_c - 50, self.y_cible, image=self.cible)
# demarrage de la boucle principale
#
self.root.mainloop()
如果有不明白的地方,尽管问^^。
谢谢。
编辑:
@calico_ " - 没有看到你所有的代码 "。抱歉,我没有显示错误在哪里:
self.can.update()
b = float(self.angle.get() * pi / 180)
Vo = float(self.in_vitesse.get())
self.t += 0.025
self.x += (Vo * cos(b) * self.t)
self.y -= ((-0.5 * 9.81 * (self.t ** 2)) + (Vo * sin(b) * self.t))
print(self.x, self.y)
【问题讨论】:
-
该代码中有几个地方将两个变量相乘,您知道是哪一行导致了异常吗?例如,如果
self.angle.get()返回一个序列(可能是无意的),则不能将其乘以pi,因为pi可能是float。
标签: python-3.x class tkinter