Anuncios Google

Sample de menu basico

Tutoriales Avanzados Homebrewes

Marce_82 nos acerca un Sample, o ejemplo de codigo, para que veais como crear un menu en lenguaje C para PSP. Util si sois programadores, o quereis aventuraros a crear vuestro propio Homebrew.

Codigo de menu basico

Sample Menu Basico

Código:

/*************************************************************
* *
* Name: Sample Menu *
* Author: Xcorpia & Marce82 *
* Web-Site: marce82projects.blogspot.com *
* *
*************************************************************/
 
// Libreria a Incluir Necesarias
#include <pspsdk>
#include <pspkernel>
#include <psppower>
#include <pspctrl>
#include <pspdisplay>
#include <pspdebug>
 
PSP_MODULE_INFO("Sample Menu", 0, 1, 0);
PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER);
 
SceCtrlData currentPad, lastPad;
 
int opcion = 1;
int down = 1;
int up = 1;
 
void Menu_A()
{
opcion = 1;
down = 1;
up = 1;
 
pspDebugScreenClear();
pspDebugScreenSetTextColor(0xFF0000);
pspDebugScreenPrintf("\n Sample Menu By Xcorpia & Marce82\n\n\n");
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf(" Seleccione una Opcion:\n\n");
pspDebugScreenSetTextColor(0x0000FF);
pspDebugScreenPrintf(" -> Opcion 1\n");
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf(" -> Opcion 2\n\n");
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf(" -> Salir\n\n\n");
pspDebugScreenSetTextColor(0x00FF00);
pspDebugScreenPrintf(" Pulse X para selecionar la opcion");
}
 
void Menu_B()
{
opcion = 2;
down = 2;
up = 2;
 
pspDebugScreenClear();
pspDebugScreenSetTextColor(0xFF0000);
pspDebugScreenPrintf("\n Sample Menu By Xcorpia & Marce82\n\n\n");
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf(" Seleccione una Opcion:\n\n");
pspDebugScreenPrintf(" -> Opcion 1\n");
pspDebugScreenSetTextColor(0x0000FF);
pspDebugScreenPrintf(" -> Opcion 2\n\n");
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf(" -> Salir\n\n\n");
pspDebugScreenSetTextColor(0x00FF00);
pspDebugScreenPrintf(" Pulse X para selecionar la opcion");
}
 
void Menu_C()
{
opcion = 3;
down = 3;
up = 3;
 
pspDebugScreenClear();
pspDebugScreenSetTextColor(0xFF0000);
pspDebugScreenPrintf("\n Sample Menu By Xcorpia & Marce82\n\n\n");
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf(" Seleccione una Opcion:\n\n");
pspDebugScreenPrintf(" -> Opcion 1\n");
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf(" -> Opcion 2\n\n");
pspDebugScreenSetTextColor(0x0000FF);
pspDebugScreenPrintf(" -> Salir\n\n\n");
pspDebugScreenSetTextColor(0x00FF00);
pspDebugScreenPrintf(" Pulse X para selecionar la opcion");
}
 
void Opcion_A()
{
pspDebugScreenClear();
pspDebugScreenSetTextColor(0x00FF00);
pspDebugScreenPrintf("\n Define aqui tu Opcion 1");
sceKernelDelayThread(2*1000*1000);
Menu_A();
}
 
void Opcion_B()
{
pspDebugScreenClear();
pspDebugScreenSetTextColor(0x00FF00);
pspDebugScreenPrintf("\n Define aqui tu Opcion 2");
sceKernelDelayThread(2*1000*1000);
Menu_A();
}
 
void Opcion_C()
{
pspDebugScreenSetTextColor(0x00FF00);
pspDebugScreenPrintf("\n\n Saliendo... Espere...");
sceKernelDelayThread(2*1000*1000);
sceKernelExitGame();
}
 
