Advertisement
Guest User

Untitled

a guest
Dec 11th, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.49 KB | None | 0 0
  1. import time, math
  2. from tkinter import *
  3. from random import randint
  4. from random import shuffle
  5. width = 1500
  6. height = 1280
  7. r = randint(20, 50)
  8.  
  9.  
  10.  
  11.  
  12. class Game():
  13. def __init__(self, width = 500, height = 500):
  14. self.root = Tk()
  15. self.root.title("Meteorits")
  16. self.root.resizable(True,True)
  17. self.canvas = Canvas(self.root, width = width, height = height, highlightthickness = 0)
  18. self.canvas.pack()
  19. self.root.update()
  20. self.sprite = []
  21. self.player = ()
  22. self.width = self.canvas.winfo_width()
  23. self.height = self.canvas.winfo_height()
  24.  
  25.  
  26. def mainloop(self):
  27. while True:
  28. for z in self.sprite:
  29. z.move()
  30. self.player.move()
  31. self.colision_with_borders()
  32. self.colision_with_sprites()
  33. self.root.update_idletasks()
  34. self.root.update()
  35. time.sleep(1/100)
  36.  
  37. def get_center(self, obj1):
  38. obj1_x1, obj1_y1, obj1_x2, obj1_y2 = self.canvas.coords(obj1.ball)
  39. obj1_center = ((obj1_x2 + obj1_x1)/2, (obj1_y2 + obj1_y1)/2)
  40. return obj1_center
  41.  
  42. def get_dist(self,obj1_center, obj2_center):
  43. kx = obj1_center[0] - obj2_center[0]
  44. ky = obj1_center[1] - obj2_center[1]
  45. g = math.sqrt(kx ** 2 + ky ** 2)
  46. return g
  47.  
  48.  
  49. def colision_with_sprites(self):
  50. remove_sprites = []
  51. for i in range(len(self.sprite)):
  52. i_center = self.get_center(self.sprite[i])
  53. p_center = self.get_center(self.player)
  54. if self.get_dist(i_center, p_center) <= self.sprite[i].r + self.player.r:
  55. if self.player.r == self.sprite[i].r:
  56. continue
  57. elif self.player.r < self.sprite[i].r:
  58. self.root.destroy()
  59. elif self.player.r > self.sprite[i].r:
  60. self.player.r = self.player.r + 5
  61. remove_sprites.append(i)
  62. new_sprites = [self.sprite[w] for w in range(len(self.sprite)) if w not in remove_sprites]
  63. for i in remove_sprites:
  64. self.canvas.delete(self.sprite[i].ball)
  65. self.sprite = new_sprites
  66. x,y = p_center
  67. x1 = x-self.player.r
  68. x2 = x+self.player.r
  69. y1 = y-self.player.r
  70. y2 = y+self.player.r
  71. self.canvas.coords(self.player.ball, x1, y1, x2, y2)
  72.  
  73.  
  74. def colision_with_borders(self):
  75. for i in self.sprite:
  76. if self.canvas.coords(i.ball)[0] < 0: self.canvas.move(i.ball, self.width, 0)
  77. if self.canvas.coords(i.ball)[2] > self.width: self.canvas.move(i.ball, -self.width, 0)
  78. if self.canvas.coords(i.ball)[1] < 0: self.canvas.move(i.ball, 0, self.height)
  79. if self.canvas.coords(i.ball)[3] > self.height: self.canvas.move(i.ball, 0, -self.height)
  80.  
  81.  
  82. class Sprite:
  83. def __init__(self, game, x, y, r, color):
  84. self.deltax = 0
  85. self.deltay = 0
  86. self.x1 = x-r
  87. self.y1 = y-r
  88. self.x2 = x+r
  89. self.y2 = y+r
  90. self.r = r
  91. self.game = game
  92. self.ball = self.game.canvas.create_oval(self.x1, self.y1, self.x2, self.y2, fill=color)
  93. def move(self):
  94. self.game.canvas.move(self.ball, self.deltax, self.deltay)
  95.  
  96. class Bot(Sprite):
  97. def __init__(self, game, x, y, r, color):
  98. Sprite.__init__(self, game, x, y, r, color)
  99. self.deltax = randint(-5,5)
  100. self.deltay = randint(-5,5)
  101.  
  102.  
  103. class Player(Sprite):
  104. def __init__(self, game, x, y, r, color):
  105. Sprite.__init__(self, game, x, y, r, color)
  106. game.canvas.bind_all('<KeyPress-Left>', self.turn_left)
  107. game.canvas.bind_all('<KeyPress-Right>', self.turn_right)
  108. game.canvas.bind_all('<KeyPress-Up>', self.turn_up)
  109. game.canvas.bind_all('<KeyPress-Down>', self.turn_down)
  110.  
  111. def turn_left(self, event):
  112. self.deltax = self.deltax - 3
  113. def turn_right(self, event):
  114. self.deltax = self.deltax + 3
  115. def turn_up(self, event):
  116. self.deltay = self.deltay - 3
  117. def turn_down(self, event):
  118. self.deltay = self.deltay + 3
  119.  
  120.  
  121. g = Game(width, height)
  122. for i in range(13):
  123. r = randint(15, 55)
  124. x=randint(r,width-r)
  125. y=randint(r,height-r)
  126. g.sprite.append(Bot(g, x, y, r, 'blue'))
  127. if Bot == 0:
  128. print("u win")
  129. p = Player(g, width/2, height/2, 30, "orange")
  130. g.player = p
  131.  
  132.  
  133.  
  134.  
  135.  
  136. g.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement