Advertisement
Guest User

python code brobots meteor

a guest
Nov 13th, 2018
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.56 KB | None | 0 0
  1. import time, math
  2. from tkinter import *
  3. from random import randint
  4. width = 700
  5. height = 700
  6. r = 100
  7.  
  8.  
  9. class Game():
  10.     def __init__(self, width = 500, height = 500):
  11.         self.root = Tk()
  12.         self.root.title("Meteorits")
  13.         self.root.resizable(False,False)
  14.         self.canvas = Canvas(self.root, width = width, height = height, highlightthickness = 0)
  15.         self.canvas.pack()
  16.         self.root.update()
  17.         self.meteors = []
  18.         self.width = self.canvas.winfo_width()
  19.         self.height = self.canvas.winfo_height()
  20.  
  21.     def mainloop(self):
  22.         while True:
  23.             for z in self.meteors:
  24.                 z.move()
  25.             self.colision_with_borders()
  26.             self.colision_with_meteors()
  27.             self.root.update_idletasks()
  28.             self.root.update()
  29.             time.sleep(1/100)
  30.  
  31.     def get_center(self, obj1):
  32.         obj1_x1, obj1_y1, obj1_x2, obj1_y2 = self.canvas.coords(obj1.ball)
  33.         obj1_center = ((obj1_x2 + obj1_x1)/2, (obj1_y2 + obj1_y1)/2)
  34.         return obj1_center
  35.  
  36.     def get_dist(self,obj1_center, obj2_center):
  37.         kx = obj1_center[0] - obj2_center[0]
  38.         ky = obj1_center[1] - obj2_center[1]
  39.         g = math.sqrt(kx ** 2 + ky ** 2)
  40.         return g
  41.  
  42.  
  43.     def colision_with_meteors(self):
  44.         remove_meteors = []
  45.         for i in range(len(self.meteors)-1):
  46.             for k in range(i+1,len(self.meteors)):
  47.                 i_center = self.get_center(self.meteors[i])
  48.                 k_center = self.get_center(self.meteors[k])
  49.                 if self.get_dist(i_center, k_center) <= r * 2:
  50.                     remove_meteors.append(i)
  51.                     remove_meteors.append(k)
  52.         new_meteors = [self.meteors[w] for w in range(len(self.meteors)) if w not in remove_meteors]
  53.         for i in remove_meteors:
  54.             self.canvas.delete(self.meteors[i].ball)
  55.         self.meteors = new_meteors
  56.        
  57.     def colision_with_borders(self):
  58.         for i in self.meteors:
  59.             if self.canvas.coords(i.ball)[0] < 0: self.canvas.move(i.ball, self.width, 0)
  60.             if self.canvas.coords(i.ball)[2] > self.width: self.canvas.move(i.ball, -self.width, 0)
  61.             if self.canvas.coords(i.ball)[1] < 0: self.canvas.move(i.ball,  0, self.height)
  62.             if self.canvas.coords(i.ball)[3] > self.height: self.canvas.move(i.ball, 0, -self.height)
  63.  
  64.  
  65. class Meteorit:
  66.     def __init__(self, game, x, y, r):
  67.         self.deltax = randint(-5,5)
  68.         self.deltay = randint(-5,5)
  69.         self.x1 = x-r
  70.         self.y1 = y-r
  71.         self.x2 = x+r
  72.         self.y2 = y+r
  73.         self.r = r
  74.         self.game = game
  75.         self.ball = self.game.canvas.create_oval(self.x1, self.y1, self.x2, self.y2, fill="red")
  76.  
  77.     def move(self):
  78.         self.game.canvas.move(self.ball, self.deltax, self.deltay)
  79.  
  80.    
  81.    
  82.  
  83. g = Game(width, height)
  84. for i in range(50):
  85.     x=randint(r,width-r)
  86.     y=randint(r,height-r)
  87.     g.meteors.append(Meteorit(g, x, y, r))
  88.  
  89. g.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement