Advertisement
Guest User

Untitled

a guest
Mar 20th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.00 KB | None | 0 0
  1. import pygame
  2. from precode2 import Vector2D
  3. from random import randint
  4. import math
  5.  
  6. SPEED_LIMITTOP = 5
  7. SPEED_LIMITBOT = -5
  8.  
  9. class Flyer():
  10.  
  11. def __init__(self, radius, pos, color, speed):
  12. self.radius = radius
  13. self.pos = pos
  14. self.color = color
  15. self.speed = speed
  16.  
  17.  
  18. class Boids(Flyer):
  19.  
  20. def __init__(self, radius, pos, color, speed):
  21. Flyer.__init__(self, radius, pos, color, speed)
  22.  
  23. def draw(self, screen):
  24. pygame.draw.circle(screen, self.color ,(int(self.pos.x), (int(self.pos.y))),10)
  25.  
  26. def move(self):
  27. self.pos.x += self.speed.x
  28. self.pos.y += self.speed.y
  29.  
  30. def walls(self):
  31. if self.pos.x >= 1240:
  32. self.speed.x -= 7
  33. if self.pos.x <= 40:
  34. self.speed.x += 7
  35. if self.pos.y >= 680:
  36. self.speed.y -= 7
  37. if self.pos.y <= 40:
  38. self.speed.y += 7
  39.  
  40. def speed_check(self, boidlist):
  41.  
  42. if self.speed.x > SPEED_LIMITTOP:
  43. self.speed.x = SPEED_LIMITTOP
  44. if self.speed.y > SPEED_LIMITTOP:
  45. self.speed.y = SPEED_LIMITTOP
  46.  
  47. if self.speed.x < SPEED_LIMITBOT:
  48. self.speed.x = SPEED_LIMITBOT
  49. if self.speed.y < SPEED_LIMITBOT:
  50. self.speed.y = SPEED_LIMITBOT
  51.  
  52. def rule1(self, boidlist):
  53.  
  54. close_boids = []
  55. sum_x = 0
  56. sum_y = 0
  57.  
  58. #Legge i egen funksjon
  59. for element in boidlist:
  60. if element is not self:
  61. distance = self.pos - element.pos
  62. if distance.__abs__() < 100:
  63. close_boids.append(element)
  64.  
  65. # Check if list is greater than 1
  66. if len(close_boids) >= 1:
  67. for boid in close_boids:
  68. sum_x += self.pos.x - boid.pos.x
  69. sum_y += self.pos.y - boid.pos.y
  70.  
  71. try:
  72. avgpos_x = sum_x / len(close_boids)
  73. avgpos_y = sum_y / len(close_boids)
  74.  
  75. normalized = math.sqrt((avgpos_x*avgpos_x)+(avgpos_y*avgpos_y))
  76.  
  77. normalx = avgpos_x/normalized * SPEED_LIMITTOP
  78. normaly = avgpos_y/normalized * SPEED_LIMITTOP
  79.  
  80. self.speed.x -= normalx
  81. self.speed.y -= normaly
  82.  
  83. except:
  84. ZeroDivisionError
  85.  
  86. def rule2(self, boidlist):
  87.  
  88. close_boids = []
  89. sum_x = 0
  90. sum_y = 0
  91.  
  92. #Legge i egen funksjon
  93. for element in boidlist:
  94. if element is not self:
  95. distance = self.pos - element.pos
  96. if distance.__abs__() < 100:
  97. close_boids.append(element)
  98.  
  99. if len(close_boids) > 0
  100.  
  101. def rule3(self, boidlist):
  102.  
  103. close_boids = []
  104. sum_x = 0
  105. sum_y = 0
  106.  
  107. #Legge i egen funksjon
  108. for element in boidlist:
  109. if element is not self:
  110. distance = self.pos - element.pos
  111. if distance.__abs__() < 100:
  112. close_boids.append(element)
  113.  
  114. # Check if list is greater than 1
  115. if len(close_boids) >= 1:
  116. for boid in close_boids:
  117. sum_x += boid.speed.x
  118. sum_y += boid.speed.y
  119.  
  120. try:
  121. avg_x = sum_x / len(close_boids)
  122. avg_y = sum_y / len(close_boids)
  123.  
  124. normalized = math.sqrt((avg_x*avg_x)+(avg_y*avg_y))
  125.  
  126. normalx = avg_x/normalized * SPEED_LIMITTOP
  127. normaly = avg_y/normalized * SPEED_LIMITTOP
  128.  
  129. self.speed.x += normalx
  130. self.speed.y += normaly
  131.  
  132. except:
  133. ZeroDivisionError
  134.  
  135.  
  136. # Boids change color if close to each other
  137. #if len(close_boids) > 1:
  138. # for element in close_boids:
  139. # element.color = (0,0,250)
  140.  
  141.  
  142.  
  143. class Hoiks(Boids):
  144.  
  145. def __init__(self, radius, pos, color, speed):
  146. Flyer.__init__(self, radius, pos, color, speed)
  147.  
  148. class Game():
  149.  
  150. def __init__(self):
  151. pygame.init()
  152. self.screen = pygame.display.set_mode((1280, 720))
  153. self.clock = pygame.time.Clock()
  154.  
  155. self.done = False
  156. self.boidlist = []
  157.  
  158. for i in range(15):
  159. self.boid = Boids(8, Vector2D(randint(0,640),randint(0,480)), ((255,0,0)), Vector2D(randint(5,10),randint(5,6)))
  160. self.boidlist.append(self.boid)
  161.  
  162.  
  163. def run(self):
  164. while not self.done:
  165. for event in pygame.event.get():
  166. if event.type == pygame.QUIT:
  167. self.done = True
  168.  
  169. self.timepassed = self.clock.tick(30)
  170. self.screen.fill((150,150,0))
  171.  
  172. for i in self.boidlist:
  173. i.rule1(self.boidlist)
  174. i.rule3(self.boidlist)
  175. i.speed_check(self.boidlist)
  176. i.walls()
  177. i.move()
  178. i.draw(self.screen)
  179.  
  180. pygame.display.flip()
  181.  
  182. if __name__ == '__main__':
  183. game = Game()
  184. game.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement