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

📄 koulesmenu.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
/***********************************************************
Copyright(C)2007,Rockchip Co., Ltd. All Rights Reserved.
File:koulesmenu.c
Desc:实现Koules游戏的菜单.
Note:
Author:czs
$Log: koulesmenu.c,v $
Revision 1.3  2008/06/19 04:42:27  Administrator
代码整理!

Revision 1.2  2008/06/06 03:15:37  XXX
更改游戏在RGB屏情况的问题

Revision 1.1.1.1  2008/03/06 13:28:24  Lingzhaojun
no message

Revision 1.5  2008/01/07 08:19:17  Chenzushang
修改koules游戏的启动方式,直接启动而不再启动一个应用
添加koules游戏声音

Revision 1.4  2007/11/08 01:40:17  Chenzushang
修改Koules,使其运行于VideoTask任务下

Revision 1.3  2007/10/26 03:52:01  Chenzushang
添加CVS版本自动注释脚本

**********************************************************/
#include "koules.h"
#include "koulesapp.h"

#define KOULESSENSITIVITY 4

typedef struct
{
    char        *text;
    void (*func)();
} KOULESMENU_T;

typedef struct
{
    int         x, y, *number, max, min;
    int         line;
    void (*func)();
} KOULESNUM_T;

EXPORT int      koulesssound = 1;
EXPORT int      koulescontroller[5] = { ABSRTKYBD, ABSLTKYBD, JOY1, JOY2, ABSMDKYBD };

static KOULESNUM_T  koulesminim[2], koulesmaxim[2];
static int      koulesnmenu;
static int      koulesnnumbers;
static KOULESMENU_T     koulesmenu[20];
static int      koulesselected = 0;
static float    mx1, my1, mx1p, my1p;
static float    mx2, my2, mx2p, my2p;
static char     koulesplayertext[9 + 1] = "1 PLAYER"; // must be enough for "# PLAYERS" (ie. 9 + 1)
static char     koulesleveltext[] = "LEVEL 000";
#define KOULESYPOSITION(i) (KOULESMAPHEIGHT/2+20-5*koulesnmenu+10*i)
#define KOULESXPOSITION(i) (KOULESMAPWIDTH/2-4*strlen(koulesmenu[i].text))
#define KOULESXPOSITION1(i) (KOULESMAPWIDTH/2+4*strlen(koulesmenu[i].text))
//static int      koulesplayer, kouleslastplayer;

static void     Koulesmain_menu(void);
static void     Kouleschange_menu(void);

static void Koulescontrol_change(void)
{
    int player;

    player = koulesselected - 1;

    if (koulescontroller[player] == LASTCONTROLLER)
    {
        koulescontroller[player] = 0;
    }
    else
    {
        koulescontroller[player]++;
    }

    Kouleschange_menu();
}

void Koulesstart(void)
{
    int i;

    for (i = 0; i < koulesnrockets; i++)
    {
        koulesobject[i].score = 0;
    }
    koulesgamemode = KOULESMODEGAME;
    koulesgameplan_init();
    Koules_init_objects();
}

static void Koulesplayerchange(void)
{
    koulesplayertext[0] = koulesnrockets + '0';

    if (koulesnrockets == 1)
    {
        koulesplayertext[8] = 0;
    }
    else
    {
        koulesplayertext[8] = 'S';
    }
}

static void Kouleslevelchange(void)
{
    sprintf(koulesleveltext, "LEVEL %03i", kouleslastlevel + 1);
}

static void Koules_to_main_menu(void)
{   // Koules_save_rc ();
    Koulesmain_menu();
}
static void Kouleschange_menu(void)
{
    static char s[2][5][50],
    *s1;
    auto   int  i;

    koulesmenu[0].text = "BACK TO MAIN MENU";
    koulesmenu[0].func = Koules_to_main_menu;

    koulesnnumbers = 0;
    for (i = 0; i < koulesnrockets; i++)
    {
        if (koulescontroller[i] == RELLTKYBD)
        {
            s1 = "RELATIVE LEFT KEYBOARD (W/A/D)";
        }
        elif(koulescontroller[i] == ABSLTKYBD)
        {
            s1 = "ABSOLUTE LEFT KEYBOARD (W/A/S/D)";
        }
        elif(koulescontroller[i] == RELMDKYBD)
        {
            s1 = "RELATIVE MIDDLE KEYBOARD (I/J/L)";
        }
        elif(koulescontroller[i] == ABSMDKYBD)
        {
            s1 = "ABSOLUTE MIDDLE KEYBOARD (I/J/K/L)";
        }
        elif(koulescontroller[i] == RELRTKYBD)
        {
            s1 = "RELATIVE RIGHT KEYBOARD (CURSOR KEYS)";
        }
        elif(koulescontroller[i] == ABSRTKYBD)
        {
            s1 = "ABSOLUTE RIGHT KEYBOARD (CURSOR KEYS)";
        }
        elif(koulescontroller[i] == JOY1)
        {
            s1 = "JOYSTICK 1";
        }
        elif(koulescontroller[i] == JOY2)
        {
            s1 = "JOYSTICK 2";
        }
        sprintf(s[0][i], "PLAYER %i: %s", i + 1, s1);
        koulesmenu[i + 1].text = s[0][i];
        koulesmenu[i + 1].func = Koulescontrol_change;
    }
    koulesnmenu = koulesnrockets + 1;
    if (koulesselected >= koulesnmenu)
    {
        koulesselected = 0;
    }
}

