我正在创造一个游戏:佳能。您必须触摸目标,指定角度和速度。游戏分为三个阶段:
1-您选择“播放”,“选项”或“退出”
2-您选择难度“简单”,“中等”或“难”
3-游戏出现,您可以选择参数。
我的游戏分为两类,第一组(Canon)处理第一和第二阶段,第二阶段(Man)处理第三阶段。
我可以访问前两个阶段,但是当我点击“easy”“medium”或“hard”时 我收到这个错误:
“不能将序列乘以非'int'类型'float'”
并且第三个窗口显示如下(Tkinter的Entrys不在这里):
这是我的班级人物(其中的一部分):
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)
答案 0 :(得分:2)
如果没有看到您的所有代码或完整的异常,很难告诉您确切的错误。但是,这里是对错误的解释,也可能是您看到错误的原因:
序列可以在Python中相乘。在这里,我们创建一个列表(一种序列),然后将其乘以3:
>>> x = [1,2,3]
>>> y = x*3
结果不是每个项目的乘积因子。相反,它是原始序列三次:
>>> y
[1, 2, 3, 1, 2, 3, 1, 2, 3]
另一个难题 - 当你划分两个数字时,结果值通常是一个浮点数,而不是一个整数:
>>> x = 6/3
>>> type(x)
<class 'float'>
你不能将一个序列乘以一个浮点数,只有一个整数。究竟是什么例外......
因此,请查找代码的一部分,以便将序列进行相乘。完整的Traceback将帮助您找到导致错误的行。只是猜测,但你可能想要的是列表理解:
>>> y = [val*3 for val in x]
>>> y
[3, 6, 9]