예제 #1
0
class Game(object):
    
    def __init__(self, screen_size, resource_path):
        global _game
        _game = self
        
        self.mode = None
        self.running = False
        self.screen_size = screen_size
        
        pygame.mixer.pre_init(frequency=48000)
        pygame.init()
        pygame.display.set_caption("It's All Come to This")
                                   
        self.clock = pygame.time.Clock()
        self.screen = pygame.display.set_mode(self.screen_size, pygame.DOUBLEBUF | pygame.HWSURFACE)
        
        self.component_manager = componentmanager.ComponentManager()
        self.component_manager.register_module(component)
        self.component_manager.register_module(event)
        self.component_manager.register_module(locationcomponets)
        
        self.entity_manager = EntityManager()
            
        self.resource_manager = ResourceManager(resource_path)
        self.resource_manager.register_loader('entity', LoadEntityData)
        self.resource_manager.register_loader('image', LoadImage)
        self.resource_manager.register_loader('inputmap', LoadInputMapping)
        self.resource_manager.register_loader('sound', LoadSound)
        self.resource_manager.register_loader('text', LoadText)
        self.resource_manager.register_loader('event', LoadEvent)

        self.input_manager = InputManager()
        self.view = View(pygame.display.get_surface(), [SolidBackgroundLayer((128,192,128,255)), 
                                                        SimpleLayer('draw-location'),
                                                        SimpleLayer('draw-human'), 
                                                        SimpleLayer('draw-ui')])
        
    def run(self, mode):
        self.entity_manager.add_entity(Entity('camp'))
        self.entity_manager.add_entity(Entity('report'))
        
        origin = Vec2d(600, 200)
        num_humans = 6
        
        names = self.resource_manager.get('text','names.txt').split('\n')
        
        for i in range(num_humans):
            pos = Vec2d(100,0).rotated(360.0*i/(num_humans)) + origin
            image = random.choice(('male.png', 'female.png'))
            self.entity_manager.add_entity(Entity('human', name=random.choice(names), home_x=pos.x, home_y=pos.y, image=image))
        
        self.entity_manager.add_entity(Entity('mouse'))
        
        self.entity_manager.add_entity(Entity('farm'))
        self.entity_manager.add_entity(Entity('wall'))
        self.entity_manager.add_entity(Entity('well'))
        self.entity_manager.add_entity(Entity('rest-camp'))
        self.entity_manager.add_entity(Entity('work-camp'))
        self.entity_manager.add_entity(Entity('explore'))
        self.entity_manager.add_entity(Entity('infirmary'))
        
        self.entity_manager.add_entity(Entity('construction-site'))
        self.entity_manager.add_entity(Entity('dump'))
        self.entity_manager.add_entity(Entity('hospital'))
        self.entity_manager.add_entity(Entity('rival-camp'))
        self.entity_manager.add_entity(Entity('water-tower'))
        self.entity_manager.add_entity(Entity('forest'))
        
        self.entity_manager.add_entity(Entity("camp"))
        
        self.entity_manager.add_entity(Entity('camp-food-meter-ui'))
        self.entity_manager.add_entity(Entity('camp-defense-meter-ui'))
        self.entity_manager.add_entity(Entity('camp-shelter-meter-ui'))
        self.entity_manager.add_entity(Entity('camp-water-meter-ui'))
        self.entity_manager.add_entity(Entity('camp-medicine-meter-ui'))
        
        self.entity_manager.add_entity(Entity('button'))
        self.entity_manager.add_entity(Entity('info-window'))

        self.entity_manager.commit_changes()
        

        self.change_mode(mode)
        self.running = True

        self.entity_manager.commit_changes()
        
        while self.running:
            dt = self.clock.tick(60) / 1000.0
            
            events = self.input_manager.process_events()
            for event in events:
                if event.target == 'GAME':
                    if event.action == 'QUIT' and event.value > 0:
                        self.running = False
                    elif event.action == 'FULLSCREEN' and event.value > 0:
                        pygame.display.toggle_fullscreen()
                    elif event.action == 'RELOAD' and event.value > 0:
                        self.resource_manager.clear()
                else:
                    self.mode.handle_event(event)
            
            self.mode.update(dt)
            self.mode.draw()
            
            self.entity_manager.commit_changes()
            pygame.display.flip()
            
    def change_mode(self, new_mode):
        print self.mode, '->', new_mode
        if self.mode:
            self.mode.leave()
        self.mode = new_mode
        self.mode.enter()
        self.entity_manager.commit_changes()
예제 #2
0
class Game(object):
    def __init__(self, screen_size, resource_path):
        global _game
        _game = self

        self.mode = None
        self.running = False
        self.screen_size = screen_size

        pygame.mixer.pre_init(frequency=44100)
        pygame.init()
        pygame.display.set_caption('After You!')

        self.clock = pygame.time.Clock()
        self.screen = pygame.display.set_mode(
            self.screen_size,
            pygame.OPENGL | pygame.DOUBLEBUF | pygame.HWSURFACE)

        self.component_manager = componentmanager.ComponentManager()
        self.component_manager.register_component(MovementComponent())
        self.component_manager.register_component(ExampleComponent())
        self.component_manager.register_component(AnimationComponent())
        self.component_manager.register_component(DrawComponent())
        self.component_manager.register_component(InputMovementComponent())
        self.component_manager.register_component(DrawHitBoxComponent())
        self.component_manager.register_component(DrawCircleComponent())
        self.component_manager.register_component(SmokeScreenComponent())
        self.component_manager.register_component(PlayerCollisionComponent())
        self.component_manager.register_component(DecoyMovementComponent())
        self.component_manager.register_component(SelfDestructComponent())
        self.component_manager.register_component(SpawnDecoyComponent())
        self.component_manager.register_component(DrawScoreComponent())
        self.component_manager.register_component(MinefieldComponent())
        self.component_manager.register_component(DrawTimerComponent())
        self.component_manager.register_component(UpdateTimerComponent())
        self.component_manager.register_component(SpeedBoostComponent())
        self.component_manager.register_component(ButtonInterpreterComponent())
        self.component_manager.register_component(DrawActionsComponent())
        self.component_manager.register_component(SpawnVortexComponent())
        self.component_manager.register_component(DrawVortextComponent())
        self.component_manager.register_component(GrowVortextComponent())
        self.component_manager.register_component(TrapComponent())
        self.component_manager.register_component(HideComponent())
        self.component_manager.register_component(AIActionComponent())
        self.component_manager.register_component(AIMovementComponent())

        self.entity_manager = EntityManager()

        self.resource_manager = ResourceManager(resource_path)
        self.resource_manager.register_loader('data', LoadEntityData)
        self.resource_manager.register_loader('image', LoadImage)
        self.resource_manager.register_loader('inputmap', LoadInputMapping)
        self.resource_manager.register_loader('sound', LoadSound)

        self.input_manager = InputManager()

        self.renderer = GLRenderer()
        self.renderer.resize(self.screen_size)

        self.view = View([SimpleLayer('draw'), SimpleLayer('ui')])

    def run(self, mode):
        p1 = Entity("player1")
        p2 = Entity("player2")
        self.entity_manager.add_entity(p1)
        self.entity_manager.add_entity(p2)
        self.entity_manager.add_entity(Entity("scoreui-player1"))
        self.entity_manager.add_entity(Entity("scoreui-player2"))
        self.entity_manager.add_entity(Entity("actionui-player1"))
        self.entity_manager.add_entity(Entity("actionui-player2"))
        self.entity_manager.add_entity(Entity("timerui"))

        self.renderer.createBackground()

        self.change_mode(mode)
        self.running = True

        self.entity_manager.commit_changes()

        while self.running:
            dt = self.clock.tick(60) / 1000.0

            events = self.input_manager.process_events()
            for event in events:
                if event.target == 'GAME':
                    if event.action == 'QUIT' and event.value > 0:
                        self.running = False
                    elif event.action == 'FULLSCREEN' and event.value > 0:
                        pygame.display.toggle_fullscreen()
                    elif event.action == 'RELOAD' and event.value > 0:
                        self.resource_manager.clear()
                else:
                    self.mode.handle_event(event)

            self.mode.update(dt)
            self.mode.draw()

            self.entity_manager.commit_changes()
            pygame.display.flip()

    def change_mode(self, new_mode):
        if self.mode:
            self.mode.leave()
        self.mode = new_mode
        self.mode.enter()
