示例#1
0
def play_level(view, game, level=None, mapentry=None):
    game.new_level(level, mapentry)
    p = game.player
    done = False
    clk = G.time.Clock()
    addlkeys = [(G.K_ESCAPE, 0, VK_SELECT | VK_START)]
    while not done:
        event_vkeys, other_events = translate_events(addlkeys)
        (vkeys, new_vkeys) = read_pads(view)
        new_vkeys |= event_vkeys
        vkeys |= event_vkeys
        game.move(vkeys, new_vkeys)
        view.draw(game)
        if p.health < 1:
            done = 'die'
        if (vkeys & VK_LEFT) and game.open_l and p.pos[0] <= 8:
            done = 'side'
        if (vkeys & VK_RIGHT) and game.open_r and p.pos[0] >= 248:
            done = 'side'
        if p.state == p.ST_ENTERING_DOOR and p.walking_frame > 20:
            done = 'door'
        if (vkeys & (VK_SELECT | VK_START) == (VK_SELECT | VK_START)):
            done = 'esc'
        chipsfx.fxq_play(view.sfx, view.display.num_frames)
        clk.tick(60)
        view.display.flip()
    return done
示例#2
0
def level_select(view, game, selected=0):
    textout = view.font.textout
    enl = view.display
    screen = enl.get_surface()
    screen.fill((102, 102, 102))
    level_dirty = True

    slm = SmallLevelMap(view, 64, 80)
    
    done = False
    clk = G.time.Clock()
    addlkeys = [
        (G.K_RETURN, 0, VK_START), (G.K_ESCAPE, 0, VK_B),
        (G.K_TAB, 0, VK_SELECT),
        (G.K_LEFT, 0, VK_LEFT), (G.K_RIGHT, 0, VK_RIGHT)
    ]
    while not done:
        key_vkeys = 0
        event_vkeys, other_events = translate_events(addlkeys)
        (vkeys, new_vkeys) = read_pads(view)
        new_vkeys |= event_vkeys
        if new_vkeys & VK_LEFT:
            selected -= 1
            if selected < 0:
                selected = len(game.levels) - 1
            level_dirty = True
        if new_vkeys & VK_RIGHT:
            selected += 1
            if selected >= len(game.levels):
                selected = 0
            level_dirty = True
        if new_vkeys & (VK_A | VK_START):
            done = VK_A
        if new_vkeys & VK_B:
            selected = -1
            done = VK_B
        if level_dirty and 0 <= selected < len(game.levels):
            screen.fill((102, 102, 102), (0, 8, 256, 8))
            textout(screen, "Level %d" % (selected + 1), 16, 8)
            screen.fill((102, 102, 102), (0, 24, 256, 24))
            level = game.levels[selected]
            textout(screen, level[0], 16, 24)
            enemyseq = level[3]
            for i, enemy in enumerate(enemyseq):
                x, y = enemies_gfxcoords[enemy]
                dstpos = (16 + 8 * i, 40)
                srcarea = (120 - x, y, 8, 8)
                screen.blit(view.spritegfx[1], dstpos, srcarea)
            levelmap = game.levelmaps[level[1]][2]
            slm.load_map(levelmap)
            slm.slm_redrawdirty()
            level_dirty = False
        clk.tick(60)
        enl.flip()
    return done, selected
示例#3
0
def press_a_key(view, vkeyfilter=VK_A|VK_START, addlkeys=[], waiting_time=30):
    """Wait for the player to press one of the keys in keys_set or the A button.

Return the vkey that caused closing.

"""
    done = False
    clk = G.time.Clock()
    while not done:
        event_vkeys, other_events = translate_events(addlkeys)
        (vkeys, new_vkeys) = read_pads(view)
        if waiting_time > 0:
            waiting_time -= 1
            new_vkeys = 0
        done = (new_vkeys | event_vkeys) & vkeyfilter
        clk.tick(60)
        view.display.flip()
    return done
