PDA

Voir la version complète : [GBA][Tutorial] Afficher des scores avec ses propres sprites


Bobby Sixkilla
19/09/2006, 01h12
Afficher des scores avec ses propres sprites
Auteur : Alto

Voilà le code pour afficher un score avec ses propres sprites. Ici, c'est un score à 4 chiffres. Je ne vous fais pas l'affront de vous filer mes table de caractères dessinées par moi sous Paint et ne comportant que les chiffres de 0 à 7.


// Un include pour les gouverner tous
#include <mygba.h>

// Les petites images (table de caractère et palette)

#include "gfx/object.pal.c"
#include "gfx/chiffres.raw.c"


// Les variables globales
u8 position1; //les 4 chiffres du scores
u8 position2; //
u8 position3; //
u8 position4; //
u16 score=5555; // un score réalisé moi meme sur un jeu assez bien dur quand même
u16 ScoreTemp=0; // Ca va servir à pas réecrire le score s'il ne change pas

// Prototype des fonctions

void vbl_func();
void query_buttons();
void AfficheScore();

// main() qui l'eu cru..
int main()
{

// HAMlib
ham_Init();


// background mode
ham_SetBgMode(1);

//Palette de nos 4 sprites (les 4 chiffres)
ham_LoadObjPal((void*)object_Palette,256);



// Et boum on rentre les 4 sprites dans la gba
// pensez à changer les donnés si vos chiffres ne sont pas
//en 64*64 pixels

position1 = ham_CreateObj((void*)chiffres_Bitmap,
0,3,OBJ_MODE_NORMAL,1,0,0,0,0,0,0,130,50);

position2 = ham_CreateObj((void*)chiffres_Bitmap,
0,3,OBJ_MODE_NORMAL,1,0,0,0,0,0,0,100,50);

position3 = ham_CreateObj((void*)chiffres_Bitmap,
0,3,OBJ_MODE_NORMAL,1,0,0,0,0,0,0,70,50);

position4 = ham_CreateObj((void*)chiffres_Bitmap,
0,3,OBJ_MODE_NORMAL,1,0,0,0,0,0,0,50,50);


// Le truc qui se déclenche toutes les images
ham_StartIntHandler(INT_TYPE_VBL,(void*)&vbl_func);

// loopinge ad vitam eternam
while(1) {}

return 0;
} // fin du main() waou

//**********************
// Fonction: vbl_func()
// But dans la vie: se lancer a chaque rafraichissment d'image
//**********************
void vbl_func()
{

ham_CopyObjToOAM(); //affiche nos 4 sprites sur l'ecran

query_buttons(); // ca sert que pour la démo en fait : pour faire varier le score manuelement


AfficheScore(); //la fameuse fonction...


return;
} // fin de vblFunc()

//******************************
// Fonction: query_buttons()
// But : regarde tes doigts
//******************************
void query_buttons()
{
// pad vers le haut
if(F_CTRLINPUT_UP_PRESSED)
{
if (score < 9999)
score++; // on fait monter le score
return;
}


// pad vers le bas
if(F_CTRLINPUT_DOWN_PRESSED)
{
if (score > 0) score--; // et la descendre
return;
}


return;
} // fin de query_buttons()

//******************************************
// Fonction: AfficheScore() *
// Utilité : Affiche score avec des sprites*
//******************************************

void AfficheScore(){


int chiffre1,chiffre2,chiffre3,chiffre4; //variable locale elle servent que là en fait

if(score != ScoreTemp)// ne se lance que si le score a changé
{
chiffre1=score%10; //un peu de logique explique ces 4 lignes
chiffre2=((score%100) - (score%10))/10;
chiffre3=((score%1000) - (score%100))/100;
chiffre4=((score%10000) - (score%1000))/1000;


ham_UpdateObjGfx(position1,//sprite du 1° chiffre
(void*)&chiffres_Bitmap[64*64*chiffre1]); //découpe le sprite correspondant au chiffre 1 de 64*64 pxl


ham_UpdateObjGfx(position2,//sprite du 2° chiffre
(void*)&chiffres_Bitmap[64*64*chiffre2]);//découpe le sprite correspondant au chiffre 2 de 64*64 pxl


ham_UpdateObjGfx(position3,//sprite du 3° chiffre
(void*)&chiffres_Bitmap[64*64*chiffre3]);//découpe le sprite correspondant au chiffre 3 de 64*64 pxl


ham_UpdateObjGfx(position4,//sprite du 4° chiffre
(void*)&chiffres_Bitmap[64*64*chiffre4]);//découpe le sprite correspondant au chiffre 4 de 64*64 pxl
}


ScoreTemp=score; // enregistre le score actuel pr verifier à la prochaine boucle qu'il a changé


//en mettant de 00 a 99 sur une table tu gagnes 4 lignes et 2 sprites en moins
//(et encore plus si les scores sont gros)

}