def blackHoles(field): # Create a list of numbers that could be X and Y coordinates numbers = [] for i in range(60, 360, 40): numbers.append(i) # From that list, ceate first blackhole coordinates blackX1 = int(choice(numbers)) blackY1 = int(choice(numbers)) # Create second blackhole coordinates blackX2 = int(choice(numbers)) blackY2 = int(choice(numbers)) # Draw the black holes black1 = Circle(Point(blackX1, blackY1), 5) black1.setFill('black') black1.draw(field) black2 = Circle(Point(blackX2, blackY2), 5) black2.setFill('black') black2.draw(field) # Get the centers of the circles blackcenter1 = black1.getCenter() blackcenter2 = black2.getCenter() # Return the center locations for the black holes return blackcenter1, blackcenter2
class ShotTracker: def __init__(self, win, angle, velocity, height): """win is the GraphWin to display the shot. angle, velocity, and height are initial projectile parameters. """ self.proj = Projectile(angle, velocity, height) self.marker = Circle(Point(0, height), 3) self.marker.setFill("red") self.marker.setOutline("red") self.marker.draw(win) def update(self, dt): """Move the shot dt seconds farther along its flight """ # Update the projectile self.proj.update(dt) # Moves the circle to the new projectile location center = self.marker.getCenter() dx = self.proj.getX() - center.getX() dy = self.proj.getY() - center.getY() self.marker.move(dx, dy) def getX(self): """ return the current x coordinate of the shot's center """ return self.proj.getX() def getY(self): """ return the current y coordinate of the shot's center """ return self.proj.getY() def undraw(self): """ undraw the shot """ self.marker.undraw()
class Wheel(): def __init__(self, center, wheel_radius, tire_radius): self.tire_circle = Circle(center, tire_radius) self.wheel_circle = Circle(center, wheel_radius) def draw(self, win): self.tire_circle.draw(win) self.wheel_circle.draw(win) def move(self, dx, dy): self.tire_circle.move(dx, dy) self.wheel_circle.move(dx, dy) def set_color(self, wheel_color, tire_color): self.tire_circle.setFill(tire_color) self.wheel_circle.setFill(wheel_color) def undraw(self): self.tire_circle .undraw() self.wheel_circle .undraw() def get_size(self): return self.tire_circle.getRadius() def get_center(self): return self.tire_circle.getCenter() def animate(self, win, dx, dy, n): if n > 0: self.move(dx, dy) win.after(100, self.animate, win, dx, dy, n - 1)
class Asteroid: def __init__(self, pos, dest, win, vel, type): self.pos = pos self.dest = Point(dest.getX() - pos.getX(), dest.getY() - pos.getY()) self.vel = vel self.type = type self.aliveFlag = True self.outOfBounds = False r = 25 * type self.object = Circle(self.pos, r) self.object.setFill(color_rgb(randrange(100, 255), 240, 90)) self.draw(win) def draw(self, win): self.object.draw(win) def undraw(self): self.object.undraw() def update(self, dt, win): #normalize values dest = norm(self.dest.getX(), self.dest.getY()) #calculate x and y movement x = dest.getX() * self.vel * dt y = dest.getY() * self.vel * dt self.object.move(x, y) self.pos = self.object.getCenter() if self.pos.getX() < -100: self.outOfBounds = True def getAliveFlag(self): return self.aliveFlag def setAliveFlag(self, statement=True): self.aliveFlag = statement def getOutOfBounds(self): return self.outOfBounds def getType(self): return self.type def getObject(self): return self.object
class Bullet: def __init__(self, pos, win, r, dest, vel=1.0, c=color_rgb(255, 255, 255)): self.pos = pos #position self.dest = Point(dest.getX() - pos.getX(), dest.getY() - pos.getY()) #destination self.radius = r #radius self.vel = vel #velocity self.object = Circle(self.pos, r) #Circle self.object.setFill(c) #set colour self.object.setOutline('black') self.draw(win) #draw self.aliveFlag = True def getAliveFlag(self): return self.aliveFlag def update(self, dt, win): #normalize values dest = norm(self.dest.getX(), self.dest.getY()) #calculate x and y movement x = dest.getX() * self.vel * dt y = dest.getY() * self.vel * dt #move object self.object.move(x, y) #set position self.pos = self.object.getCenter() #Split into two if statements for readability if self.pos.getX() > win.getWidth() or self.pos.getY() > win.getHeight( ): self.aliveFlag = False elif self.pos.getX() < 0 or self.pos.getY() < 0: self.aliveFlag = False def getObject(self): return self.object def draw(self, win): self.object.draw(win) #remove object from screen def undraw(self): self.object.undraw()
class ShotTracker: def __init__(self, win, angle, velocity, height): self.proj = Projectile(angle, velocity, height) self.marker = Circle(Point(0, height), 3) # 圆心, 半径 self.marker.setFill('red') self.marker.setOutline('red') self.marker.draw(win) def update(self, dt): self.proj.update(dt) center = self.marker.getCenter() dx = self.proj.getX() - center.getX() dy = self.proj.getY() - center.getY() self.marker.move(dx, dy) def getX(self): return self.proj.getX() def getY(self): return self.proj.getY() def undraw(self): self.marker.undraw()
class Player: def __init__(self, pos, r, vel=1.0, c=color_rgb(255, 255, 255)): self.pos = pos #position self.radius = r #radius self.vel = vel #velocity self.colour = c self.object = Circle(self.pos, r) self.object.setFill(c) self.object.setOutline('black') self.bullets = [] #bullet list self.score = 0 print(self.object.getRadius()) def modifyScore(self, value): self.score += value #print("Score:"+str(self.score)) def getScore(self): return self.score def update(self, dt, win): x = 0.0 y = 0.0 if k.kUp(): #If key up is pressed y -= self.vel * dt if k.kDown(): #If key down is pressed y += self.vel * dt if k.kLeft(): #If key left is pressed x -= self.vel * dt if k.kRight(): #If key right is pressed x += self.vel * dt #Check if mouse has been clicked mouse = k.kMouseLeft(win) if mouse != None: #print(mouse) self.bullets.append( Bullet(self.pos, win, 10, Point(mouse.getX(), mouse.getY()), 1000, self.colour)) #Update bullets and check if out of bounds for bullet in self.bullets: bullet.update(dt, win) if bullet.getAliveFlag() != True: bullet.undraw() self.bullets.remove(bullet) self.object.move(x, y) self.pos = self.object.getCenter() def getBullets(self): return self.bullets def getObject(self): return self.object def getRadius(self): return self.object.getRadius() def getPos(self): return self.pos def draw(self, win): self.object.draw(win) #undraw object def undraw(self): self.object.undraw()
num_snowballs = 75 for i in range(num_snowballs): x = randint(0, 199) y = randint(0, 199) p = Point(x, y) snowball = Circle(p, randint(2, 3)) snowball.setFill("white") snowball.draw(win) snowballs.append(snowball) # Freeze between frames in seconds animation_delay = 0.1 frames_to_render = 20 for i in range(frames_to_render): for snowball in snowballs: snowball.move(0, randint(1, 3)) if snowball.getCenter().getY() > 199: snowball.undraw() snowball.move(0, -200) snowball.draw(win) # time.sleep(animation_delay) label = Text(Point(99, 99), "Happy SNOW DAY!") label.setFill("white") label.setSize(18) label.draw(win) win.getMouse() win.close()