int main()
{
sceCtrlReadBufferPositive(&lastPad, 1);
 
pspDebugScreenInit();
Menu_A();
 
while(1)
{
 
sceCtrlReadBufferPositive(&currentPad, 1);
 
if( currentPad.Buttons != lastPad.Buttons )
{
lastPad = currentPad;
 
if(currentPad.Buttons & PSP_CTRL_DOWN)
{
switch(down)
{
case 1: Menu_B();
break;
 
case 2: Menu_C();
break;
 
case 3: Menu_A();
break;
}
}
 
if(currentPad.Buttons & PSP_CTRL_UP)
{
switch(up)
{
case 1: Menu_C();
break;
 
case 2: Menu_A();
break;
 
case 3: Menu_B();
break;
}
}
}
 
if(currentPad.Buttons & PSP_CTRL_CROSS)
{
switch(opcion)
{
case 1: Opcion_A();
break;
 
case 2: Opcion_B();
break;
 
case 3: Opcion_C();
break;
}
}
}
} 

Makefile Menu Basico

Código:

TARGET = SampleMenu
OBJS = menu.o
 
INCDIR =
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
 
LIBDIR =
LDFLAGS =
LIBS =
 
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Sample Menu
 
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak 

Descargar Sample de menu (solo usuarios registrados)

 

4.583335
Tu voto: Ninguno Votos totales: 4.6 (12 votos)

Anuncios Google

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de PhAnThOm

lleno de erroress!!!... para

lleno de erroress!!!... para un menu tan simple :S:S:S:S

Imagen de ipn2

este amm hay un error

asi esta en la noticia y esta mal

#include <pspsdk>
#include <pspkernel>
#include <psppower>
#include <pspctrl>
#include <pspdisplay>
#include <pspdebug>

y debe ir asi

#include <pspsdk.h>
#include <pspkerne.hl>
#include <psppower.h>
#include <pspctrl.h>
#include <pspdisplay.h>
#include <pspdebug.h>

otro es este

void Opcion_A()
{
pspDebugScreenClear();
pspDebugScreenSetTextColor(0x00FF00);
pspDebugScreenPrintf("\n Define aqui tu Opcion 1");
sceKernelDelayThread(2*1000*1000);
Menu_A();
}
 
void Opcion_B()
{
pspDebugScreenClear();
pspDebugScreenSetTextColor(0x00FF00);
pspDebugScreenPrintf("\n Define aqui tu Opcion 2");
sceKernelDelayThread(2*1000*1000);
Menu_A(); //* mucho ojo aqui*//
}

y deberia ir asi

void Opcion_A()
{
pspDebugScreenClear();
pspDebugScreenSetTextColor(0x00FF00);
pspDebugScreenPrintf("\n Define aqui tu Opcion 1");
sceKernelDelayThread(2*1000*1000);
Menu_A();
}
 
void Opcion_B()
{
pspDebugScreenClear();
pspDebugScreenSetTextColor(0x00FF00);
pspDebugScreenPrintf("\n Define aqui tu Opcion 2");
sceKernelDelayThread(2*1000*1000);
Menu_B(); //* Notas el cambio?*//
}

Imagen de ipn2

xDDDD

En la segunda libreria que fue la que corregi hay otro error xD fue error de dedo es

#include <pspkernel.h>

y no con .hl xDDDD perdon

y editen el post


Saludos

ipn2

Imagen de klozz

jaja xD neta de primera vista

jaja xD neta de primera vista no me di cuenta de la falta en las librerias xD

y en el segundo jejeje saludos ipn2 :D

Imagen de ipn2

¬¬'

Hay que leer amigo xD y ps igual y sea una trampilla por ahi para que la gente lea bien xD aunque no creo ¬¬

Imagen de klozz

jajaja neta siempre leo bien

jajaja neta siempre leo bien pero esta ves se me fue xD u.u

aunque bueno somos humanos y cometemos errores que el haya cometido uno(weno varios xD) pues nimodo aunque si seria bueno que editaran el pozt para que los demas user no les pase lo que a mi xD que por no leer bien xD hubo muchos errores saluds


TEAM MEX Homebrew y desarrollo PSP

Metal TrooperV.Pre-Alpha (15%)Lua , 10% C .

Ubunshell VProof. (45%)C

RPG Magues (35%)Lua , 5% C


Android development for Xperia X8 ^^ mis roms en XDA-Developers ya que en Scenebeta no las publican xD

Xperience  | MIUI Pikachu | Semc debrand engine | Froyexp | Xperience walkman mod | Android 4.0.4 CN9 Crema de nieve

-- KLOZZ

Imagen de ipn2

este si men

