⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu.c

📁 一个runtils v2.0图形音乐库的demo程序
💻 C
📖 第 1 页 / 共 2 页
字号:
        {
            yh = 35+i*10;
            gprintf( "Particles",xh,yh,BLACK,L_GREY,&f,1 );
            for ( i=0, wh=yh+10; i<NUM_OF_PARTICLES; i++ )
            {
                gprintf( "Mass=",xh,wh+3,BLACK,L_GREY,&f,1 );
                gprintfi( ParticleMass[i],xh+40,wh+3,BLACK,L_GREY,&f,1 );
                putimg( Toon_Particle[i]->img,xh+56,wh,1 );
                wh += Toon_Particle[i]->img[0].h+2;
            }

            gprintf( "Shield",xh,120,BLACK,L_GREY,&f,1 );

            gprintf( "Injector",150,yh,BLACK,L_GREY,&f,1 );
            putimg( Toon_Syringe->img,280,yh-4,1 );
            gprintf( "Rogue Ray",150,yh+25,BLACK,L_GREY,&f,1 );
            gprintf( "Rogue Particle",150,yh+50,BLACK,L_GREY,&f,1 );
            gprintf( "Neutron Powerup",150,yh+75,BLACK,L_GREY,&f,1 );
            gprintf( "Shield Powerup",150,yh+100,BLACK,L_GREY,&f,1 );
        }

        if ( p==0 ) msg="<Esc> <PgDn>"; else
          if ( p==MAX_HELP_PAGES-1 ) msg="<Esc> <PgUp>"; else msg="<Esc> <PgUp> <PgDn>";

        Spr_Print( SFont,msg,(VS.mx-Spr_Strlen(SFont,msg)+1)>>1,VS.my-15,PROPORTIONAL,HORIZ,1 );

        for ( wh=p, d=key=0; p==wh; )
        {
            if ( (key=inkey(0))==ESCAPEKEY ) break;
            if ( key==PAGEUPKEY && p>0 ) p--; else
              if ( key==PAGEDNKEY && p<MAX_HELP_PAGES-1 ) p++;
            if ( wh==MAX_HELP_PAGES-1 )
            {
                waitVR();
                if ( d++>3 )
                {
                    d=0;
                    rect( 285,yh+27,295,yh+37,L_GREY,FILL,1 );
                    putimg( Toon_Beam->img+rrf,285,yh+27,1 );
                    if ( ++rrf>=Toon_Beam->frames ) rrf=0;
                    rect( 280,yh+46,310,yh+76,L_GREY,FILL,1 );
                    putimg( Toon_Rogue_Particle->img+rpf,280,yh+46,1 );
                    if ( ++rpf>=Toon_Rogue_Particle->frames ) rpf=0;
                    rect( 275,yh+71,310,yh+95,L_GREY,FILL,1 );
                    putimg( Toon_PowerUp->img+npf,275,yh+71,1 );
                    if ( ++npf>=16 ) npf=8;
                    rect( 275,yh+94,310,yh+114,L_GREY,FILL,1 );
                    putimg( Toon_PowerUp->img+nsf,275,yh+94,1 );
                    if ( ++nsf>=8 ) nsf=0;
                    rect( xh,135,xh+50,185,L_GREY,FILL,1 );
                    putimg( Toon_Shield->img+sf,xh,135,1 );
                    if ( ++sf>=Toon_Shield->frames ) sf=NUM_OF_SHIELDS-2;
                }
            }
        }
    }
    while ( key!=ESCAPEKEY );

    fadeout( &Pal,0 );
    showpage( page );
    fadein( &Pal,0 );
    CONSUME_KEYS;

    return( FALSE );
}

int Menu_High_Scores( int page )
{
    Hall_Of_Fame( &High_Scores,0L,1 );
    return( FALSE );
}

int Menu_Load_Game( int page )
{
    char      *msgs[2];
    char      buff[80];
    int       opt;

    Load_Game_Flag = TRUE;

    if ( (opt=Select_Game_Slot(&GSlots,FALSE,1)) >= 0 )
    {
        if ( Load_Level_Data(GSlots.name[opt])==0 ) return( TRUE );

        msgs[0] = strsetx( buff,"Failure to load '",GSlots.name[opt],"'!",NULL );
        msgs[1] = NULL;
        Show_Error_Message( msgs,SFX_ERROR,0,page );
    }

    return( FALSE );
}

int Menu_New_Game( int page )
{
    Cfg.level   = 1;
    Cfg.score   = 0L;

    Initialise_Level();

    GMenu.m[SAVE_GAME_OPTION].active = GMenu.m[BACK_TO_GAME_OPTION].active = FALSE;

    return( TRUE );
}

int Menu_Options( int page )
{
    Game_Options( &GOptions,1 );
    return( FALSE );
}

void Menu_Postdisplay( int page )
{
    /*  Nothing required!  */
}

void Menu_Predisplay( int page )
{
    int    i;

    Fade_Screen( MODE_320x200x256 );
    Draw_Fractal_Background( 0 );
    for ( i=0; i<7; i++ )
    {
        putimg( Toon_Logo[LogoIndex1[i]]->img,LOGO_TL_X+i*30,0,0 );
        putimg( Toon_Logo[LogoIndex2[i]]->img,LOGO_BL_X+i*30,VS.my-LogoLetters[LogoIndex2[i]].h,0 );
    }
    fadein( &Pal,0 );
    CONSUME_KEYS;
}

