예제 #1
0
 def __init__(self,_rules=None):
     settings = settingsManager.getSetting().setting
     
     self.rules = _rules
     self.height = settings['windowHeight']
     self.width = settings['windowWidth']
     
     pygame.init()
     screen = pygame.display.get_surface()
     
     background = pygame.Surface(screen.get_size())
     background = background.convert()
 
     clock = pygame.time.Clock()
     self.player_controls = []
     self.player_panels = []
     
     for i in range(0,4):
         self.player_controls.append(settingsManager.getControls(i))
         self.player_panels.append(PlayerPanel(i))
         self.player_controls[i].linkObject(self.player_panels[i]) #So playerPanel will take the inputs
         self.player_controls[i].flushInputs()
     
     status = 0
     musicManager.getMusicManager().stopMusic(100)
     
     while status == 0:
         music = musicManager.getMusicManager()
         music.doMusicEvent()
         if not musicManager.getMusicManager().isPlaying():
             musicManager.getMusicManager().rollMusic('css')
         
         #Start event loop
         for bindings in self.player_controls:
             bindings.passInputs()
             
         for event in pygame.event.get():
             
             for bindings in self.player_controls:
                 k = bindings.getInputs(event)
                 if k == 'attack':
                     if self.checkForSelections():
                         sss.StageScreen(self.rules,self.getFightersFromPanels())
                         for panel in self.player_panels:
                             panel.active_object = panel.wheel
                             panel.chosen_fighter = None
                             panel.bg_surface = None                
                         for i in range(0,4):
                             self.player_controls[i].linkObject(self.player_panels[i]) #So playerPanel will take the inputs
                             self.player_controls[i].flushInputs()
             if event.type == pygame.QUIT:
                 status = -1
             elif event.type == pygame.KEYDOWN:
                 if event.key == pygame.K_ESCAPE:
                     status = 1          
         #End event loop
         
         screen.fill((128, 128, 128))
         for panel in self.player_panels:
             panel.update()
             panel.draw(screen)
             
         pygame.display.flip()
         clock.tick(60)
예제 #2
0
 def startBattle(self,screen):
     
     # Fill background
     background = pygame.Surface(screen.get_size())
     background = background.convert()
     background.fill((128, 128, 128))
     current_stage = self.stage
     active_hitboxes = pygame.sprite.Group()
 
     #gameObjects
     currentFighters = self.players
     gameObjects = []
     gameObjects.extend(currentFighters)
     
     trackStocks = True
     trackTime = True
     if self.rules.stocks == 0:
         trackStocks = False
     if self.rules.time == 0:
         trackTime = False
         
     for fighter in currentFighters:
         fighter.rect.midbottom = current_stage.spawnLocations[fighter.playerNum]
         fighter.gameState = current_stage
         current_stage.follows.append(fighter.rect)
         if trackStocks: fighter.stocks = self.rules.stocks
     
     current_stage.initializeCamera()
         
     clock = pygame.time.Clock()
     
     clockTime = self.rules.time * 60
         
     """
     ExitStatus breaks us out of the loop. The battle loop can end in many ways, which is reflected here.
     In general, ExitStatus positive means that the game was supposed to end, while a negative value indicates an error.
     
     ExitStatus == 1: Battle ended early by user. No Contest.
     ExitStatus == 2: Battle ended by time or stock, decide winner, show victory screen
     ExitStatus == -1: Battle ended in error.
     """
     exitStatus = 0
     if trackTime:
         pygame.time.set_timer(pygame.USEREVENT+2, 1000)
         countdownSprite = spriteManager.TextSprite('5','full Pack 2025',128,[0,0,0])
         countdownSprite.rect.center = screen.get_rect().center
         countAlpha = 0
         countdownSprite.alpha(countAlpha)
         
     while exitStatus == 0:
         for event in pygame.event.get():
             if event.type == pygame.QUIT:
                 sys.exit()
                 return -1
             if event.type == pygame.KEYDOWN:
                 if event.key == pygame.K_RETURN:
                     print("saving screenshot")
                     pygame.image.save(screen,settingsManager.createPath('screenshot.jpg'))
                 
                 for fight in currentFighters:
                     fight.keyPressed(event.key)
             if event.type == pygame.KEYUP:
                 if event.key == pygame.K_ESCAPE:
                     exitStatus = 1
                 for fight in currentFighters:
                     fight.keyReleased(event.key)
             if event.type == pygame.JOYAXISMOTION:
                 for fight in currentFighters:
                     fight.joyAxisMotion(event.joy, event.axis)
             if event.type == pygame.JOYBUTTONDOWN:
                 for fight in currentFighters:
                     fight.joyButtonPressed(event.joy, event.button)
             if event.type == pygame.JOYBUTTONUP:
                 for fight in currentFighters:
                     fight.joyButtonReleased(event.joy, event.button)
             if event.type == pygame.USEREVENT+2:
                 pygame.time.set_timer(pygame.USEREVENT+2, 1000)
                 clockTime -= 1
                 print(clockTime)
                 if clockTime <= 5 and clockTime > 0:
                     countdownSprite.changeText(str(clockTime))
                     countAlpha = 255
                 if clockTime == 0:
                     exitStatus = 2
         # End pygame event loop
                                
         screen.fill([100, 100, 100])
         
         current_stage.update()
         current_stage.cameraUpdate()
         current_stage.drawBG(screen)
         for obj in gameObjects:
             obj.update()
             if hasattr(obj,'active_hitboxes'):
                 active_hitboxes.add(obj.active_hitboxes)
             
             offset = current_stage.stageToScreen(obj.rect)
             scale =  current_stage.getScale()
             obj.draw(screen,offset,scale)
             if hasattr(obj, 'hurtbox'):
                 if (self.settings['showHurtboxes']): 
                     offset = current_stage.stageToScreen(obj.hurtbox.rect)
                     obj.hurtbox.draw(screen,offset,scale)
                 
                 hitbox_collisions = pygame.sprite.spritecollide(obj.hurtbox, active_hitboxes, False)
                 for hbox in hitbox_collisions:
                     if hbox.owner != obj:
                         hbox.onCollision(obj)
             if (self.settings['showHitboxes']):
                 for hbox in active_hitboxes:
                     hbox.draw(screen,current_stage.stageToScreen(hbox.rect),scale)
         for fight in currentFighters:
             if fight.rect.right < current_stage.blast_line.left or fight.rect.left > current_stage.blast_line.right or fight.rect.top > current_stage.blast_line.bottom or fight.rect.bottom < current_stage.blast_line.top:
                 if not trackStocks:
                     # Get score
                     fight.die()
                 else:
                     fight.stocks -= 1
                     print fight.stocks
                     if fight.stocks == 0:
                         fight.die(False)
                         currentFighters.remove(fight)
                         #If someon's eliminated and there's 1 or fewer people left
                         if len(currentFighters) < 2:
                             exitStatus = 2 #Game set
                     else: fight.die()
         
         if trackTime and clockTime <= 5:
             countdownSprite.draw(screen, countdownSprite.rect.topleft, 1)
             countAlpha = max(0,countAlpha - 5)
             countdownSprite.alpha(countAlpha)
             
         # End object updates
         
         current_stage.drawFG(screen)    
         clock.tick(60)  
         pygame.display.flip()
     # End while loop
     
     if exitStatus == 1:
         print("NO CONTEST")
     elif exitStatus == 2:
         musicManager.getMusicManager().stopMusic()
         frameHold = 0
         gameSprite = spriteManager.TextSprite('GAME!','full Pack 2025',128,[0,0,0])
         gameSprite.rect.center = screen.get_rect().center
         while frameHold < 150:
             gameSprite.draw(screen, gameSprite.rect.topleft, 1)
             clock.tick(60)
             pygame.display.flip()
             frameHold += 1
         print("GAME SET")
     elif exitStatus == -1:
         print("ERROR!")
         
     return exitStatus # This'll pop us back to the character select screen.
