| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- from sprite_object import *
- from npc import *
- from random import choices, randrange
- class ObjectHandler:
- def __init__(self, game):
- self.game = game
- self.sprite_list = []
- self.npc_list = []
- self.npc_sprite_path = 'resources/sprites/npc/'
- self.static_sprite_path = 'resources/sprites/static_sprites/'
- self.anim_sprite_path = 'resources/sprites/animated_sprites/'
- add_sprite = self.add_sprite
- add_npc = self.add_npc
- self.npc_positions = {}
- # spawn npc
- self.enemies = 20 # npc count
- self.npc_types = [SoldierNPC, CacoDemonNPC, CyberDemonNPC]
- self.weights = [70, 20, 10]
- self.restricted_area = {(i, j) for i in range(10) for j in range(10)}
- self.spawn_npc()
- # sprite map
- add_sprite(AnimatedSprite(game))
- add_sprite(AnimatedSprite(game, pos=(1.5, 1.5)))
- add_sprite(AnimatedSprite(game, pos=(1.5, 7.5)))
- add_sprite(AnimatedSprite(game, pos=(5.5, 3.25)))
- add_sprite(AnimatedSprite(game, pos=(5.5, 4.75)))
- add_sprite(AnimatedSprite(game, pos=(7.5, 2.5)))
- add_sprite(AnimatedSprite(game, pos=(7.5, 5.5)))
- add_sprite(AnimatedSprite(game, pos=(14.5, 1.5)))
- add_sprite(AnimatedSprite(game, pos=(14.5, 4.5)))
- add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(14.5, 5.5)))
- add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(14.5, 7.5)))
- add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(12.5, 7.5)))
- add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(9.5, 7.5)))
- add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(14.5, 12.5)))
- add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(9.5, 20.5)))
- add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(10.5, 20.5)))
- add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(3.5, 14.5)))
- add_sprite(AnimatedSprite(game, path=self.anim_sprite_path + 'red_light/0.png', pos=(3.5, 18.5)))
- add_sprite(AnimatedSprite(game, pos=(14.5, 24.5)))
- add_sprite(AnimatedSprite(game, pos=(14.5, 30.5)))
- add_sprite(AnimatedSprite(game, pos=(1.5, 30.5)))
- add_sprite(AnimatedSprite(game, pos=(1.5, 24.5)))
- # npc map
- # add_npc(SoldierNPC(game, pos=(11.0, 19.0)))
- # add_npc(SoldierNPC(game, pos=(11.5, 4.5)))
- # add_npc(SoldierNPC(game, pos=(13.5, 6.5)))
- # add_npc(SoldierNPC(game, pos=(2.0, 20.0)))
- # add_npc(SoldierNPC(game, pos=(4.0, 29.0)))
- # add_npc(CacoDemonNPC(game, pos=(5.5, 14.5)))
- # add_npc(CacoDemonNPC(game, pos=(5.5, 16.5)))
- # add_npc(CyberDemonNPC(game, pos=(14.5, 25.5)))
- def spawn_npc(self):
- for i in range(self.enemies):
- npc = choices(self.npc_types, self.weights)[0]
- pos = x, y = randrange(self.game.map.cols), randrange(self.game.map.rows)
- while (pos in self.game.map.world_map) or (pos in self.restricted_area):
- pos = x, y = randrange(self.game.map.cols), randrange(self.game.map.rows)
- self.add_npc(npc(self.game, pos=(x + 0.5, y + 0.5)))
- def check_win(self):
- if not len(self.npc_positions):
- self.game.object_renderer.win()
- pg.display.flip()
- pg.time.delay(1500)
- self.game.new_game()
- def update(self):
- self.npc_positions = {npc.map_pos for npc in self.npc_list if npc.alive}
- [sprite.update() for sprite in self.sprite_list]
- [npc.update() for npc in self.npc_list]
- self.check_win()
- def add_npc(self, npc):
- self.npc_list.append(npc)
- def add_sprite(self, sprite):
- self.sprite_list.append(sprite)
|