📄 koulesmenu.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 + -