Advertisement
Guest User

Untitled

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