pero lo gracioso de esto es que lleva años y nadie lo habia notado xDDDDD

y si espero editen el post

Imagen de klozz

woow gracias por el tuto

woow gracias por el tuto

HOLA...

Como hago para poder cambiar los codigos?? para los archivos .c como??? 

 

y como copio y pego el codigo en lo de simbolo de sistema?? tengo el win vista


¡¡Feliz Navidad y Prospero Año Nuevo!!

UNA DUDA

Si yo quiero que dentro de opcion_a (por ejemplo) haya otro menu como seria esto?

gracias

saludos

No se podría...

No es uqe sea muy experimentado en C, pero no se podria mejor poner una variable con el numero de seleccion del menu que vaya cambiando segun se pulse el Pad y con una sola funcion de imprimir el menu que en cada opcion con un simple "If" decida si poner color resaltado o no?

 

 

es una opinion nada mas.... para ahorrar lineas de codigo sin complicarlo demasiado. Corregidme si me equivoco.

Aún así esta muy bien explicado =)

 

Un saludo

Así sería mejor...

Tienes razón, igual que tu creo que sería mejor así, poner un parámetro en la función en la que se indique cuál debe ser selccionado, como ejemplo, algo así:

void Menu(int optColor)
{
pspDebugScreenClear();
pspDebugScreenSetTextColor(0xFF0000);
pspDebugScreenPrintf("\n Sample Menu By Xcorpia & Marce82\n\n\n");
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf(" Seleccione una Opcion:\n\n");

// Para la Opción 1
if(optColor == 1)
pspDebugScreenSetTextColor(0x0000FF);
else
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf(" -> Opcion 1\n");

// Para la Opción 2
if(optColor == 2)
pspDebugScreenSetTextColor(0x0000FF);
else
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf(" -> Opcion 2\n\n");

// Para la Opción 3
if(optColor == 3)
pspDebugScreenSetTextColor(0x0000FF);
else
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf(" -> Salir\n\n\n");
pspDebugScreenSetTextColor(0x00FF00);
pspDebugScreenPrintf(" Pulse X para selecionar la opcion");
}

 Claro, esto ya es solo optimización del código, aún así muy bueno =), saludos! ^^ 

Imagen de Gohrum

Esta bien, no esta nada mal,

Esta bien, no esta nada mal, pero no es C++ (como pone la intro) es simplemente C. :)

Salu

Imagen de Unicorn

Por lo que yo se

C y C++ son lo mismo, solo que en C++ estan disponibles las funciones booleanas. Corrigeme si me equivoco, y lo modifico ;-)

Imagen de XWolf

.

Te equivocas
c y c++ son casi lo mismo, ambos tienen booleanos, pero c++ esta orientado a objetos (clases instancias y demás)

Imagen de Unicorn

Mmmm...

ahora si que me habeis picado xD. He dado un añito en la universidad de C++, y no he usado para nada objetos.

Para mi, un lenguaje orientado a objetos, es Java. Si con C no puedes usar objetos, y con C++  puedes usarlos o no opcionalmente...a mi modo de ver es lo mismo (un codigo de C, funcionara en C++ con minimas modificaciones, pero podria no ocurrir al reves).

No obstante, como dois dos contra uno, lo cambio ahora mismo ;-). Un saludo coders. 


Para recibir ayuda más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda revisar el Manual del perfecto forero y las Normas de la Comunidad.

Ademas de los objetos C++

Ademas de los objetos C++ tiene varias mejoras con respecto a C, como la sobrecarga de funciones, definir variables en cualquier lado(pe for (int i; ...)) y otras muchas cosas.

 

Pero el C+++ se invento porque el C se hizo muy popular  y los programadores necesitabann "ganar mas pasta" currando menos, asi que lo que en C hacen dos personas en un mes, en c++ necesita 7personas y 4 meses.

 Coñas aparte a la que un proyecto crece mucho el C++ se hace casi imprescindible .

Imagen de XWolf

:P

y no usaste el
extern "C" {
en c++?
es una forma de saltarse la orietación

Imagen de Unicorn

Nah

solo funciones. Creo que los objetos en C++ se definen con "class", palabra tabu aquel año xD.

Imagen de Gohrum

joder, ya me he mareado,

joder, ya me he mareado, xD 

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.