int Menu_Register( int page )
{
    char         *r="Registration", *p="Press A Key";
    int          wr=Spr_Strlen(SFont,r), xr=(VS.mx+1-wr)>>1, i;
    FONT         f;

    rom_font( &f,ROM_8x8 );
    Draw_Edged_Box( 0,0,VS.mx,VS.my,WHITE,GREY,L_GREY,1 );
    Spr_Print( SFont,r,xr,10,PROPORTIONAL,HORIZ,1 );
    line( xr-1,19,xr+wr,19,WHITE,1 );
    line( xr-2,20,xr+wr+1,20,GREY,1 );
    Spr_Print( SFont,p,(VS.mx-Spr_Strlen(SFont,p)+1)>>1,VS.my-15,PROPORTIONAL,HORIZ,1 );

    for ( i=0; RegisterMsgs[i]; i++ )
      gprintf( RegisterMsgs[i],16,43+i*10,BLACK,L_GREY,&f,1 );

    fadeout( &Pal,0 );
    showpage( 1 );
    CONSUME_KEYS;
    fadein( &Pal,0 );

    Wait_For_Event( 30 );

    fadeout( &Pal,0 );
    showpage( page );
    fadein( &Pal,0 );
    CONSUME_KEYS;

    return( FALSE );
}

void Menu_Soundfx( void )
{
    Sfx( SFX_MENU_KEY );
}

int Menu_Save_Game( int page )
{
    char   *msgs[2];
    char   buff[80];
    int    opt;

    Load_Game_Flag = FALSE;
    if ( (opt=Select_Game_Slot(&GSlots,TRUE,1)) >= 0 )
    {
        if ( Save_Level_Data(GSlots.name[opt]) )
        {
            msgs[0] = strsetx( buff,"Failure to save '",GSlots.name[opt],"'!",NULL );
            msgs[1] = NULL;
            Show_Error_Message( msgs,SFX_ERROR,0,page );
        }
    }

    return( FALSE );
}

/*======================[ Game Slot Service Routines ]========================*/

void GSlot_Postdisplay( int page )
{
    fadeout( &Pal,0 );
    showpage( 0 );
    fadein( &Pal,0 );
    CONSUME_KEYS;
}

void GSlot_Predisplay( int page )
{
    char    *msg=(Load_Game_Flag) ? "Load Game":"Save Game";
    int     l=Spr_Strlen(SFont,msg);

    fadeout( &Pal,0 );
    showpage( 1 );
    Draw_Fractal_Background( 1 );
    Spr_Print( SFont,msg,(VS.mx-l+1)>>1,33,PROPORTIONAL,HORIZ,1 );
    fadein( &Pal,0 );
    CONSUME_KEYS;
}

/*=====================[ High Scores Service Routines ]=======================*/

void High_Scores_Postdisplay( int page )
{
    fadeout( &Pal,0 );
    showpage( 0 );
    fadein( &Pal,0 );
    CONSUME_KEYS;
}

void High_Scores_Predisplay( int page )
{
    char    *msg1="High Score Table";
    char    *msg2="Press A Key";

    if ( VS.slines ) Fade_Screen( MODE_320x200x256 ); else fadeout( &Pal,0 );
    showpage( 1 );
    Draw_Fractal_Background( 1 );
    Spr_Print( SFont,msg1,(VS.mx+1-Spr_Strlen(SFont,msg1))>>1,5,PROPORTIONAL,HORIZ,1 );
    Spr_Print( SFont,msg2,(VS.mx+1-Spr_Strlen(SFont,msg2))>>1,VS.my-16,PROPORTIONAL,HORIZ,1 );
    fadein( &Pal,0 );
    CONSUME_KEYS;
}

void High_Scores_Soundfx( void )
{
    Sfx( SFX_FANFARE );
}

/*=====================[ Game Option Service Routines ]=======================*/

void GOptions_Music( int page )
{
    if ( !Music_Flag ) SB_abort(0x02); else
    {
        if ( Sound_Source==SOUND_BLASTER ) SB_play_cmf("SOUNDS\\MUSIC.CMF",40,TRUE);
    }
}

void GOptions_No_Sound( int page )
{
    if ( No_Sound_Flag )
    {
        Effects_Flag = Music_Flag = FALSE;
        SB_abort(0x03);
    }
    GOptions.o[ EFFECTS_OPTIONS_TOKEN ].active = !No_Sound_Flag;
    if ( Sound_Source==SOUND_BLASTER ) GOptions.o[ MUSIC_OPTIONS_TOKEN ].active = !No_Sound_Flag;
}

void GOptions_Postdisplay( int page )
{
    fadeout( &Pal,0 );
    showpage( 0 );
    fadein( &Pal,0 );
    CONSUME_KEYS;
}

void GOptions_Predisplay( int page )
{
    char    *msg1="Game Options";
    char    *msg2="Press ESC When Done";

    fadeout( &Pal,0 );
    showpage( 1 );
    Draw_Fractal_Background( 1 );
    Spr_Print( SFont,msg1,(VS.mx+1-Spr_Strlen(SFont,msg1))>>1,5,PROPORTIONAL,HORIZ,1 );
    Spr_Print( SFont,msg2,(VS.mx+1-Spr_Strlen(SFont,msg2))>>1,VS.my-16,PROPORTIONAL,HORIZ,1 );
    fadein( &Pal,0 );
    CONSUME_KEYS;
}

/*========================[ End Of Program File ]=============================*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -