Example #1
0
    def hit(self, x, y):
        """
        Return 1 if the target is hit by a bullet at x,y
        """
        # target is anchord center, bottom
        width = self.right.width * self.scale
        height = self.right.height * self.scale

        # lower left hand coords
        lx = self.x - (width)/2.0
        ly = self.y

        # upper right hand coords
        tx = self.x + (width)/2.0
        ty = self.y + height

        if (x > lx and x < tx and
            y > ly and y < ty):
            Robot.total_killed += 1
            Robot.in_a_row += 1
            if (Robot.total_killed == 100):
                degrees_of_awesome.unlock(5)
            if (Robot.in_a_row == 5):
                degrees_of_awesome.unlock(9)
            return 1
        return 0
Example #2
0
    def on_mouse_press(self,x,y,button,modifiers):
        if button == mouse.LEFT:
            GameMode.gunshot.play()
            if DEBUG:
                print "Pressed left mouse button (%s, %s)" %(x,y)

            # Check targets for hit
            check_hit=0
            for t in self.target_controller.targets:
                if not t.is_dead and t.hit(x,y):
                    c = random.randrange(0,3)
                    GameMode.ninja_death[c].play()
                    t.sepuku()
                    check_hit=1
                    if DEBUG:
                        print t.id, '(%.f, %.f, %.f)'%(t.x, t.y, t.z), 'killed'
                    break

            # Score and Awesomeness degree
            if check_hit:
                self.hits +=1
                self.in_a_row += 1
                # z-axis is the ground plane
                # score based on target position rather than mouse pos
                hit_score = int(t.z/self.SDDOWN)
                # Sometimes the target is past 0 (i.e. t.z is -ve)
                if hit_score > 0:
                    self.score += hit_score
                if(self.score >= 1000):
                    degrees_of_awesome.unlock(6)
                if(self.in_a_row == 5):
                    degrees_of_awesome.unlock(3)
                if(self.in_a_row == 100):
                    degrees_of_awesome.unlock(4)
            else:
                self.in_a_row = 0
                self.miss +=1
Example #3
0
    def on_draw(self):

        if self.handler.pause:
            self._blit_text('     Pause', '')
            return

        self.handler.window.clear()
        self.handler.background.draw(0,0,z=0.5)

        # Stats Calc
        health = (self.handler.HEALTH -
                    self.handler.health_loss) / self.handler.HEALTH
        try:
            accuracy_value = self.handler.hits / (self.handler.hits + self.handler.miss)
        except ZeroDivisionError:
            accuracy_value = 1.0
        accuracy_color = (int((1 - accuracy_value) * 255), int(accuracy_value * 255), 0, 255)

        if(self.handler.hits == 100 and accuracy_value > 0.85):
            degrees_of_awesome.unlock(8)

        # TODO: Put some monospace font here
        labels = []
        label_properties = dict(font_size=20, color=accuracy_color, anchor_x='right', halign='right')
        y = 595
        for l,v in [
            ('Hits', str(self.handler.hits)),
            ('Miss', str(self.handler.miss)),
            ('Acc', '%.0f%%' %(accuracy_value*100)),
            ('Score', str(self.handler.score)),
            ('Health', '%.0f%%' %(health*100)),
            ('Level', '%s/%s' %(
                self.handler.target_controller.level,
                len(self.handler.LEVELS)+1))]:
            y -= 25
            labels.append(text.Label(l, x=795, y=y, **label_properties))
            labels.append(text.Label(v, x=700, y=y, **label_properties))

        for l in labels:
            l.draw()

        # Show some text that stating well done
        if self.handler.game_complete:
            text.Label(
                'GAME COMPLETED',
                font_name='Times New Roman',
                font_size=36,
                color=(64,64,64,128),
                x=self.handler.window.width//2,
                y=self.handler.window.height-50,
                anchor_x='center',
                anchor_y='center').draw()

        if DEBUG:
            debug_label.draw()

        self.handler.crossHair.draw()

        # Redraw existing targets
        for t in reversed(self.handler.target_controller.targets):
            t.draw()

        # Health Bar
        self.handler.health_bar.draw(25,10,scale=(health,1))

        # The game is over, but let the poor guy play neways
        if self.handler.game_over:
            self._blit_text('who cares?', 'Game Over, but')

        # Show some text at the end of the level
        if self.handler.level_anime == 1:
            self._blit_text('  Complete', 'Level %s' %(
                self.handler.target_controller.level))
        elif self.handler.level_anime == 2:
            self._blit_text('    Level %s' %(
                self.handler.target_controller.level+1), 'Proceed...')
        elif self.handler.level_anime == 3:
            self._blit_text('', '    - HAI -')

        # Show achievement unlocked
        if (self.handler.achievement_counter):
            self.handler.achievement_counter -= 1
            self._blit_text(self.degree_text)
        elif (degrees_of_awesome.new_achievements):
            self.degree_text = degrees_of_awesome.new_achievements.pop()[0]
            self._blit_text(self.degree_text)
            self.handler.achievement_counter = 75