PDA

Voir la version complète : [PSP][Aide] Reboot si tu me tiens [résolu]


Solevis
02/12/2007, 17h50
Bonjour a tous,

Pour mon Troisième topic dans cette section, je vous offre une fleur :fleur:
Mon problème est tout bête, je lance mon Homebrew, mon image s'affiche, mon texte
également, puis "pouf" reboot de la machine.:ninja:

J'ai tenté de virer des conditions ,des variables mais toujours ce même problème.
Je pense (quasiment sur) que ca vient de ma fonction Distribuer().

Comme je suis généreux obligé pour que vous m'aidiez voici tout le Code source :

//The main library OSLib
#include <oslib/oslib.h>
#include <time.h>

//The callbacks
PSP_MODULE_INFO("Battle Card", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

#define NOMBRE_CARTE 30

void Distribuer();


OSL_IMAGE *plateau;
int Carte[4] = {0};
int DebutJeu = 1;

int main()
{
//Initialization of the library
oslInit(0);
oslInitGfx(OSL_PF_8888, 1);

//Chargement des images
plateau = oslLoadImageFile("plateau.png", OSL_IN_RAM, OSL_PF_5551);
if (!plateau)
oslDebug("Impossible to load one or more files. Check if all the files are copied in the game folder.");

//Boucle Principale
while (!osl_quit)
{
oslStartDrawing();

//Read the keys
oslReadKeys();

//Dessine
oslDrawImage(plateau);

//Distribution des cartes
Distribuer();

if (osl_keys->pressed.start) oslQuit();


oslEndDrawing();

//Synchronize the screen
oslSyncFrame();
}

//Leaving the program
oslEndGfx();
oslQuit();
return 0;
}

void Distribuer()
{
int MAX = NOMBRE_CARTE;
int MIN = 1;
int i = 0;

//Initialise le Random
srand(time(NULL));

if(DebutJeu) //Si le jeu debute, on distribue 5 cartes
{
for(i=0;i<5;i++)
{
Carte[i] = (rand() % (MAX - MIN + 1)) + MIN;
oslPrintf("%d\n",Carte[i]);
}
DebutJeu = 0;
}
}

Merci d'avance :snif2:

Dr.Vince
02/12/2007, 18h45
c'est quoi la valeur de NOMBRE_CARTE ??

Solevis
02/12/2007, 19h25
#define NOMBRE_CARTE 30

Dr.Vince
02/12/2007, 23h30
en fait ma question servait strictement à rien

donc et si tu essaies en modifiant la ligne srand(time(NULL)) et en mettant une valeur fixe comme argument à la place de time(NULL) ça donne quoi ??

Yodajr
03/12/2007, 00h04
Je pense (quasiment sur) que ca vient de ma fonction Distribuer().
Sois en tout à fait sûr en la virant de la boucle principale, si ça plante toujours, c'est que le blem n'y est pas ;)

Sinon oui comme le préconise vince, le seul truc qui parait chelou, c'est time, donc teste voir...

daaa57150
03/12/2007, 17h04
//...

int Carte[4] = {0};

//...

for(i=0;i<5;i++)
Carte[i] = (rand() % (MAX - MIN + 1)) + MIN;
je dirais que tu n'as que 4 places dans ton tableau Carte et que tu essaies d'en remplir 5.

essaie avec ca (non testé mais bon):
int Carte[5]={0,0,0,0,0}; //initialisation inutile dans ton cas mais c'est plutot ca que tu cherchais à faire.

pour ton rand()% machin truc j'ai pas regardé mais au pire ca sera pas les bonnes valeurs, sans pour autant planter.

Solevis
03/12/2007, 19h50
Carte[4] = 5 valeurs

Carte[0]
Carte[1]
Carte[2]
Carte[3]
Carte[4]

Et mon for,i prendra les valeurs suivantes :
0
1
2
3
4
Donc a priori c'est ok ?
Je vais quand meme regarder les source du "Plus ou moins " de Poisson

daaa57150
03/12/2007, 20h17
si tu veux 5 valeurs, il faut le déclarer comme ca : int Carte[5];
les numeros des cases vont donc de 0 à 4, ca fait bien 5 cases.

essaie tu verras que c'est ca.
http://www.commentcamarche.net/c/ctab.php3

Dr.Vince
03/12/2007, 21h21
si tu veux 5 valeurs, il faut le déclarer comme ca : int Carte[5];
les numeros des cases vont donc de 0 à 4, ca fait bien 5 cases.

essaie tu verras que c'est ca.
http://www.commentcamarche.net/c/ctab.php3

+1

Solevis
04/12/2007, 19h03
Effectivement le probleme viens bien de la :)
Merci !

daaa57150
04/12/2007, 21h49
de rien, n'hésite pas à demander si tu as de nouveau un problème (ou pas d'ailleurs).

sinon juste une petite remarque au passage, il est de convention, du moins en java mais un peu partout il me semble, que les variables commencent par une minuscule et les noms de classe (ou struct si tu fait du C) par une majuscule (il ne faut pas regarder chez microsoft qui évidamment fait tout le contraire: string, list etc..).
pour les fonctions, minuscule aussi.

Solevis
04/12/2007, 21h58
Oui je le fais mais j'ai codé a l'arrache la ^^
Par contre, aurais-tu un conseil pour eviter les variables global comme je fais ?

Dr.Vince
04/12/2007, 23h20
bah tu peux les passer en paramètres de tes fonctions

daaa57150
05/12/2007, 10h54
bah tu peux les passer en paramètres de tes fonctions
c'est ce que j'aurais dis également.
mais certaines variables que tu utilises partout sont très bien en globales et ca semble être le cas chez toi, dans l'état actuel c'est bien comme c'est je trouve.

Solevis
05/12/2007, 14h27
D'accord, j'en utilise pas des tonnes aussi ^_^
Je retourne programmer !

PS : Petite question, comment puis-je avoir une variable variable ? O_o
Par exemple :

J'ai Choix = 2
Et j'aimerais faire : oslDrawImage(Carte"Choix");

Je sais pas si vous avez compris <<

Dr.Vince
05/12/2007, 14h30
oslDrawImage(Carte[Choix]);


si j'ai compris la question

Solevis
05/12/2007, 14h33
Pas bete xD
Je Test.

Merci