Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 蟒蛇:使投射物沿着所有墙壁在GraphWin窗口上反弹?_Python_Graphics_Bounce - Fatal编程技术网

Python 蟒蛇:使投射物沿着所有墙壁在GraphWin窗口上反弹?

Python 蟒蛇:使投射物沿着所有墙壁在GraphWin窗口上反弹?,python,graphics,bounce,Python,Graphics,Bounce,扩展投射物和跟踪器以实现以下图形游戏: a。有一个给定尺寸的方形盒子,选择一个合适尺寸的盒子 有一个抛射体,它随机地从四面墙壁反弹 b。当弹丸击中墙壁时,它会通过在墙上随机选择一个角度再次发射 允许范围和给定范围内的随机速度。例如,如果 射弹击中底部边界时,它会选择0到180范围内的随机角度 度;如果它击中右侧垂直墙,则会选择90到90之间的随机角度 270度;等等 c。移动圆并用一些颜色填充它,而不是绘制圆 d。延伸到两个射弹 不要询问用户参数。使用一组您认为最好的参数 因此,我很难找到如何使

扩展投射物和跟踪器以实现以下图形游戏:

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是否工作?有点用。但它的跳跃性你可以,但这并不是真正遵循的要求,而不是画圆,移动圆,而不是连续打印圆。听起来他们只想让你做一个圆圈,然后移动它。不连续创建新圆圈并删除前一个。我明白了。:/好的,谢谢!