Advertisement
Guest User

Untitled

a guest
Dec 15th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.18 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 = 10
  7.  
  8.  
  9. class Game():
  10. def __init__(self, width = 1000, height = 1000):
  11. self.root = Tk()
  12. self.root.title("Kim_Chen_In")
  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.sprite = []
  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.sprite:
  24. z.move()
  25. self.colision_with_borders()
  26. self.colision_with_sprites()
  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_sprites(self):
  44. remove_sprites = []
  45. for i in range(len(self.sprite)-1):
  46. for k in range(i+1,len(self.sprite)):
  47. if self.sprite[i].team == self.sprite[k].team:
  48. continue
  49. i_center = self.get_center(self.sprite[i])
  50. k_center = self.get_center(self.sprite[k])
  51. if self.get_dist(i_center, k_center) <= self.sprite[i].r + self.sprite[k].r:
  52. remove_sprites.append(i)
  53. remove_sprites.append(k)
  54. new_sprites = [self.sprite[w] for w in range(len(self.sprite)) if w not in remove_sprites]
  55. for i in remove_sprites:
  56. self.canvas.delete(self.sprite[i].ball)
  57. self.sprite = new_sprites
  58.  
  59.  
  60.  
  61. def colision_with_borders(self):
  62. for i in self.sprite:
  63. if self.canvas.coords(i.ball)[0] < 0: self.canvas.move(i.ball, self.width, 0)
  64. if self.canvas.coords(i.ball)[2] > self.width: self.canvas.move(i.ball, -self.width, 0)
  65. if self.canvas.coords(i.ball)[1] < 0: self.canvas.move(i.ball, 0, self.height)
  66. if self.canvas.coords(i.ball)[3] > self.height: self.canvas.move(i.ball, 0, -self.height)
  67.  
  68.  
  69. class Sprite:
  70. def __init__(self, game, x, y, r, color):
  71. self.deltax = 0
  72. self.deltay = 0
  73. self.x1 = x-r
  74. self.y1 = y-r
  75. self.x2 = x+r
  76. self.y2 = y+r
  77. self.r = r
  78. self.game = game
  79. self.ball = self.game.canvas.create_oval(self.x1, self.y1, self.x2, self.y2, fill = color)
  80.  
  81. def move(self):
  82. self.game.canvas.move(self.ball, self.deltax, self.deltay)
  83.  
  84. class Enemy(Sprite):
  85. def __init__(self, game, x, y, r, color):
  86. Sprite.__init__(self, game, x, y, r, color)
  87. self.deltax = randint(-5,5)
  88. self.deltay = randint(-5,5)
  89.  
  90. game.canvas.bind_all('<KeyPress-space>', self.enemy_fire)
  91.  
  92. def enemy_fire(self, event):
  93. x,y = self.game.get_center(self)
  94. e_deltax = self.deltax
  95. e_deltay = self.deltay
  96. ene_bul = Enemy_Bullet(self.game, x+e_deltax+self.r*3, y+e_deltax+self.r*3, 3, e_deltax*2, e_deltay*2, "green")
  97. self.game.sprite.append(ene_bul)
  98.  
  99.  
  100. class Enemy_Bullet(Sprite):
  101. def __init__(self, game, x, y, r, deltax, deltay, color):
  102. Sprite.__init__(self, game, x, y, r, color)
  103. self.deltax = deltax
  104. self.deltay = deltay
  105.  
  106. class Bullet(Sprite):
  107. def __init__(self, game, x, y, r, deltax, deltay, color):
  108. Sprite.__init__(self, game, x, y, r, color)
  109. self.deltax = deltax
  110. self.deltay = deltay
  111.  
  112.  
  113. class Tank(Sprite):
  114. def __init__(self, game, x, y, r, color):
  115. Sprite.__init__(self, game, x, y, r, color)
  116. game.canvas.bind_all('<KeyPress-Left>', self.turn_left)
  117. game.canvas.bind_all('<KeyPress-Right>', self.turn_right)
  118. game.canvas.bind_all('<KeyPress-Up>', self.turn_up)
  119. game.canvas.bind_all('<KeyPress-Down>', self.turn_down)
  120. game.canvas.bind_all('<KeyPress-space>', self.fire)
  121.  
  122. def turn_left(self, event):
  123. self.deltax = self.deltax - 1
  124. def turn_right(self, event):
  125. self.deltax = self.deltax + 1
  126. def turn_up(self, event):
  127. self.deltay = self.deltay - 1
  128. def turn_down(self, event):
  129. self.deltay = self.deltay + 1
  130. def fire(self,event):
  131. x,y = self.game.get_center(self)
  132. b_deltax = self.deltax
  133. b_deltay = self.deltay
  134. bul = Bullet(self.game, x+b_deltax+self.r*2, y+b_deltax+self.r*2, 3, b_deltax*1.5, b_deltay*1.5, "black")
  135. self.game.sprite.append(bul)
  136.  
  137.  
  138. g = Game(width, height)
  139. for i in range(1):
  140. x=randint(r,width-r)
  141. y=randint(r,height-r)
  142. g.sprite.append(Enemy(g, x, y, r, 'red'))
  143. Enemy.team = 0
  144. Enemy_Bullet.team = 0
  145. Bullet.team = 1
  146. Tank.team = 1
  147. g.sprite.append(Tank(g, width/2, height/2, 20, 'black'))
  148.  
  149.  
  150. g.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement