Exemplo n.º 1
0
class TakedownMode(StoryMode):
    '''
    classdocs
    '''
    MODE_NAME = 'Takedown'
    MODE_DESC = 'Shoot pop bumpers'

    def __init__(self, game, prio, scoop_mode):
        '''
        Constructor
        '''
        StoryMode.__init__(self, game, prio, scoop_mode)
        
        self.blink_delay_ms = 200
        self.lights = ['pop1', 'pop2', 'pop3']
        self.switches = ['pop1', 'pop2', 'pop3']
        self.level_colors = [self.game.color(255,0,0), #red
                             self.game.color(0,255,0), #green
                             self.game.color(0,0,255), #blue
                             ]
        self.level_hits_required = [10, 20, 50]
        self.max_level_score = 10000
        self.at_max_level = False
        self.level = 0
        self.hits_till_next_level = self.level_hits_required[self.level]
        
        self.hits_remaining_layer = TextLayer(ui.fonts.BIG_FONT,
                                      '%s hits to next level' % self.level_hits_required[0],
                                      self.game.color(255,255,255),
                                      align='center')
        self.hits_remaining_layer.move(1024/2, 80)
        self.level_layer = TextLayer(ui.fonts.BIG_FONT,
                                     'Pops level 1', 
                                     self.game.color(255,255,255),
                                     align='center')
        self.level_layer.move(1024/2, 50)
        
    def start(self):
        for light in self.lights:
            self.game.lights[light].blink(self.blink_delay_ms, self.level_colors[self.level])
        
        for switch in self.switches:
            self.addHandler(switch, 'closed', 0, self.popHit)
        
        self.layer = GroupedLayer([self.hits_remaining_layer, self.level_layer])
    
    def popHit(self, switch):
        if self.level >= len(self.level_hits_required):
            self.game.player().score += self.max_level_score
            return True
        
        self.game.player().score += (1000 * (self.level+1))
        self.hits_till_next_level -= 1
        
        if self.hits_till_next_level == 0:
            self.level += 1
            if self.level >= len(self.level_hits_required):
                self.level_layer.setText('Pops at maximum!')
                self.layer = GroupedLayer([self.level_layer])
                for light in self.lights:
                    self.game.lights[light].on(self.game.color(255,255,255))
                return True
                
            self.hits_till_next_level = self.level_hits_required[self.level]
            self.level_layer.setText('Pops level %s' % str(self.level+1))
            for light in self.lights:
                self.game.lights[light].blink(self.blink_delay_ms, self.level_colors[self.level])
        self.hits_remaining_layer.setText('%s hits to next level' % self.hits_till_next_level)
        return True
Exemplo n.º 2
0
class CodebreakerMode(StoryMode):
    '''
    Hit every shot to unlock all the letters
    '''
    MODE_NAME = 'Codebreaker'
    MODE_DESC = 'Crack the password'

    def __init__(self, game, prio, scoop_mode):
        '''
        Constructor
        '''
        StoryMode.__init__(self, game, prio, scoop_mode)
        
        # TODO: proper lights and switches when added
        self.lights = ['leftorbit', 'pop1', 'pop2', 'pop3', 'rightorbit']
        self.switches = ['orbitL', 'standup1', 'standup2', 'standup3', 'orbitR']
        
        self.level = 0
        self.letter_scramble_delay = 50
        
        # password is a random one of these each time the mode starts
        self.words = ['hunts', 'brain', 'safer']
    
    def start(self):
        self.level = 0
        for switch in self.switches:
            self.addHandler(switch, 'closed', 0, self.switchHit)
        
        self.layer = TextLayer(ui.fonts.TITLE_FONT,
                               '???', 
                               self.game.color(255,255,255), align='center')
        self.layer.move(1024/2, 50)
        self.layer.opaque = True
        
        self.startLevel()
        
    def startLevel(self):
        self.letters_found = [False] * len(self.switches)
        self.password = random.choice(self.words)
        
        for light in self.lights:
            self.game.lights[light].blink(500, self.game.color(255,0,0))
        
        self.delay('scramble', 0.1, self.scramble)
        self.delay('defeat', 60, self.defeat)
    
    def switchHit(self, switch):
        self.game.player().score += 1000
        
        index = self.switches.index(switch.name)
        self.letters_found[index] = True
        self.game.lights[self.lights[index]].off()
        
    def scramble(self):
        letters = []
        for i, found in enumerate(self.letters_found):
            if found:
                letters.append(self.password[i])
            else:
                letters.append(random.choice(string.ascii_letters+string.digits))
        self.layer.setText(''.join(letters))
        
        if all(self.letters_found):
            self.delay('victory', 0.6, self.victory)
        else:
            self.delay('scramble', 0.1, self.scramble)
    
    def victory(self):
        self.layer.setText('Success!')
        self.game.player().score += 10000
        self.delay('victory', 1, self.victory2)
    
    def victory2(self):
        self.game.modes.remove(self)
    
    def defeat(self):
        if all(self.letters_found):
            return # we didn't lose, it just timed out before the victory sequence fired
        self.game.modes.remove(self)