예제 #3
0
class Game(object):
    
    def __init__(self, screen_size, resource_path):
        self.mode = None
        self.screen_size = screen_size
        self.map_size = (128,128)
        self.tile_size = (32,32)
        self.world_size = (self.tile_size[0] * self.map_size[0], self.tile_size[1] * self.map_size[1])
        self.world_rooms = (8,8)

        pygame.init()
        
        self.clock = pygame.time.Clock()
        self.screen = pygame.display.set_mode(self.screen_size)
        
        self.component_manager = componentmanager.ComponentManager()
        self.component_manager.register_component('MovementComponent', MovementComponent())
        self.component_manager.register_component('ExampleComponent', ExampleComponent())
        self.component_manager.register_component('AnimationComponent', AnimationComponent())
        self.component_manager.register_component('DrawComponent', DrawComponent())
        self.component_manager.register_component('InputMovementComponent', InputMovementComponent())
        self.component_manager.register_component('PlayerCollisionComponent', PlayerCollisionComponent())
        self.component_manager.register_component('ZombieAIComponent', ZombieAIComponent())
        self.component_manager.register_component('ZombieAIComponent', ZombieAIComponent())
        self.component_manager.register_component('CarComponent', CarComponent())
        self.component_manager.register_component('DrawHitBoxComponent', DrawHitBoxComponent()) 
        self.component_manager.register_component('AttackComponent', AttackComponent())
        self.component_manager.register_component('ItemComponent', ItemComponent())
        self.component_manager.register_component('InputActionComponent', InputActionComponent())
        self.component_manager.register_component('DeadComponent', DeadComponent())
        self.component_manager.register_component('ZombieCollisionComponent', ZombieCollisionComponent())
        
        self.entity_manager = EntityManager()
            
        self.resource_manager = ResourceManager(resource_path)
        self.resource_manager.register_loader('definition', LoadEntityData)
        self.resource_manager.register_loader('sprite', LoadImage)
        self.resource_manager.register_loader('inputmap', LoadInputMapping)
        self.resource_manager.register_loader('sound', LoadSound)

        self.input_manager = InputManager()
        self.input_manager.init_joysticks()
        
    def run(self, mode):
        #pygame.display.toggle_fullscreen()
        self.mode = mode
        self.music = self.resource_manager.get('sound', 'Teamawesome_zombies_LOOP.wav')
        self.music.play(loops=-1)
        self.entity_manager.add_entity(Entity('car'))
        for e in [Entity('character1'), Entity('character2'), Entity('character3'), Entity('character4')]:
            self.entity_manager.add_entity(e)
        self.item_names = ["engine", "gas-can", "radiator", "steering-wheel-2", "tire", "steering-wheel", "toolbox", "tire", "tire", "tire"]

        for i in self.item_names:
            x_pos = (self.world_size[0]/self.world_rooms[0] * randint(0, self.world_rooms[0]-1)) + self.world_size[0]/self.world_rooms[0]/2
            y_pos = (self.world_size[1]/self.world_rooms[1] * randint(0, self.world_rooms[1]-1)) + self.world_size[1]/self.world_rooms[1]/2
            self.entity_manager.add_entity(Entity(i, x=x_pos, y=y_pos))
        
        self.entity_manager.add_entity(Entity('splashscreen'))

        self.renderer = Render(self)

        self.zombies = []
        for _ in range(50):
            x_pos = (self.world_size[0]/self.world_rooms[0] * randint(0, self.world_rooms[0]-1)) + self.world_size[0]/self.world_rooms[0]/2
            y_pos = (self.world_size[1]/self.world_rooms[1] * randint(0, self.world_rooms[1]-1)) + self.world_size[1]/self.world_rooms[1]/2
            self.entity_manager.add_entity(Entity("zombie", x=x_pos, y=y_pos))

        while True:
            dt = self.clock.tick(60) / 1000.0
            
            events = self.input_manager.process_events()
            for event in events:
                if event.target == 'GAME':
                    if event.action == 'QUIT' and event.value > 0:
                        sys.exit()
                    elif event.action == 'FULLSCREEN' and event.value > 0:
                        pygame.display.toggle_fullscreen()
                    elif event.action == 'RELOAD' and event.value > 0:
                        self.resource_manager.clear()
                else:
                    self.mode.handle_event(event)
            
            self.mode.update(dt)
            self.mode.draw()
            
            pygame.display.flip()
            pygame.display.set_caption('fps: %.0d' % self.clock.get_fps())