예제 #3
0
    def __init__(self,rules,characters):
        settings = settingsManager.getSetting().setting
        self.rules = rules
        self.fighters = characters
        self.stages = []
        self.getStages()
        self.grid = StageGrid(self.stages)
        
        self.height = settings['windowHeight']
        self.width = settings['windowWidth']
        
        pygame.init()
        screen = pygame.display.set_mode((self.width, self.height))
        pygame.display.set_caption(settings['windowName'])
        
        background = pygame.Surface(screen.get_size())
        background = background.convert()
    
        clock = pygame.time.Clock()
        self.playerControls = []
        self.playerPanels = []

        x = 0
        y = 0
        
        for i in range(0,4):
            self.playerControls.append(settingsManager.getControls(i))
        
        status = 0
        
        while status == 0:
            #Start event loop
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    sys.exit()
                elif event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_ESCAPE:
                        status = 1
                    
                    for i,bindings in enumerate(self.playerControls):
                        if bindings.get(event.key) == 'left':
                            self.grid.updateSelection(-1, 0)
                                
                        elif bindings.get(event.key) == 'right':
                            self.grid.updateSelection(1, 0)
                        
                        elif bindings.get(event.key) == 'up':
                            self.grid.updateSelection(0, -1)
                            
                        elif bindings.get(event.key) == 'down':
                            self.grid.updateSelection(0, 1)
                            
                        elif bindings.get(event.key) == 'attack':
                            if not self.grid.isStageStruckAt(self.grid.getXY()[0],self.grid.getXY()[1]):
                                #choose
                                if self.grid.getSelectedStage() == 'random':
                                    stage = self.grid.getRandomStage()
                                else:
                                    stage = self.grid.getSelectedStage()
                                
                                musicManager.getMusicManager().stopMusic(500)
                                #This will wait until the music fades out for cool effect
                                while musicManager.getMusicManager().isPlaying():
                                    pass
                                musicList = stage.getMusicList()
                                musicManager.getMusicManager().createMusicSet('stage', musicList)
                                musicManager.getMusicManager().rollMusic('stage')
                                currentBattle = battle.Battle(self.rules,self.fighters,stage.getStage())
                                currentBattle.startBattle(screen)
                                status = 1
                                #do something with battle result
                                
                        #TODO: Fix this when special button is added
                        elif bindings.get(event.key) == 'jump':
                            x,y = self.grid.getXY()
                            self.grid.changeStageStruckAt(x,y)
                            
                elif event.type == pygame.KEYUP:
                    pass
                    #I shouldn't actually need this, but just in case.
                    
            #End event loop
            screen.fill((0,0,0))
            self.grid.drawScreen(screen)
            
            pygame.display.flip()
            clock.tick(60)
예제 #4
0
 def __init__(self,rules=None):
     settings = settingsManager.getSetting().setting
     
     self.rules = rules
     self.height = settings['windowHeight']
     self.width = settings['windowWidth']
     
     pygame.init()
     screen = pygame.display.set_mode((self.width, self.height))
     pygame.display.set_caption(settings['windowName'])
     
     background = pygame.Surface(screen.get_size())
     background = background.convert()
 
     clock = pygame.time.Clock()
     self.playerControls = []
     self.playerPanels = []
     
     for i in range(0,4):
         self.playerControls.append(settingsManager.getControls(i))
         self.playerPanels.append(PlayerPanel(i))
     
     status = 0
     while status == 0:
         if not musicManager.getMusicManager().isPlaying():
             musicManager.getMusicManager().rollMusic('menu')
         #Start event loop
         for event in pygame.event.get():
             if event.type == pygame.QUIT:
                 status = -1
             elif event.type == pygame.KEYDOWN:
                 if event.key == pygame.K_ESCAPE:
                     status = 1
                 
                 for i,bindings in enumerate(self.playerControls):
                     if bindings.get(event.key) == 'left':
                         self.playerPanels[i].keyPressed('left')    
                     elif bindings.get(event.key) == 'right':
                         self.playerPanels[i].keyPressed('right')
                     elif bindings.get(event.key) == 'attack':
                         self.playerPanels[i].keyPressed('confirm')
                         if self.checkForSelections():
                             sss.StageScreen(self.rules,self.getFightersFromPanels())
                             for panel in self.playerPanels:
                                 panel.activeObject = panel.wheel
                                 panel.chosenFighter = None
                                 panel.bgSurface = None
                     #TODO: Fix this when special button is added
                     elif bindings.get(event.key) == 'shield':
                         self.playerPanels[i].keyPressed('cancel')
                         
             elif event.type == pygame.KEYUP:
                 for i,bindings in enumerate(self.playerControls):
                     if bindings.get(event.key) == 'left':
                         self.playerPanels[i].keyReleased('left')
                     elif bindings.get(event.key) == 'right':
                         self.playerPanels[i].keyReleased('right')             
         #End event loop
         
         screen.fill((128, 128, 128))
         for panel in self.playerPanels:
             panel.update()
             panel.draw(screen)
             
         pygame.display.flip()
         clock.tick(60)