static void Koulessetsound(void)
{
    koulesssound = !koulesssound;
    if (!koulesssound)
    {
        Koulesstop_sounds();
    }
    Koulesmain_menu();
}

static void Koules_veryhard(void)
{
    koulesdifficulty = 0;
    Koulesmain_menu();
}
static void     Koules_hard(void)
{
    koulesdifficulty = 1;
    Koulesmain_menu();
}
static void   Koules_medium(void)
{
    koulesdifficulty = 2;
    Koulesmain_menu();
}
static void     Koules_easy(void)
{
    koulesdifficulty = 3;
    Koulesmain_menu();
}
static void Koules_veryeasy(void)
{
    koulesdifficulty = 4;
    Koulesmain_menu();
}

static void  Koules_deathmatch(void)
{
    koulesgameplan = DEATHMATCH ;
    Koulesmain_menu();
}
static void Koules_cooperative(void)
{
    koulesgameplan = COOPERATIVE;
    Koulesmain_menu();
}

static void Kouleschange_mode(void)
{
    koulesmenu[0].text = "DEATH MATCH";
    koulesmenu[0].func = Koules_deathmatch;
    koulesmenu[1].text = "COOPERATIVE";
    koulesmenu[1].func = Koules_cooperative;
    koulesnnumbers = 0;
    koulesnmenu    = 2;
    if (koulesgameplan == DEATHMATCH)
    {
        koulesselected = 0;
    }
    else
    {
        koulesselected = 1;
    }
}

static void Kouleschange_obtiznost(void)
{
    koulesmenu[0].text = "VERY HARD";
    koulesmenu[0].func = Koules_veryhard;
    koulesmenu[1].text = "HARD";
    koulesmenu[1].func = Koules_hard;
    koulesmenu[2].text = "MEDIUM";
    koulesmenu[2].func = Koules_medium;
    koulesmenu[3].text = "EASY";
    koulesmenu[3].func = Koules_easy;
    koulesmenu[4].text = "VERY EASY";
    koulesmenu[4].func = Koules_veryeasy;
    koulesnnumbers = 0;
    koulesnmenu    = 5;
    koulesselected = koulesdifficulty;
}

/***************************************************************************/

static void Koulesmain_menu(void)
{
    koulesnnumbers = 2;
    koulesnmenu = 8 - 1;
    koulesmenu[0].text = "START GAME";
    koulesmenu[0].func = Koulesstart;
    koulesmenu[1].text = koulesplayertext;
    koulesmenu[1].func = Koulesplayerchange;
    koulesminim[0].x = KOULESXPOSITION(1);
    koulesminim[0].y = KOULESYPOSITION(1);
    koulesminim[0].line = 1;
    koulesminim[0].number = &koulesnrockets;
    koulesminim[0].max = 5;
    koulesminim[0].min = 1;
    koulesminim[0].func = Koulesplayerchange;
    koulesmaxim[0].x = KOULESXPOSITION(1) + 8 * 2;
    koulesmaxim[0].y = KOULESYPOSITION(1);
    koulesmaxim[0].line = 1;
    koulesmaxim[0].number = &koulesnrockets;
    koulesmaxim[0].max = 5;
    koulesmaxim[0].min = 1;
    koulesmaxim[0].func = Koulesplayerchange;
    Koulesplayerchange();
    Kouleslevelchange();
    koulesmenu[2].text = koulesleveltext;
    koulesmenu[2].func = Koulesplayerchange;
    koulesminim[1].x = KOULESXPOSITION(2) + 7 * 7;
    koulesminim[1].y = KOULESYPOSITION(2);
    koulesminim[1].line = 2;
    koulesminim[1].number = &kouleslastlevel;
    koulesminim[1].max = koulesmaxlevel;
    koulesminim[1].min = 0;
    koulesminim[1].func = Kouleslevelchange;
    koulesmaxim[1].x = KOULESXPOSITION(2) + 11 * 7;
    koulesmaxim[1].y = KOULESYPOSITION(2);
    koulesmaxim[1].line = 2;
    koulesmaxim[1].number = &kouleslastlevel;
    koulesmaxim[1].max = koulesmaxlevel;
    koulesmaxim[1].min = 0;
    koulesmaxim[1].func = Kouleslevelchange;
    koulesnnumbers = 2;
    //koulesmenu[3].text = "CONTROLS";
    //koulesmenu[3].func = Kouleschange_menu;
    koulesmenu[4-1].text = "GAME MODE";
    koulesmenu[4-1].func = Kouleschange_mode;
    koulesmenu[5-1].text = "koulesdifficulty";
    koulesmenu[5-1].func = Kouleschange_obtiznost;
    koulesmenu[6-1].text = koulesssound ? "SOUND ON" : "SOUND OFF";
    koulesmenu[6-1].func = Koulessetsound;
    koulesmenu[7-1].text = "QUIT";
    koulesmenu[7-1].func = Koulescleanexit;
    koulesselected = 0;
}

