我正在制作一个程序,在用户输入一个度数以便在其位置击中随机生成的目标之后从大炮发射子弹。如果你能够在每次第一次尝试时击中目标,该程序工作正常,但似乎我想念它创建一个新目标,就像它应该,但不删除旧目标。关于如何纠正这个问题的任何想法?
from tkinter import *
import time
import math
import random
master = Tk()
w = Canvas(master, width=800,height=800, bg="white")
w.pack()
#Cannon
Img1 = PhotoImage(file="goldcannon.gif")
Pic1 = w.create_image(85,600, image=Img1)
#Grass
w.create_rectangle(0,645, 800,800, fill="green")
w.update()
Choice = "Yes"
Win = False
while(True):
if Choice == "No":
TY = w.create_text(400,400, text="Thank you for playing!", font="arial")
break
x = []
#Cannon Target
Target_x = 700
Target_y = random.randrange(100,560)
Target = w.create_oval(Target_x,Target_y, Target_x+25,Target_y+25, fill="red")
while(True):
if Choice == "No":
break
#Cannon Degree
degree = simpledialog.askstring("Cannon Degree", "What is your guess?", \
initialvalue="Enter a Degree")
degree = 90 - int(degree)
#Cannon Bullet
bMove = w.create_oval(150,560, 150+10,560+10, fill="black")
for i in range(90):
w.move(bMove,math.sin(math.radians(degree))*10, \
-math.cos(math.radians(degree))*10)
time.sleep(0.06)
w.update()
x = w.find_overlapping(Target_x-10,Target_y, Target_x+35,Target_y+35)
if len(x)>1:
w.delete(bMove)
Hit = w.create_text(400,400, text="You hit the target!", font="arial")
Choice = simpledialog.askstring("Hello", "Would you like to play again?", \
initialvalue="Yes or No")
w.delete(Hit)
w.delete(Target)
Win = True
break
if Win == True:
break
答案 0 :(得分:0)
我看到的唯一地点w.delete(Target)
位于' if hit'块。你需要将它添加到其他将被执行的地方。我认为这是在for
循环之后,if Win == True:
之前。
答案 1 :(得分:0)
我相信我已经为你修好了,下面是代码:
from tkinter import *
import time
import math
import random
master = Tk()
w = Canvas(master, width=800,height=800, bg="white")
w.pack()
#Cannon
Img1 = PhotoImage(file="cannon.gif")
Pic1 = w.create_image(85,600, image=Img1)
#Grass
w.create_rectangle(0,645, 800,800, fill="green")
w.update()
Choice = "Yes"
Win = False
while(True):
if Choice == "No":
TY = w.create_text(400,400, text="Thank you for playing!", font="arial")
break
x = []
#Cannon Target
Target_x = 700
Target_y = random.randrange(100,560)
Target = w.create_oval(Target_x,Target_y, Target_x+25,Target_y+25, fill="red")
while(True):
if Choice == "No":
break
#Cannon Degree
degree = simpledialog.askstring("Cannon Degree", "What is your guess?", \
initialvalue="Enter a Degree")
degree = 90 - int(degree)
#Cannon Bullet
bMove = w.create_oval(150,560, 150+10,560+10, fill="black")
for i in range(90):
w.move(bMove,math.sin(math.radians(degree))*10, \
-math.cos(math.radians(degree))*10)
time.sleep(0.06)
w.update()
x = w.find_overlapping(Target_x-10,Target_y, Target_x+35,Target_y+35)
if len(x)>1:
w.delete(bMove)
Hit = w.create_text(400,400, text="You hit the target!", font="arial")
Choice = simpledialog.askstring("Hello", "Would you like to play again?", \
initialvalue="Yes or No")
w.delete(Hit)
w.delete(Target)
Win = True
break
if Win == True:
w.create_oval(Target_x+30,Target_y+30, Target_x+30,Target_y+30, fill='white')
Win = False
print('why hello')
break
希望这对你有用,谢谢。