扩展射弹和追踪器以实现以下图形游戏:
一个。有一个给定尺寸的方框(选择一个合理尺寸的框),其中 有一个弹丸随机弹回四面墙。
湾当射弹撞击墙壁时,通过随机选择一个角度再次发射 允许的范围和给定范围内的随机速度。例如,如果 射弹击中底部边界,它选择0到180范围内的随机角度 度;如果它碰到了正确的垂直墙,那么它会选择90和90之间的随机角度 270度;等等。
℃。不是绘制圆圈,而是移动圆圈并用一些颜色填充圆圈。
d。延伸到两个射弹。
不要询问用户参数。使用您认为最佳的一组参数。
所以我很难找到如何让两个球(弹丸)从一个墙到另一个墙弹跳。我想到了如何将它们从窗户的底壁反弹,但它并没有停在右边的墙上并从那里反弹。不仅如此,我不知道如何使球跟随而不是连续印刷圆圈来跟踪球的运动。我使用“.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()
谢谢!,我现在是编码的大菜鸟。非常感谢!