30 gen 2010

[C] Come fare un menu

Ho voluto fare una guida per un Menu in C dato che non si trova da nessuna parte, o al massimo trovate il menu in OSLib ma poi è difficile creare applicazioni con l'OSLib. Questo è il codice:

#include
#include
#include
#include
#include
#include

#define printf pspDebugScreenPrintf


PSP_MODULE_INFO("Menu in C", 0, 1, 0);
PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER);

SceCtrlData currentPad, lastPad;

int opzione = 1;
int giu = 1;
int su = 1;
int cerchio = 1;

void Menu_A()
{
opzione = 1;
giu = 1;
su = 1;

pspDebugScreenClear();
pspDebugScreenSetTextColor(0xFF0000);
printf("\n Menu in C\n\n\n");
pspDebugScreenSetTextColor(0xFFFFFF);
printf(" Seleziona un opzione:\n\n");
pspDebugScreenSetTextColor(0x0000FF);
printf(" -> tasto 1\n");
pspDebugScreenSetTextColor(0xFFFFFF);
printf(" -> tasto 2\n");
pspDebugScreenSetTextColor(0xFFFFFF);
printf(" -> Esci\n\n\n");
pspDebugScreenSetTextColor(0x00FF00);
printf(" Premi X per selezionare un opzione.");
}

void Menu_B()
{
opzione = 2;
giu = 2;
su = 2;

pspDebugScreenClear();
pspDebugScreenSetTextColor(0xFF0000);
printf("\n Menu in C\n\n\n");
pspDebugScreenSetTextColor(0xFFFFFF);
printf(" Seleziona un opzione:\n\n");
printf(" -> tasto 1\n");
pspDebugScreenSetTextColor(0x0000FF);
printf(" -> tasto 2\n");
pspDebugScreenSetTextColor(0xFFFFFF);
printf(" -> Esci\n\n\n");
pspDebugScreenSetTextColor(0x00FF00);
printf(" Premi X per selezionare un opzione.");
}

void Menu_C()
{
opzione = 3;
giu = 3;
su = 3;

pspDebugScreenClear();
pspDebugScreenSetTextColor(0xFF0000);
printf("\n Menu in C\n\n\n");
pspDebugScreenSetTextColor(0xFFFFFF);
printf(" Seleziona un opzione:\n\n");
printf(" -> tasto 1\n");
pspDebugScreenSetTextColor(0xFFFFFF);
printf(" -> tasto 2\n");
pspDebugScreenSetTextColor(0x0000FF);
printf(" -> Esci\n\n\n");
pspDebugScreenSetTextColor(0x00FF00);
printf(" Premi X per selezionare un opzione.");
}

void Option_A()
{
cerchio = 4;

pspDebugScreenClear();
pspDebugScreenSetTextColor(0x00FF00);
printf("\n Prova tasto 1\n");
pspDebugScreenSetTextColor(0x00FF00);
printf("\n\n Premi O per uscire");
sceKernelDelayThread(2*1000*1000);
}

void Option_B()
{
cerchio = 5;

pspDebugScreenClear();
pspDebugScreenInit();
pspDebugScreenSetTextColor(0xFFFFFF);
printf("Prova tasto 2");
pspDebugScreenSetTextColor(0x00FF00);
printf("\n\n\n Premi O per uscire");
sceKernelDelayThread(2*1000*1000);
}

void Option_C()
{
pspDebugScreenSetTextColor(0x00FF00);
printf("\n\n\n\n Esco...");
sceKernelDelayThread(2*1000*1000);
sceKernelExitGame();
}

int main()
{
sceCtrlReadBufferPositive(&lastPad, 1);

pspDebugScreenInit();
Menu_A();

while(1)
{

sceCtrlReadBufferPositive(¤tPad, 1);

if( currentPad.Buttons != lastPad.Buttons )
{
lastPad = currentPad;

if(currentPad.Buttons & PSP_CTRL_DOWN)
{
switch(giu)
{
case 1: Menu_B();
break;

case 2: Menu_C();
break;

case 3: Menu_A();
break;
}
}

if(currentPad.Buttons & PSP_CTRL_UP)
{
switch(su)
{
case 1: Menu_C();
break;

case 2: Menu_A();
break;

case 3: Menu_B();
break;
}
}
}

if(currentPad.Buttons & PSP_CTRL_CROSS)
{
switch(opzione)
{
case 1: Option_A();
break;

case 2: Option_B();
break;

case 3: Option_C();
break;

}
}
if(currentPad.Buttons & PSP_CTRL_CIRCLE)
{
switch(cerchio)
{
case 4: Menu_A();
break;

case 5: Menu_A();
break;

}
}
}
}



i primi #inlcude includono le librerie necessarie per il menu. Verso al fine potete scelgiere quale tasto usare, per esempio io ho utilizzato cerchio per uscire potete utilizzare triangolo (PSP_CTRL_TRIANGLE) e quindi potete modificare dentro switch(triangolo) e poi modifcarlo in tuti i menu che lo contengono e nell'int iniziale. Al massimo spiegherò tutto più tardi...

ecco il Makefile.mk

TARGET = menu
OBJS = main.o
PSP_EBOOT_TITLE = Menu in C

BUILD_PRX = 1
PSP_FW_VERSION = 401

CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS) -c

LIBS =
LDFLAGS =

EXTRA_TARGETS = EBOOT.PBP

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak




TARGET indica il nome che di deve dare al PRX (es.: ciao e il prx si chiamerà ciao.prx)
OBJS indica gli oggetti inclusi in questo caso main.o ma potrebbe essere crt0.o
PSP_EBOOT_TITLE indica il nome del vostro homebrew (es.: Ciao Mondo)
BUILD_PRX significa quanti PRX dovranno sucire in compilazione...
PSP_FW_VERSION sta ad indicare da quale versione si può utilizzare l'homebrew...
LIBS sono le librerie aggiuntive
EXTRA_TARGETS è sempre incluso EBOOT.PBP se non lo metti ti uscirà solo il PRX

Nessun commento:

Posta un commento