object_handler.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. from sprite_object import *
  2. from npc import *
  3. from random import choices, randrange
  4. class ObjectHandler:
  5. def __init__(self, game):
  6. self.game = game
  7. self.sprite_list = []
  8. self.npc_list = []
  9. self.npc_sprite_path = 'resources/sprites/npc/'
  10. self.static_sprite_path = 'resources/sprites/static_sprites/'
  11. self.anim_sprite_path = 'resources/sprites/animated_sprites/'
  12. add_sprite = self.add_sprite
  13. add_npc = self.add_npc
  14. self.npc_positions = {}
  15. # spawn npc
  16. self.enemies = 20 # npc count
  17. self.npc_types = [SoldierNPC, CacoDemonNPC, CyberDemonNPC]
  18. self.weights = [70, 20, 10]
  19. self.restricted_area = {(i, j) for i in range(10) for j in range(10)}
  20. self.spawn_npc()
  21. # sprite map
  22. add_sprite(AnimatedSprite(game))
  23. add_sprite(AnimatedSprite(game, pos=(1.5, 1.5)))
  24. add_sprite(AnimatedSprite(game, pos=(1.5, 7.5)))
  25. add_sprite(AnimatedSprite(game, pos=(5.5, 3.25)))
  26. add_sprite(AnimatedSprite(game, pos=(5.5, 4.75)))
  27. add_sprite(AnimatedSprite(game, pos=(7.5, 2.5)))
  28. add_sprite(AnimatedSprite(game, pos=(7.5, 5.5)))
  29. add_sprite(AnimatedSprite(game, pos=(14.5, 1.5)))
  30. add_sprite(AnimatedSprite(game, pos=(14.5, 4.5)))
  31. add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(14.5, 5.5)))
  32. add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(14.5, 7.5)))
  33. add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(12.5, 7.5)))
  34. add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(9.5, 7.5)))
  35. add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(14.5, 12.5)))
  36. add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(9.5, 20.5)))
  37. add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(10.5, 20.5)))
  38. add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(3.5, 14.5)))
  39. add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(3.5, 18.5)))
  40. add_sprite(AnimatedSprite(game, pos=(14.5, 24.5)))
  41. add_sprite(AnimatedSprite(game, pos=(14.5, 30.5)))
  42. add_sprite(AnimatedSprite(game, pos=(1.5, 30.5)))
  43. add_sprite(AnimatedSprite(game, pos=(1.5, 24.5)))
  44. # npc map
  45. # add_npc(SoldierNPC(game, pos=(11.0, 19.0)))
  46. # add_npc(SoldierNPC(game, pos=(11.5, 4.5)))
  47. # add_npc(SoldierNPC(game, pos=(13.5, 6.5)))
  48. # add_npc(SoldierNPC(game, pos=(2.0, 20.0)))
  49. # add_npc(SoldierNPC(game, pos=(4.0, 29.0)))
  50. # add_npc(CacoDemonNPC(game, pos=(5.5, 14.5)))
  51. # add_npc(CacoDemonNPC(game, pos=(5.5, 16.5)))
  52. # add_npc(CyberDemonNPC(game, pos=(14.5, 25.5)))
  53. def spawn_npc(self):
  54. for i in range(self.enemies):
  55. npc = choices(self.npc_types, self.weights)[0]
  56. pos = x, y = randrange(self.game.map.cols), randrange(self.game.map.rows)
  57. while (pos in self.game.map.world_map) or (pos in self.restricted_area):
  58. pos = x, y = randrange(self.game.map.cols), randrange(self.game.map.rows)
  59. self.add_npc(npc(self.game, pos=(x + 0.5, y + 0.5)))
  60. def check_win(self):
  61. if not len(self.npc_positions):
  62. self.game.object_renderer.win()
  63. pg.display.flip()
  64. pg.time.delay(1500)
  65. self.game.new_game()
  66. def update(self):
  67. self.npc_positions = {npc.map_pos for npc in self.npc_list if npc.alive}
  68. [sprite.update() for sprite in self.sprite_list]
  69. [npc.update() for npc in self.npc_list]
  70. self.check_win()
  71. def add_npc(self, npc):
  72. self.npc_list.append(npc)
  73. def add_sprite(self, sprite):
  74. self.sprite_list.append(sprite)