示例#1
0
    def draw( self, frame ):
        resman.get("game.hud_score_surf").draw( frame.surface, Vec2D(0,0) )
        resman.get("game.hud_watch_surf").draw( frame.surface, Vec2D(5,290) )
        
        y = 7

        for goldcars in self.scenario.playfield.get_goldcar_ranking():
            for goldcar in goldcars:
                sprite = copy.copy(resman.get("game.car%d_sprite" % (goldcar.nr+1)))
                sprite.nr = 20 * goldcar.amount

                sprite.draw( frame.surface, Vec2D(24, y + 30) )

                self.font_score.draw( "%d" % (goldcar.score), frame.surface,
                                      (110, y + 4), align = gfx.Font.RIGHT )
                
                y += 35
                
        timeout = self.scenario.get_timeout()
        if timeout is not None:
            time_string = "%01d:%02d" % (timeout/60, timeout%60)
            time_x = 0
            for char in time_string:
                self.font_watch.draw( char, frame.surface, (49 + time_x, 383), align=gfx.Font.CENTER )
                time_x += 10

        if self.dialog is not None:
            self.dialog.draw( frame )

        if not isinstance( self.dialog, IntroDlg ):
            self.font_white.draw( self.scenario.mission_txt, frame.surface, (130, 5 ) )

        self.menu_btn.draw( frame.surface, frame.interpol, frame.time_sec )
示例#2
0
    def draw_skill_bar(self, frame, x, y):
        resman.get("game.skill_bar_surf").draw(frame.surface,
                                               Vec2D(x + 10, y + 85))

        MIN_Y = y
        MAX_Y = y + 7 * 21 + 12
        pointer_y = geo.lin_ipol(self.skill_value, MAX_Y + 7, MIN_Y + 17, 0.3,
                                 1.0)
        pointer_y = max(min(pointer_y, MAX_Y), MIN_Y)

        #        pointer_y = MAX_Y

        resman.get("game.skill_pointer_surf").draw(frame.surface,
                                                   Vec2D(x + 10, pointer_y))
        self.font_tiny_white.draw("%d" % int(self.skill_value * 100),
                                  frame.surface, (x + 13, pointer_y + 2),
                                  align=gfx.Font.CENTER,
                                  valign=gfx.Font.MIDDLE)

        for skill_name in settings.SkillLevel.NAMES:
            if skill_name == self.game_data.skill_level.name:
                self.font_tiny_red.draw(skill_name, frame.surface, (x + 40, y))
            else:
                self.font_tiny.draw(skill_name, frame.surface, (x + 40, y))
            y += 21
示例#3
0
    def draw( self, frame ):
        BaseDlg.draw( self, frame )
        
        center = Vec2D( frame.surface.get_width()/2, frame.surface.get_height()/2 )

        y = 365
        
        if self.no_input_timeout <= 0:
            self.font.draw( _("Press your button or click on the car"), frame.surface, (center.x, y+15), gfx.Font.CENTER )

            y = 415
            
            place = 0
            for controller in self.ground_control.controllers:
                goldcar = controller.goldcar

                x = self.get_goldcar_x( place )

                if isinstance(controller, ctrl.HumanController):
                    button_text = "< %s >" % controller.action_button.get_name()
                    self.small_font.draw( button_text, frame.surface, (x, y + 30), gfx.Font.CENTER )

                sprite = copy.copy(resman.get("game.car%d_sprite" % (goldcar.nr+1)))

                if self.readys is not None:
                    if self.readys[place]:
                        self.small_font.draw( _("Ready!"), frame.surface, (x, y+50), gfx.Font.CENTER )
                        sprite.nr = 60
                    else:
                        self.small_font.draw( _("waiting..."), frame.surface, (x, y+50), gfx.Font.CENTER )
                        sprite.nr = self.anim_timer.get_frame( frame.time_sec )

                sprite.draw( frame.surface, Vec2D(x, y + 26) )
                    
                place += 1
示例#4
0
 def __init__(self, pos):
     self.pos = pos
     self.life = 10 + int(random.random() * 2)
     self.move = Vec2D(random.uniform(-2.5, 2.5),
                       random.uniform(-2.5, 0.0))
     self.surf = resman.get("game.sparkle_surf")
     width, height = self.surf.get_size()
     self.center = Vec2D(width / 2, height / 2)
示例#5
0
    def draw(self, frame):
        if self.get_pos(frame) is None: return

        font = Font(size=28, color=(255, 0, 0))
        pos = self.get_pos(frame) + Vec2D(frame.X_OFFSET, frame.Y_OFFSET)
        if self.model.goldcar is not None:
            pos += Vec2D(0, 20)

        font.draw("x2", frame.surface, pos.get_tuple(), Font.CENTER,
                  Font.MIDDLE)
示例#6
0
    def __init__(self, is_single_player, game_data):
        super(IngameMenu,
              self).__init__(Rectangle(140, 80, 800 - 400, 600 - 200))
        self.background_image = resman.get("gui.paperdialog_surf")
        self._is_done = False
        self.game_data = game_data

        btnFont = gfx.Font("data/edmunds.ttf",
                           color=(0, 0, 0),
                           size=32,
                           use_antialias=True)

        BUTTON_X = 300
        BUTTON_Y = 100
        H = 75

        self.continue_btn = gui.ImageButton(
            copy.copy(resman.get("game.button02_sprite")),
            Vec2D(BUTTON_X, BUTTON_Y))
        self.continue_btn.set_label(_("Continue"), btnFont)

        self.skip_btn = gui.ImageButton(
            copy.copy(resman.get("game.button02_sprite")),
            Vec2D(BUTTON_X, BUTTON_Y + 1 * H))
        self.skip_btn.set_label(_("Skip Level"), btnFont)
        self.options_btn = gui.ImageButton(
            copy.copy(resman.get("game.button02_sprite")),
            Vec2D(BUTTON_X, BUTTON_Y + 2 * H))
        self.options_btn.set_label(_("Options"), btnFont)
        self.menu_btn = gui.ImageButton(
            copy.copy(resman.get("game.button02_sprite")),
            Vec2D(BUTTON_X, BUTTON_Y + 3 * H))
        self.menu_btn.set_label(_("To Menu"), btnFont)
        self.quit_btn = gui.ImageButton(
            copy.copy(resman.get("game.button02_sprite")),
            Vec2D(BUTTON_X, BUTTON_Y + 4 * H))
        self.quit_btn.set_label(_("Quit"), btnFont)

        self.add_subcomponent(self.continue_btn)
        if not is_single_player:
            self.add_subcomponent(self.skip_btn)
        self.add_subcomponent(self.options_btn)
        self.add_subcomponent(self.menu_btn)
        self.add_subcomponent(self.quit_btn)

        self.update_neighbors()

        self.options_dialog = None

        self.to_menu = False
        self.should_quit = False
        self.to_next_level = False
示例#7
0
    def __init__(self, model):
        PickupView.__init__(self)
        self.model = model

        self.sprite = resman.get("game.dynamite_sprite").clone()
        self.sprite_delta = 1
        self.prev_life = 1.0
        w, h = self.sprite.get_size()
        self.sparkle_offset = Vec2D(7, -h + 24)
        self.sparkle_line = Vec2D(0, -22)

        self.sparkles = []
        self.sparkle_timer = Timer(25)
示例#8
0
 def draw(self, frame):
     if self.get_pos(frame) is not None:
         self.sprite.nr = self.animTimer.get_frame(frame.time_sec)
         self.sprite.draw(
             frame.surface,
             self.get_pos(frame) +
             Vec2D(frame.X_OFFSET, frame.Y_OFFSET - 10))
示例#9
0
    def __init__(self, scenario, ground_control, game_data):
        self.font = gfx.Font("data/edmunds.ttf", 20, use_antialias=True)
        self.font_white = gfx.Font("data/edmunds.ttf",
                                   20, (255, 255, 255),
                                   use_antialias=True)
        self.font_score = gfx.Font("data/edmunds.ttf",
                                   18, (255, 255, 255),
                                   use_antialias=True)
        self.font_watch = gfx.Font("data/edmunds.ttf",
                                   18, (0, 0, 0),
                                   use_antialias=True)
        self.scenario = scenario
        self.ground_control = ground_control
        self.game_data = game_data
        self.dialog = None

        self.guistate = gui.GuiState()

        btnFont = gfx.Font("data/edmunds.ttf",
                           color=(0, 0, 0),
                           size=19,
                           use_antialias=True)
        self.menu_btn = gui.ImageButton(
            copy.copy(resman.get("game.hud_menu_button_sprite")),
            Vec2D(5, 257))
        self.menu_btn.set_label(_("Menu"), btnFont)

        self.last_clock_ring = None
示例#10
0
 def draw(self, frame):
     if self.get_pos(
             frame
     ) is not None and self.model.goldcar is None:  # only draw on tile
         self.sprite.draw(
             frame.surface,
             self.get_pos(frame) + Vec2D(frame.X_OFFSET, frame.Y_OFFSET))
示例#11
0
    def draw(self, frame):
        if self.get_pos(frame) is None: return

        # no time... must implement... bad code...
        if self.model.life < pickups.Dynamite.DEC * 18 and\
           self.model.life != self.prev_life:
            self.prev_life = self.model.life

            self.sprite.nr += self.sprite_delta

            if self.sprite.nr < 0:
                self.sprite.nr = 0
                self.sprite_delta = 1
            elif self.sprite.nr >= 4:
                self.sprite.nr = 3
                self.sprite_delta = -1
                event.Event.dynamite_tick()

        while self.sparkle_timer.do_tick(frame.time_sec):
            self.sparkle_tick(frame)

        self.sprite.draw(
            frame.surface,
            self.get_pos(frame) + Vec2D(frame.X_OFFSET, frame.Y_OFFSET))
        for sparkle in self.sparkles:
            sparkle.draw(frame)
示例#12
0
    def draw( self, frame ):
        SingleDlg.draw( self, frame )
        
        center = Vec2D( frame.surface.get_width()/2, frame.surface.get_height()/2 )

        y = center.y - 180

        self.large_font.draw( _("Game Over!"), frame.surface, (center.x, y), gfx.Font.CENTER )
示例#13
0
    def draw( self, frame ):
        BaseDlg.draw( self, frame )

        center = Vec2D( frame.surface.get_width()/2, frame.surface.get_height()/2 )

        y = center.y - 200

        self.large_font.draw( _("Info: "),
                              frame.surface, (center.x, y), gfx.Font.CENTER )
示例#14
0
    def draw(self, frame):
        MultiDlg.draw(self, frame)

        #winner = None
        #for goldcar in self.playfield.goldcars:
        #    if winner is None or winner.score < goldcar.score:
        #        winner = goldcar

        center = Vec2D(frame.surface.get_width() / 2,
                       frame.surface.get_height() / 2)

        y = center.y - 180

        self.large_font.draw(_("Game Ended!"), frame.surface, (center.x, y),
                             gfx.Font.CENTER)

        y += 32
        self.font.draw(_("Ranking"), frame.surface, (center.x - 150, y))

        ranking = self.scenario.playfield.get_goldcar_ranking()

        place = 1
        y -= 5
        for goldcars in ranking:
            y += 32

            self.font.draw("%d." % place, frame.surface, (center.x - 170, y),
                           gfx.Font.RIGHT)

            goldcar_x = center.x - 140
            for goldcar in goldcars:
                sprite = copy.copy(
                    resman.get("game.car%d_sprite" % (goldcar.nr + 1)))
                sprite.nr = 20 * goldcar.amount
                sprite.draw(frame.surface, Vec2D(goldcar_x, y + 26))
                goldcar_x += 40

                place += 1

            self.font.draw("%d" % goldcars[0].score, frame.surface,
                           (center.x + 100, y), gfx.Font.RIGHT)