예제 #5
0
    def __init__(self, _rules, _characters):
        settings = settingsManager.getSetting().setting
        self.rules = _rules
        self.fighters = _characters
        self.stages = []
        self.getStages()
        self.grid = StageGrid(self.stages)

        self.height = settings['windowHeight']
        self.width = settings['windowWidth']

        pygame.init()
        screen = pygame.display.get_surface()

        background = pygame.Surface(screen.get_size())
        background = background.convert()

        clock = pygame.time.Clock()
        self.player_controls = []
        self.player_panels = []

        x = 0
        y = 0

        for i in range(0, 4):
            self.player_controls.append(settingsManager.getControls(i))

        status = 0

        while status == 0:
            music = musicManager.getMusicManager()
            music.doMusicEvent()
            #Start event loop
            for event in pygame.event.get():

                for bindings in self.player_controls:
                    k = bindings.getInputs(event, False, False)
                    if k == 'left':
                        self.grid.updateSelection(-1, 0)
                    elif k == 'right':
                        self.grid.updateSelection(1, 0)
                    elif k == 'up':
                        self.grid.updateSelection(0, -1)
                    elif k == 'down':
                        self.grid.updateSelection(0, 1)
                    elif k == 'attack':
                        if not self.grid.isStageStruckAt(
                                self.grid.getXY()[0],
                                self.grid.getXY()[1]):
                            #choose
                            if self.grid.getSelectedStage() == 'random':
                                stage = self.grid.getRandomStage()
                            else:
                                stage = self.grid.getSelectedStage()

                            musicManager.getMusicManager().stopMusic(500)
                            #This will wait until the music fades out for cool effect
                            while musicManager.getMusicManager().isPlaying():
                                pass
                            music_list = stage.getMusicList()
                            musicManager.getMusicManager().createMusicSet(
                                'stage', music_list)
                            musicManager.getMusicManager().rollMusic('stage')
                            bindings.flushInputs()
                            current_battle = battle.Battle(
                                self.rules, self.fighters, stage.getStage())
                            current_battle.startBattle(screen)
                            status = 1
                            #do something with battle result

                    elif k == 'jump':
                        x, y = self.grid.getXY()
                        self.grid.changeStageStruckAt(x, y)

                if event.type == pygame.QUIT:
                    sys.exit()
                elif event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_ESCAPE:
                        status = 1

            #End event loop
            screen.fill((0, 0, 0))
            self.grid.drawScreen(screen)

            pygame.display.flip()
            clock.tick(60)
예제 #6
0
    def __init__(self, _rules=None):
        settings = settingsManager.getSetting().setting

        self.rules = _rules
        self.height = settings['windowHeight']
        self.width = settings['windowWidth']

        pygame.init()
        screen = pygame.display.get_surface()

        background = pygame.Surface(screen.get_size())
        background = background.convert()

        clock = pygame.time.Clock()
        self.player_controls = []
        self.player_panels = []

        for i in range(0, 4):
            self.player_controls.append(settingsManager.getControls(i))
            self.player_panels.append(PlayerPanel(i))
            self.player_controls[i].linkObject(
                self.player_panels[i])  #So playerPanel will take the inputs
            self.player_controls[i].flushInputs()

        status = 0
        musicManager.getMusicManager().stopMusic(100)

        while status == 0:
            music = musicManager.getMusicManager()
            music.doMusicEvent()
            if not musicManager.getMusicManager().isPlaying():
                musicManager.getMusicManager().rollMusic('css')

            #Start event loop
            for bindings in self.player_controls:
                bindings.passInputs()

            for event in pygame.event.get():

                for bindings in self.player_controls:
                    k = bindings.getInputs(event)
                    if k == 'attack':
                        if self.checkForSelections():
                            sss.StageScreen(self.rules,
                                            self.getFightersFromPanels())
                            for panel in self.player_panels:
                                panel.active_object = panel.wheel
                                panel.chosen_fighter = None
                                panel.bg_surface = None
                            for i in range(0, 4):
                                self.player_controls[i].linkObject(
                                    self.player_panels[i]
                                )  #So playerPanel will take the inputs
                                self.player_controls[i].flushInputs()
                if event.type == pygame.QUIT:
                    status = -1
                elif event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_ESCAPE:
                        status = 1
            #End event loop

            screen.fill((128, 128, 128))
            for panel in self.player_panels:
                panel.update()
                panel.draw(screen)

            pygame.display.flip()
            clock.tick(60)
예제 #7
0
    def startBattle(self, _screen):
        self.screen = _screen
        self.debug_console = debugConsole.debugConsole(self.screen, self)

        # Try block to catch any and every error
        try:
            self.clock = pygame.time.Clock()
            self.clock_speed = 60
            self.clock_time = self.rules.time * 60
            self.screen.fill(self.stage.background_color)

            # game_objects
            self.current_fighters = self.players[
                :
            ]  # We have to slice this list so it passes by value instead of reference
            self.game_objects = []
            self.game_objects.extend(self.current_fighters)

            self.gui_objects = []

            if self.track_time:
                pygame.time.set_timer(pygame.USEREVENT + 2, 1000)
                countdown_sprite = spriteManager.TextSprite("5", "full Pack 2025", 128, [0, 0, 0])
                countdown_sprite.rect.center = self.screen.get_rect().center
                self.count_alpha = 0
                countdown_sprite.alpha(self.count_alpha)
                self.gui_objects.append(countdown_sprite)

                self.clock_sprite = spriteManager.TextSprite("8:00", "Orbitron Medium", 32, [0, 0, 0])
                self.clock_sprite.rect.topright = self.screen.get_rect().topright
                self.clock_sprite.changeText(str(self.clock_time / 60) + ":" + str(self.clock_time % 60).zfill(2))
                self.gui_objects.append(self.clock_sprite)

            gui_offset = self.screen.get_rect().width / (len(self.players) + 1)
            for fighter in self.current_fighters:
                fighter.loadSpriteLibrary()
                fighter.rect.midbottom = self.stage.spawn_locations[fighter.player_num]
                fighter.sprite.updatePosition(fighter.rect)
                fighter.ecb.normalize()
                fighter.ecb.store()
                fighter.game_state = self.stage
                fighter.players = self.players
                self.stage.follows.append(fighter.rect)
                log = DataLog()
                self.data_logs.append(log)
                fighter.data_log = log
                if self.track_stocks:
                    fighter.stocks = self.rules.stocks

                percent_sprite = HealthTracker(fighter)

                percent_sprite.rect.bottom = self.screen.get_rect().bottom
                percent_sprite.rect.centerx = gui_offset

                gui_offset += self.screen.get_rect().width / (len(self.players) + 1)

                self.gui_objects.append(percent_sprite)

            center_stage_rect = pygame.rect.Rect((0, 0), (16, 16))
            center_stage_rect.center = self.stage.size.center
            self.stage.follows.append(center_stage_rect)
            self.stage.initializeCamera()

            self.debug_mode = False
            """
            ExitStatus breaks us out of the loop. The battle loop can end in many ways, which is reflected here.
            In general, ExitStatus positive means that the game was supposed to end, while a negative value indicates an error.
            
            ExitStatus == 1: Battle ended early by submission. Declare the other players winners, show victory screen.
            ExitStatus == 2: Battle ended by time or stock. Declare winner from stocks and percentage, show victory screen. 
            ExitStatus == 3: Battle ended early by mutual agreement. Declare draw by agreement, return to menu. 
            ExitStatus == -1: Battle ended in error. Print stack trace, return to menu. 
            """
            self.exit_status = 0

            data_log = DataLog()
            data_log.addSection("test", 1)
            data_log.setData("test", 3, (lambda x, y: x + y))
            self.dirty_rects = [pygame.Rect(0, 0, self.settings["windowWidth"], self.settings["windowHeight"])]

            # initialises network
            self.network = network.Network()
            while self.exit_status == 0:
                self.gameEventLoop()

        except:
            try:
                import traceback

                traceback.print_exc()
            finally:
                self.exit_status = -1

        if self.exit_status == 1:
            musicManager.getMusicManager().stopMusic(1000)
            print("SUBMISSION")
        elif self.exit_status == 2:
            musicManager.getMusicManager().stopMusic()
            frame_hold = 0
            game_sprite = spriteManager.TextSprite("GAME!", "full Pack 2025", 128, [0, 0, 0])
            game_sprite.rect.center = self.screen.get_rect().center
            while frame_hold < 150:
                game_sprite.draw(self.screen, game_sprite.rect.topleft, 1)
                self.clock.tick(60)
                pygame.display.flip()
                frame_hold += 1
            print("GAME SET")
        elif self.exit_status == -1:
            musicManager.getMusicManager().stopMusic()
            frame_hold = 0
            game_sprite = spriteManager.TextSprite("NO CONTEST", "full Pack 2025", 64, [0, 0, 0])
            game_sprite.rect.center = self.screen.get_rect().center
            while frame_hold < 150:
                game_sprite.draw(self.screen, game_sprite.rect.topleft, 1)
                self.clock.tick(60)
                pygame.display.flip()
                frame_hold += 1
            print("NO CONTEST")

        self.endBattle(self.exit_status)
        return self.exit_status  # This'll pop us back to the character select screen.