void Koulesinit_menu(void)
{
    koulesplayertext[0] = koulesnrockets + '0';
    Koulesmain_menu();
}

//#define VERSIONSTRING "VERSION 1.4 RELEASE 1.03: 2 MAY 2007"

void Koulesdraw_menu(const int draw)
{
    int i;

    if (draw)
    {
        Kouleslevelchange();

        KoulesDrawShadowText(KOULESMAPWIDTH / 2 -                     15 * 4,   50, "- K O U L E S -");
        //   KoulesDrawShadowText (KOULESMAPWIDTH / 2 -                     25 * 4,   70, "LINUX VERSION BY JAHUSOFT");
        //   KoulesDrawShadowText (KOULESMAPWIDTH / 2 -                     34 * 4,   80, "WINDOWS VERSION BY AMIGAN SOFTWARE");
//        KoulesDrawShadowText (KOULESMAPWIDTH / 2 - (strlen(VERSIONSTRING) * 4), 100, VERSIONSTRING);
//        KoulesDrawShadowText (KOULESMAPWIDTH / 2 -                     30 * 4,  120, "PRESS P FOR PAUSE / H FOR HELP");

        for (i = 0; i < koulesnmenu; i++)
        {
            KoulesDrawBlackMaskedText(KOULESXPOSITION(i) + 1, KOULESYPOSITION(i) + 1, koulesmenu[i].text);
            if (i == koulesselected)
            {
                KoulesDrawRedMaskedText(KOULESXPOSITION(i)    , KOULESYPOSITION(i)    , koulesmenu[i].text);
            }
            else
            {
                KoulesDrawWhiteMaskedText(KOULESXPOSITION(i)    , KOULESYPOSITION(i)    , koulesmenu[i].text);
            }
        }
    }
}

static int      inctime, changed, waittime;
static void
Koulesincrease(int i)
{
    changed = 1;
    if (waittime)
    {
        waittime--;
        return;
    }
    waittime = inctime;
    if (inctime > 1)
        inctime--;
    else
        (*koulesmaxim[i].number) += 2;
    (*koulesmaxim[i].number)++;
    if (*koulesmaxim[i].number > koulesmaxim[i].max)
        *koulesmaxim[i].number = koulesmaxim[i].max;
    if (koulesssound && inctime != 1)
        Koulesplay_sound(S_CREATOR2);
    koulesmaxim[i].func();
}
static void
KoulesDecrease(int i)
{
    changed = 1;
    if (waittime)
    {
        waittime--;
        return;
    }
    waittime = inctime;
    if (inctime > 1)
        inctime--;
    else
        (*koulesmaxim[i].number) -= 2;
    (*koulesminim[i].number)--;
    if (*koulesminim[i].number < koulesminim[i].min)
        *koulesminim[i].number = koulesminim[i].min;
    if (koulesssound && inctime != 1)
        Koulesplay_sound(S_CREATOR2);
    koulesminim[i].func();
}

void Koules_menu_keys(void)
{
    static int enter,
    esc,
    mtime = KOULESSENSITIVITY;
    auto   int ent   = 0,
                       i;

    if (koulesmaxim[1].max != koulesmaxlevel)
    {
        Koulesmain_menu();
    }
    changed = 0;

    if (koules_key_left)
    {
        for (i = 0; i < koulesnnumbers; i++)
        {
            if (koulesmaxim[i].line == koulesselected)
            {
                KoulesDecrease(i);
            }
        }
    }

    if (koules_key_right)
    {
        for (i = 0; i < koulesnnumbers; i++)
        {
            if (koulesmaxim[i].line == koulesselected)
            {
                Koulesincrease(i);
            }
        }
    }

    if (koules_key_esc)
    {
        if (!esc)
        {
            if (koulesnnumbers == 2)
            {
                Koulescleanexit(0);
            }
            Koules_to_main_menu();
        }
        esc = 1;
    }
    else esc = 0;

    if (koules_key_up && koulesselected > 0)
    {
        if (mtime == KOULESSENSITIVITY)
        {
            koulesselected--;
            mtime = 0;
        }
        else
        {
            mtime++;
        }
    }

    if (koules_key_down && koulesselected < koulesnmenu - 1)
    {
        if (mtime == KOULESSENSITIVITY)
        {
            koulesselected++;
            mtime = 0;
        }
        else
        {
            mtime++;
        }
    }

    if (!koules_key_up && !koules_key_down)
    {
        mtime = KOULESSENSITIVITY;
    }

    if (koules_key_enter)
    {
        ent = 1;
    }

    if (!ent && enter)
    {
        if (koulesssound)
        {
            Koulesplay_sound(S_CREATOR2);
        }
        koulesmenu[koulesselected].func();
    }

    enter = ent;
    if (!changed)
    {
        inctime = 7;
        waittime = 0;
    }
}

⌨️ 快捷键说明

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