示例#4
0
def editor(view, game, play_level):
    es = EditorSession(view, game)
    done = False
    clk = G.time.Clock()
    VK_BACK = 0x2000
    addlkeys = [
        (G.K_RETURN, 0, VK_START), (G.K_ESCAPE, 0, VK_BACK),
        (G.K_TAB, 0, VK_SELECT), 
        (G.K_LEFT, 0, VK_LEFT), (G.K_RIGHT, 0, VK_RIGHT),
        (G.K_UP, 0, VK_UP), (G.K_RIGHT, 0, VK_DOWN)
    ]
    while not done:
        key_vkeys = 0
        event_vkeys, other_events = translate_events(addlkeys)
        (vkeys, new_vkeys) = read_pads(view)
        new_vkeys |= event_vkeys

        if es.moved_since_b and es.mode == es.MODE_PLACE_BLOCKS:
            new_vkeys |= vkeys & (VK_A | VK_B)
        es.handle_vkeys(new_vkeys)

        if new_vkeys & VK_BACK:
            done = True
        if new_vkeys & VK_START:
            if vkeys & VK_SELECT:
                done = True
            else:
                es.level[3][:] = [e for e in es.level[3] if e]
                connect_level(es.mapdata)
                randomize_level_bg(es.mapdata)
                game.new_game()
                game.pf.sheet = view.metatile_sheet
##                with es:
                play_level(view, game, es.level, es.map)
                es.dirty = es.DIRTY_ALL

        es.redrawdirty()
        clk.tick(60)
        view.display.flip()
    save_levels(user_levels_filename, [es.map], [es.level])
示例#5
0
def titlescreen(view):
    textout = view.font.textout
    enl = view.display
    title = G.image.load('tilesets/title.png').convert_alpha()
    options = ['play', 'controls', 'practice', 'edit', 'help', 'quit']
    screen = enl.get_surface()
    screen.blit(title, (0, 0))
    done = False
    clk = G.time.Clock()
    textout(screen, "forehead block guy", 24, 80, (102, 102, 102))
    for i, txt in enumerate(options):
        y = 120 + 8 * (i % 4)
        x = 72 + 80 * (i // 4)
        textout(screen, txt, x + 8, y, (0, 0, 0))
    selected = 0
    last_selected = -1
    last_col_top = (-(-len(options) // 4) - 1) * 4
    addlkeys = [
        (G.K_RETURN, 0, VK_START), (G.K_ESCAPE, 0, VK_B|VK_START), (G.K_TAB, 0, VK_SELECT),
        (G.K_LEFT, 0, VK_LEFT), (G.K_RIGHT, 0, VK_RIGHT),
        (G.K_DOWN, 0, VK_DOWN), (G.K_UP, 0, VK_UP),
    ]
    while not done:
        event_vkeys, other_events = translate_events(addlkeys)
        (vkeys, new_vkeys) = read_pads(view)
        new_vkeys |= event_vkeys
        if new_vkeys & VK_UP:
            selected -= 1
            if selected < 0:
                selected = len(options) - 1
        if new_vkeys & (VK_DOWN|VK_SELECT):
            selected += 1
            if selected >= len(options):
                selected = 0
        if new_vkeys & VK_LEFT:
            if selected < 4:
                selected = min(selected + last_col_top, len(options) - 1)
            else:
                selected -= 4
        if new_vkeys & VK_RIGHT:
            if selected >= last_col_top:
                selected = selected % 4
            else:
                selected = min(selected + 4, len(options) - 1)
        if new_vkeys & VK_B:
            selected = len(options) - 1
        if new_vkeys & (VK_A|VK_START):
            done = True
        if selected != last_selected:
            if last_selected >= 0:
                y = 120 + 8 * (last_selected % 4)
                x = 72 + 80 * (last_selected // 4)
                screen.blit(title, (x, y), (x, y, 8, 8))
            if selected >= 0:
                y = 120 + 8 * (selected % 4)
                x = 72 + 80 * (selected // 4)
                screen.blit(view.spritegfx[0], (x, y), (0, 24, 8, 8))
            last_selected = selected
        clk.tick(60)
        enl.flip()
    if selected == len(options) - 1:
        selected = -1
    return selected