Programación Wii - Template comentado

En construcción.png

Este artículo está en construcción.

Por esta razón, seguramente habrá lagunas en el contenido o en el formato. Por favor, antes de cambiar el contenido, consulta la página de discusión del artículo.

El estilo de este artículo debe ser mejorado.

El artículo no sigue completamente las convenciones de estilo.


Descripción

El programa generado por este código es el famoso "Hello World", o lo que es lo mismo, mostraremos por pantalla el mensaje "Hola mundo".

printf("Hola Mundo\n");

La función encargada de imprimir una cadena de texto en pantalla es en este caso printf("cualquier texto");
Añadiendo \n al final del texto hacemos que se "salte una línea", esto es, que si volvemos a utilizar la función printf(); el siguiente texto se mostrará una línea más abajo.

Aprovecharemos también el código para comprobar cómo se lee el estado de los botones, en nuestro caso el programa dejará de ejecutarse en el caso de que se presionen simultáneamente Z y Start.

if( (botonesPulsados & PAD_TRIGGER_Z) && (botonesPulsados & PAD_BUTTON_START) ) exit(0);

Anteriormente habremos tenido que refrescar la información de los pads conectados: PAD_ScanPads();

A continuación creamos una variable de tipo int para almacenar el valor que nos devuelva la función encargada de si los botones están siendo pulsados.
int botonesPulsados = PAD_ButtonsHeld(0);


Código

//LIBRERIAS////////////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>  //Para manejar de ficheros
#include <stdlib.h> 
#include <string.h> //Funciones para operar con cadenas: strcpy(), strcmp()...
#include <malloc.h> //
#include <ogcsys.h>
#include <gccore.h>

//DATOS GLOBALES///////////////////////////////////////////////////////////////////////////////////
static void *xfb = NULL; //Puntero que señalará a nuestro frame buffer (pantalla virtual)
static GXRModeObj *rmode = NULL; //Estructura para cargar los datos del modo de vídeo

//-------------------------------------------------------------------------------------------------
// MAIN
//-------------------------------------------------------------------------------------------------
int main(int argc, char **argv) {

	//Inicializaciones.............................................................................
	VIDEO_Init(); // Iniciamos e modo de video
	PAD_Init(); //Iniciamos la gestión de los pads
	
	//Establecer modo de vídeo.....................................................................
	switch(VIDEO_GetCurrentTvMode()) {  //Averiguamos qué modo de video usa la consola...
		case VI_NTSC:
			rmode = &TVNtsc480IntDf; //...y cargamos la información de éste en rmode
			break;
		case VI_PAL:
			rmode = &TVPal528IntDf;
			break;
		case VI_MPAL:
			rmode = &TVMpal480IntDf;
			break;
		default:
			rmode = &TVNtsc480IntDf;
			break;
	}

	//Reservamos memoria para la pantalla virtual en función de la resolución que emplearemos.....
	xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));
	console_init(xfb,20,20,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*VI_DISPLAY_PIX_SZ);
	
	VIDEO_Configure(rmode);
	VIDEO_SetNextFramebuffer(xfb);
	VIDEO_SetBlack(FALSE);
	VIDEO_Flush();
	VIDEO_WaitVSync();
	if(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync();
 

	printf("Hola Mundo!\n"); //Imprimimos en pantalla la cadena 

	while(1) { //Lanzamos un bucle infinito (se ejecuta mientras 1 sea distinto de 0)
 		PAD_ScanPads();  //Actualizamos la información sobre el estado de los pads
               int botonesPulsados = PAD_ButtonsHeld(0); //Cargamos nuestra variable
               if( (botonesPulsados & PAD_TRIGGER_Z) && (botonesPulsados & PAD_BUTTON_START) ) exit(0); 
		VIDEO_WaitVSync();  //Esperamos al retrazo vertical
        }//fin del while

	return 0;
}


Apuntes

Pendiente