예제 #8
0
    def startBattle(self, _screen):
        self.screen = _screen
        self.debug_console = debugConsole.debugConsole(self.screen, self)

        # Try block to catch any and every error
        try:
            self.clock = pygame.time.Clock()
            self.clock_speed = 60
            self.clock_time = self.rules.time * 60
            self.screen.fill(self.stage.background_color)

            #game_objects
            self.current_fighters = self.players[:]  #We have to slice this list so it passes by value instead of reference
            self.game_objects = []
            self.game_objects.extend(self.current_fighters)

            self.gui_objects = []

            if self.track_time:
                pygame.time.set_timer(pygame.USEREVENT + 2, 1000)
                countdown_sprite = spriteManager.TextSprite(
                    '5', 'full Pack 2025', 128, [0, 0, 0])
                countdown_sprite.rect.center = self.screen.get_rect().center
                self.count_alpha = 0
                countdown_sprite.alpha(self.count_alpha)
                self.gui_objects.append(countdown_sprite)

                self.clock_sprite = spriteManager.TextSprite(
                    '8:00', 'Orbitron Medium', 32, [0, 0, 0])
                self.clock_sprite.rect.topright = self.screen.get_rect(
                ).topright
                self.clock_sprite.changeText(
                    str(self.clock_time / 60) + ':' +
                    str(self.clock_time % 60).zfill(2))
                self.gui_objects.append(self.clock_sprite)

            gui_offset = self.screen.get_rect().width / (len(self.players) + 1)
            for fighter in self.current_fighters:
                fighter.loadSpriteLibrary()
                fighter.posx = self.stage.spawn_locations[
                    fighter.player_num][0]
                fighter.posy = self.stage.spawn_locations[
                    fighter.player_num][1] - 200
                fighter.updatePosition()
                fighter.ecb.normalize()
                fighter.ecb.store()
                fighter.posy += fighter.ecb.current_ecb.rect.height / 2.0
                fighter.players = self.players
                self.stage.follows.append(fighter.ecb.tracking_rect)
                log = DataLog()
                self.data_logs.append(log)
                fighter.data_log = log
                if self.track_stocks: fighter.stocks = self.rules.stocks

                percent_sprite = HealthTracker(fighter)

                percent_sprite.rect.bottom = self.screen.get_rect().bottom
                percent_sprite.rect.centerx = gui_offset

                gui_offset += self.screen.get_rect().width / (
                    len(self.players) + 1)

                self.gui_objects.append(percent_sprite)

            center_stage_rect = pygame.rect.Rect((0, 0), (16, 16))
            center_stage_rect.center = self.stage.size.center
            self.stage.follows.append(center_stage_rect)
            self.stage.initializeCamera()

            self.debug_mode = False
            """
            ExitStatus breaks us out of the loop. The battle loop can end in many ways, which is reflected here.
            In general, ExitStatus positive means that the game was supposed to end, while a negative value indicates an error.
            
            ExitStatus == 1: Battle ended early by submission. Declare the other players winners, show victory screen.
            ExitStatus == 2: Battle ended by time or stock. Declare winner from stocks and percentage, show victory screen. 
            ExitStatus == 3: Battle ended early by mutual agreement. Declare draw by agreement, return to menu. 
            ExitStatus == -1: Battle ended in error. Print stack trace, return to menu. 
            """
            self.exit_status = 0

            data_log = DataLog()
            data_log.addSection('test', 1)
            data_log.setData('test', 3, (lambda x, y: x + y))
            self.dirty_rects = [
                pygame.Rect(0, 0, self.settings['windowWidth'],
                            self.settings['windowHeight'])
            ]

            #initialises network
            self.network = network.Network()
            while self.exit_status == 0:
                self.gameEventLoop()

        except:
            try:
                import traceback
                traceback.print_exc()
            finally:
                self.exit_status = -1

        for fighter in self.current_fighters:
            print('Fighter ' + fighter.name + ' Player ' +
                  str(fighter.player_num))
            print(fighter.input_buffer.buffer)

        if self.exit_status == 1:
            musicManager.getMusicManager().stopMusic(1000)
            print("SUBMISSION")
        elif self.exit_status == 2:
            musicManager.getMusicManager().stopMusic()
            frame_hold = 0
            game_sprite = spriteManager.TextSprite('GAME!', 'full Pack 2025',
                                                   128, [0, 0, 0])
            game_sprite.rect.center = self.screen.get_rect().center
            while frame_hold < 150:
                game_sprite.draw(self.screen, game_sprite.rect.topleft, 1)
                self.clock.tick(60)
                pygame.display.flip()
                frame_hold += 1
            print("GAME SET")
        elif self.exit_status == -1:
            musicManager.getMusicManager().stopMusic()
            frame_hold = 0
            game_sprite = spriteManager.TextSprite('NO CONTEST',
                                                   'full Pack 2025', 64,
                                                   [0, 0, 0])
            game_sprite.rect.center = self.screen.get_rect().center
            while frame_hold < 150:
                game_sprite.draw(self.screen, game_sprite.rect.topleft, 1)
                self.clock.tick(60)
                pygame.display.flip()
                frame_hold += 1
            print("NO CONTEST")

        self.endBattle(self.exit_status)
        return self.exit_status  # This'll pop us back to the character select screen.