示例#15
0
    def draw(self, frame):
        if self.model.pos is None: return
        pos = self.get_pos(frame)

        self.align_car_to_track(pos)

        # show amount of gold in car
        self.sprite.nr += 20 * self.model.amount

        while self.motionblur_timer.do_tick(frame.time_sec):
            self.motionblur_tick(pos)

        # draw motion blur
        if isinstance(self.model.modifier, Oiler):
            diff = 1.0 / (len(self.motionblur) + 1)
            alpha = 0.0 + diff * 2
            for ghost in self.motionblur:
                if not self.alpha_surfs.has_key(alpha):
                    self.alpha_surfs[alpha] = self.sprite.surface.get_blended(
                        alpha)

                ghost[1].surface = self.alpha_surfs[alpha]
                ghost[1].draw(
                    frame.surface,
                    Vec2D(ghost[0][0] + frame.X_OFFSET,
                          ghost[0][1] + frame.Y_OFFSET))
                alpha += diff

        screen_x, screen_y = pos.get_screen_position()
        screen_x += frame.X_OFFSET
        screen_y += frame.Y_OFFSET

        if isinstance(self.model.modifier, Ghost):
            if self.ghost_sprite is None:
                self.ghost_sprite = copy.copy(self.sprite)
                self.ghost_sprite.surface = self.sprite.surface.get_blended(
                    0.6)
            self.ghost_sprite.nr = self.sprite.nr
            self.ghost_sprite.draw(frame.surface, Vec2D(screen_x, screen_y))
        else:
            self.sprite.draw(frame.surface, Vec2D(screen_x, screen_y))
示例#16
0
    def draw(self, frame):
        MultiDlg.draw(self, frame)

        center = Vec2D(frame.surface.get_width() / 2,
                       frame.surface.get_height() / 2)

        y = center.y - 180

        self.large_font.draw(_("All Games Total"), frame.surface,
                             (center.x, y), gfx.Font.CENTER)

        y += 32
        self.font.draw(_("Ranking"), frame.surface, (center.x - 150, y))

        ranking = self.game_data.get_total_ranking()

        place = 1
        y -= 5
        amount = 3
        for goldcars in ranking:
            y += 32

            self.font.draw("%d." % place, frame.surface, (center.x - 170, y),
                           gfx.Font.RIGHT)

            goldcar_x = center.x - 140
            for goldcar in goldcars:
                sprite = copy.copy(
                    resman.get("game.car%d_sprite" % (goldcar.nr + 1)))
                sprite.nr = 20 * amount
                sprite.draw(frame.surface, Vec2D(goldcar_x, y + 26))
                goldcar_x += 40

                place += 1

            amount = max([0, amount - 1])
            self.font.draw("%d" % goldcars[0].score, frame.surface,
                           (center.x + 100, y), gfx.Font.RIGHT)
示例#17
0
    def draw( self, frame ):
        if self.model.type == Tile.Type.FLAT:
            pos = Vec2D( self.model.pos.x * 32 + self.model.pos.y * 32 + frame.X_OFFSET,
                        -self.model.pos.x * 16 + self.model.pos.y * 16 + frame.Y_OFFSET)

            if self.model.is_selected:
                selected_surf = resman.get("game.selected_tile_surf")
                selected_surf.draw( frame.surface, pos )

            trail_surf = resman.get("game.trail%d_surf" % self.model.trail.type)
            trail_surf.draw( frame.surface, pos )

        if self.model.pickup is not None:
            frame.draw( self.model.pickup )
示例#18
0
        def game_tick(self):
            if self.progress <= 1.0:
                end_pos = self.end_tile.get_center()
                end_pos = Vec2D(end_pos[0], end_pos[1])

                speed = 20.0 / (end_pos - self.start_pos).length()
                self.progress += speed

                self.pos = self.start_pos * (
                    1.0 - self.progress) + end_pos * self.progress

                if self.progress > 1.0 and self.end_tile.pickup is None:
                    self.end_tile.pickup = pickups.CopperCoin()
                    x, y = self.end_tile.get_center()
                    self.end_tile.pickup.container = self.end_tile
示例#19
0
    def draw( self, frame ):
        MultiDlg.draw( self, frame )
        
        center = Vec2D( frame.surface.get_width()/2, frame.surface.get_height()/2 )

        y = center.y - 180

        skill = settings.SkillLevel(self.game_data.quest.get_skill(self.scenario))

        self.font_tiny.draw( _("Played level as:"), frame.surface, (center.x-180, y + 70) )
        self.font.draw( "%s" % skill.name, frame.surface, (center.x-140, y + 90) )

        self.font_tiny.draw( _("Your current skill level:"), frame.surface, (center.x-180, y + 140) )
        self.font_red.draw( "%s" % self.game_data.skill_level.name, frame.surface, (center.x-140, y + 160) )

        self.draw_skill_bar( frame, center.x + 50, y + 70 )
示例#20
0
    def draw(self, frame):
        for particle in self.particles:
            particle.render(frame.surface, frame.X_OFFSET, frame.Y_OFFSET)

        if self.animTimer is None:
            self.animTimer = gfx.LoopAnimationTimer(
                20, 0, 16)  # real maxframe is in draw
            self.animTimer.set_frame(frame.time_sec, 0)

        if self.sprite is not None:
            self.sprite.nr = self.animTimer.get_frame(frame.time_sec)
            self.sprite.draw(frame.surface,
                             self.pos + Vec2D(frame.X_OFFSET, frame.Y_OFFSET))

            if self.sprite.nr >= 15:
                self.sprite = None
示例#21
0
    def draw( self, frame ):
        MultiDlg.draw( self, frame )

        center = Vec2D( frame.surface.get_width()/2, frame.surface.get_height()/2 )

        y = center.y - 180

        #self.large_font.draw( "Game: %s" % self.scenario.title,
        #                      frame.surface, (center.x, y), gfx.Font.CENTER )

        self.info.draw_title( frame.surface, frame.time_sec, (center.x, y) )
        self.info.draw_pickup( frame.surface, frame.time_sec, (center.x + 50, 240 ) )
        

        y += 50 
    
        self.font.draw( self.scenario.description, frame.surface,
                        (center.x, y), gfx.Font.CENTER )
示例#22
0
    def before_gameloop(self):
        resman.read("data/resources.cfg")

        self.game_data = GameData(self.userinput)

        # apply configuration settings
        SoundManager.set_sound_volume(self.config.sound_volume)
        SoundManager.set_music_volume(self.config.music_volume)

        # set state
        self.menu = MonorailMenu(self.game_data)
        self.game = MonorailGame(self.game_data)
        self.editor = None

        self.state = self.game
        self.state = self.menu

        # set window buttons
        self.max_button = ImageButton(copy.copy(resman.get("game.max_button")),
                                      Vec2D(800 - 16 - 4, 4))
示例#23
0
    def handle_events(self):
        for event in pygame.event.get():
            if event.type == QUIT:
                self.game_is_done = True
                self.user_exit = True
            elif event.type == KEYDOWN and event.key == K_ESCAPE:
                self.game_is_done = True
                self.user_exit = True

        # move mouse
        self.userinput.mouse.feed_pos(
            Vec2D(self.random(0, 800 - 1), self.random(0, 600 - 1)))

        # maybe release mouse presses
        down_buttons = self.userinput.mouse.down_buttons
        while self.random(0, 1) == 0 and len(down_buttons) > 0:
            self.userinput.mouse.feed_up(down_buttons[self.random(
                0,
                len(down_buttons) - 1)])

        # generate mouse presses
        while self.random(0, 1) == 0:
            key = self.random(0, 5)
            self.userinput.mouse.feed_down(key)

        # maybe release key presses
        down_buttons = self.userinput.key.down_buttons
        while self.random(0, 1) == 0 and len(down_buttons) > 0:
            self.userinput.key.feed_up(down_buttons[self.random(
                0,
                len(down_buttons) - 1)])

        # feed random keys
        while self.random(0, 10) <> 0:
            key = ALL_KEYS[self.random(0, len(ALL_KEYS) - 1)]
            self.userinput.key.feed_down(key)

        # sometimes escape key
        if self.random(0, 2**20) == 0:
            key = K_ESCAPE
            self.userinput.key.feed_down(key)
