Python 蟒蛇:使投射物沿着所有墙壁在GraphWin窗口上反弹?
扩展投射物和跟踪器以实现以下图形游戏: a。有一个给定尺寸的方形盒子,选择一个合适尺寸的盒子 有一个抛射体,它随机地从四面墙壁反弹 b。当弹丸击中墙壁时,它会通过在墙上随机选择一个角度再次发射 允许范围和给定范围内的随机速度。例如,如果 射弹击中底部边界时,它会选择0到180范围内的随机角度 度;如果它击中右侧垂直墙,则会选择90到90之间的随机角度 270度;等等 c。移动圆并用一些颜色填充它,而不是绘制圆 d。延伸到两个射弹 不要询问用户参数。使用一组您认为最好的参数Python 蟒蛇:使投射物沿着所有墙壁在GraphWin窗口上反弹?,python,graphics,bounce,Python,Graphics,Bounce,扩展投射物和跟踪器以实现以下图形游戏: a。有一个给定尺寸的方形盒子,选择一个合适尺寸的盒子 有一个抛射体,它随机地从四面墙壁反弹 b。当弹丸击中墙壁时,它会通过在墙上随机选择一个角度再次发射 允许范围和给定范围内的随机速度。例如,如果 射弹击中底部边界时,它会选择0到180范围内的随机角度 度;如果它击中右侧垂直墙,则会选择90到90之间的随机角度 270度;等等 c。移动圆并用一些颜色填充它,而不是绘制圆 d。延伸到两个射弹 不要询问用户参数。使用一组您认为最好的参数 因此,我很难找到如何使
因此,我很难找到如何使两个C球——投射物从一堵墙反弹到另一堵墙。我想到了如何把它们从窗户的底墙上弹下来,但它并没有停在右边的墙上,而是从那里弹下来。不仅如此,我不知道如何让球跟随,而不是不断打印圆圈来跟踪球的运动。我用的是.undraw,但它非常跳跃,一点也不平滑 我将非常感谢你的帮助!作业明天就要交了,这是我的:
# projectilebounce.py
# Projectile hits a wall and again is launced
from math import sin, cos, radians
from graphics import *
class Projectile:
def __init__(self, angle, velocity, height):
self.xpos = 0.0
self.ypos = height
theta = radians(angle)
self.xvel = velocity * cos(theta)
self.yvel = velocity * sin(theta)
def update(self, time):
self.xpos = self.xpos + time * self.xvel
yvel1 = self.yvel - 9.8 * time
self.ypos = self.ypos + time * (self.yvel + yvel1) / 2.0
self.yvel = yvel1
def getY(self):
return self.ypos
def getX(self):
return self.xpos
def reset(self, angle, velocity, height):
self.xpos = self.getX()
self.ypos = height
theta = radians(angle)
self.xvel = velocity * cos(theta)
self.yvel = velocity * sin(theta)
class Tracker:
def __init__(self, window, objToTrack):
self.win = window
self.obj = objToTrack
def update(self):
a = Circle( Point(self.obj.getX(), self.obj.getY()), 5)
a.draw(self.win)
a.setFill("Black")
a.undraw()
def getInputs():
a1 = 60
a2 = 30
v1 = 60
v2 = 60
h1 = 10
h2 = 10
t = 0.1
return a1, a2, v1, v2, h1, h2, t
def main():
print("This program graphically depicts the flight of a cannonball.\n")
win = GraphWin("TRACKER", 600, 500)
win.setCoords(0.0, 0.0, 600, 500)
angle1, angle2, vel1, vel2, h01, h02, time = getInputs()
cball1 = Projectile(angle1, vel1, h01)
cball2 = Projectile(angle2, vel2, h02)
tracker_cball1 = Tracker(win, cball1)
tracker_cball2 = Tracker(win, cball2)
while True:
if cball1.getY() <= 0: #<---ball 1
cball1.reset(60, 60, 10)
else:
cball1.update(time)
tracker_cball1.update()
if cball2.getY() <= 0: #<---ball 2
cball2.reset(30, 60, 10)
else:
cball2.update(time)
tracker_cball2.update()
if __name__ == '__main__' : main()
谢谢!,我现在是个编程高手。非常感谢 我不知道如何使球跟随,而不是不断打印圆圈来跟踪球的运动。您正在类跟踪器的更新中绘制球。您不需要每次都实例化一个新的圆,而是需要创建一个对象圆,并为其提供一个更新函数来更改self的x和y。a.undraw是否工作?有点用。但它的跳跃性你可以,但这并不是真正遵循的要求,而不是画圆,移动圆,而不是连续打印圆。听起来他们只想让你做一个圆圈,然后移动它。不连续创建新圆圈并删除前一个。我明白了。:/好的,谢谢!