예제 #9
0
    def __init__(self,_rules,_characters):
        settings = settingsManager.getSetting().setting
        self.rules = _rules
        self.fighters = _characters
        self.stages = []
        self.getStages()
        self.grid = StageGrid(self.stages)
        
        self.height = settings['windowHeight']
        self.width = settings['windowWidth']
        
        pygame.init()
        screen = pygame.display.get_surface()
        
        background = pygame.Surface(screen.get_size())
        background = background.convert()
    
        clock = pygame.time.Clock()
        self.player_controls = []
        self.player_panels = []

        x = 0
        y = 0
        
        for i in range(0,4):
            self.player_controls.append(settingsManager.getControls(i))
            
        status = 0
        
        while status == 0:
            music = musicManager.getMusicManager()
            music.doMusicEvent()
            #Start event loop
            for event in pygame.event.get():
                
                for bindings in self.player_controls:
                    k = bindings.getInputs(event,False,False)
                    if k == 'left':
                        self.grid.updateSelection(-1, 0)    
                    elif k == 'right':
                        self.grid.updateSelection(1, 0)
                    elif k == 'up':
                        self.grid.updateSelection(0, -1)  
                    elif k == 'down':
                        self.grid.updateSelection(0, 1) 
                    elif k == 'attack':
                        if not self.grid.isStageStruckAt(self.grid.getXY()[0],self.grid.getXY()[1]):
                            #choose
                            if self.grid.getSelectedStage() == 'random':
                                stage = self.grid.getRandomStage()
                            else:
                                stage = self.grid.getSelectedStage()
                            
                            musicManager.getMusicManager().stopMusic(500)
                            #This will wait until the music fades out for cool effect
                            while musicManager.getMusicManager().isPlaying():
                                pass
                            music_list = stage.getMusicList()
                            musicManager.getMusicManager().createMusicSet('stage', music_list)
                            musicManager.getMusicManager().rollMusic('stage')
                            bindings.flushInputs()
                            current_battle = battle.Battle(self.rules,self.fighters,stage.getStage())
                            current_battle.startBattle(screen)
                            status = 1
                            #do something with battle result
                    
                    elif k == 'jump':
                        x,y = self.grid.getXY()
                        self.grid.changeStageStruckAt(x,y)
                        
                if event.type == pygame.QUIT:
                    sys.exit()
                elif event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_ESCAPE:
                        status = 1
                    
            #End event loop
            screen.fill((0,0,0))
            self.grid.drawScreen(screen)
            
            pygame.display.flip()
            clock.tick(60)