예제 #4
0
class Game(object):
    
    def __init__(self, screen_size, resource_path):
        global _game
        _game = self
        
        self.mode = None
        self.running = False
        self.screen_size = screen_size
        
        pygame.mixer.pre_init(frequency=44100)
        pygame.init()
        pygame.display.set_caption('After You!')
                                   
        self.clock = pygame.time.Clock()
        self.screen = pygame.display.set_mode(self.screen_size, pygame.OPENGL | pygame.DOUBLEBUF | pygame.HWSURFACE)
        
        self.component_manager = componentmanager.ComponentManager()
        self.component_manager.register_component(MovementComponent())
        self.component_manager.register_component(ExampleComponent())
        self.component_manager.register_component(AnimationComponent())
        self.component_manager.register_component(DrawComponent())
        self.component_manager.register_component(InputMovementComponent())
        self.component_manager.register_component(DrawHitBoxComponent()) 
        self.component_manager.register_component(DrawCircleComponent())
        self.component_manager.register_component(SmokeScreenComponent())
        self.component_manager.register_component(PlayerCollisionComponent())
        self.component_manager.register_component(DecoyMovementComponent())
        self.component_manager.register_component(SelfDestructComponent())
        self.component_manager.register_component(SpawnDecoyComponent())
        self.component_manager.register_component(DrawScoreComponent())
        self.component_manager.register_component(MinefieldComponent())
        self.component_manager.register_component(DrawTimerComponent())
        self.component_manager.register_component(UpdateTimerComponent())
        self.component_manager.register_component(SpeedBoostComponent())
        self.component_manager.register_component(ButtonInterpreterComponent())
        self.component_manager.register_component(DrawActionsComponent())
        self.component_manager.register_component(SpawnVortexComponent())
        self.component_manager.register_component(DrawVortextComponent())
        self.component_manager.register_component(GrowVortextComponent())
        self.component_manager.register_component(TrapComponent())
        self.component_manager.register_component(HideComponent())
        self.component_manager.register_component(AIActionComponent())
        self.component_manager.register_component(AIMovementComponent())
        
        self.entity_manager = EntityManager()
            
        self.resource_manager = ResourceManager(resource_path)
        self.resource_manager.register_loader('data', LoadEntityData)
        self.resource_manager.register_loader('image', LoadImage)
        self.resource_manager.register_loader('inputmap', LoadInputMapping)
        self.resource_manager.register_loader('sound', LoadSound)

        self.input_manager = InputManager()
        
        self.renderer = GLRenderer()
        self.renderer.resize(self.screen_size)
       
        self.view = View([SimpleLayer('draw'), SimpleLayer('ui')])
        
    def run(self, mode):
        p1 = Entity("player1")
        p2 = Entity("player2")
        self.entity_manager.add_entity(p1)
        self.entity_manager.add_entity(p2)
        self.entity_manager.add_entity(Entity("scoreui-player1"))
        self.entity_manager.add_entity(Entity("scoreui-player2"))
        self.entity_manager.add_entity(Entity("actionui-player1"))
        self.entity_manager.add_entity(Entity("actionui-player2"))
        self.entity_manager.add_entity(Entity("timerui"))
        
        
        
        self.renderer.createBackground()

        self.change_mode(mode)
        self.running = True

        self.entity_manager.commit_changes()
        
        while self.running:
            dt = self.clock.tick(60) / 1000.0
            
            events = self.input_manager.process_events()
            for event in events:
                if event.target == 'GAME':
                    if event.action == 'QUIT' and event.value > 0:
                        self.running = False
                    elif event.action == 'FULLSCREEN' and event.value > 0:
                        pygame.display.toggle_fullscreen()
                    elif event.action == 'RELOAD' and event.value > 0:
                        self.resource_manager.clear()
                else:
                    self.mode.handle_event(event)
            
            self.mode.update(dt)
            self.mode.draw()
            
            self.entity_manager.commit_changes()
            pygame.display.flip()
            
    def change_mode(self, new_mode):
        if self.mode:
            self.mode.leave()
        self.mode = new_mode
        self.mode.enter()