示例#24
0
    def get_pos(self, frame):
        self.pos = None
        if self.model.container is None or not hasattr(self.model.container,
                                                       "views"):
            return None

        self.pos = self.model.container.views[0].get_pickup_pos(frame)

        if self.model.jump_cnt is not None:
            if self.jump_pos is None:
                self.jump_pos = self.pos

            x = geo.lin_ipol(self.model.jump_cnt, self.jump_pos.x, self.pos.x)
            y = geo.lin_ipol(self.model.jump_cnt, self.jump_pos.y, self.pos.y)
            height = self.model.jump_cnt
            if self.model.jump_cnt > 0.5:
                height = 1.0 - self.model.jump_cnt
            self.pos = Vec2D(x, y - 30 * height)
        else:
            self.jump_pos = None

        return self.pos
示例#25
0
 def get_pickup_pos(self, frame):
     x, y = self.model.get_center()
     return Vec2D(x, y)
示例#26
0
    def get_pos(self, frame):
        x = self.model.pos.x * 32 + self.model.pos.y * 32 + frame.X_OFFSET
        y = -self.model.pos.x * 16 + self.model.pos.y * 16 + frame.Y_OFFSET

        return Vec2D(x, y)
示例#27
0
 def draw(self, frame):
     if self.get_pos(frame) is not None:
         self.sprite.draw(
             frame.surface,
             self.get_pos(frame) +
             Vec2D(frame.X_OFFSET, frame.Y_OFFSET - 20))
示例#28
0
 def draw(self, frame):
     pos = self.pos + self.center + Vec2D(frame.X_OFFSET,
                                          frame.Y_OFFSET)
     self.surf.draw(frame.surface, pos)
示例#29
0
 def __init__(self):
     Collectible.__init__(self, False)
     self.pos = Vec2D(0, 0)
示例#30
0
    def get_screen_position( self, length ):
        """Returns tuple (x,y) of the position"""
        in_dir = self.trail.get_in_direction()
        out_dir = self.trail.get_out_direction()

        if in_dir == Direction.NORTH:
            if self.type == Tile.Type.NORTH_SLOPE_TOP: in_pos = Vec2D(-16, 8)
            else: in_pos = Vec2D(-16, -8)
        elif in_dir == Direction.EAST:
            if self.type == Tile.Type.EAST_SLOPE_TOP: in_pos = Vec2D(16, 8)
            else: in_pos = Vec2D(16,-8)
        elif in_dir == Direction.SOUTH:
            if self.type == Tile.Type.SOUTH_SLOPE_TOP: in_pos = Vec2D(16, 24)
            else: in_pos = Vec2D(16,8)
        elif in_dir == Direction.WEST:
            if self.type == Tile.Type.WEST_SLOPE_TOP: in_pos = Vec2D(-16, 24)
            else: in_pos = Vec2D(-16, 8)

        if out_dir == Direction.NORTH:
            if self.type == Tile.Type.SOUTH_SLOPE_BOT: out_pos = Vec2D(-16, -24)
            else: out_pos = Vec2D(-16, -8)
        elif out_dir == Direction.EAST:
            if self.type == Tile.Type.WEST_SLOPE_BOT: out_pos = Vec2D(16, -24)
            else: out_pos = Vec2D(16,-8)
        elif out_dir == Direction.SOUTH:
            if self.type == Tile.Type.NORTH_SLOPE_BOT: out_pos = Vec2D(16, -8)
            else: out_pos = Vec2D(16,8)
        elif out_dir == Direction.WEST:
            if self.type == Tile.Type.EAST_SLOPE_BOT: out_pos = Vec2D(-16, -8)
            else: out_pos = Vec2D(-16, 8)


        if in_dir == out_dir.get_opposite():
            pos = (in_pos * (self.get_length() - length) + out_pos * length) / self.get_length()
        else:
            interpol = float(length) / float( self.get_length() )
            pos = in_pos - in_pos * math.sin( math.pi * interpol / 2.0 )
            pos += out_pos * (1.0 - math.cos( math.pi * interpol / 2.0))

        pos += Vec2D( self.pos.x * 32  + self.pos.y * 32 + 32,
                -self.pos.x * 16  + self.pos.y * 16 + 16 )

        return pos.get_tuple()