Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » Erreur en C bizarre
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Erreur en C bizarre

Posté le 30/10/2014 23:25

Salut j'ai (encore) un prbm avec le C sauf que la ca me saoule !!!
voici le code : http://pastebin.com/z2naxsp7 (allégé) et l'erreur est ici : alors que ceci (afficher le meilleur score) marche très bien dans jeu(), ici CA NE VEUT PAS : je m'explique ca veut avec les minutes et les secondes mais dès qu'il s'agit de parler de centieme de secondes la ya plus personne ! ca m'affiche soit 0 soit 1... et quand à la fin je regarde dans local variable (sur le SDK), je retrouve parfois record avec une valeur de -1,#QNAN (je ne délire pas c'est vraiment ce qu'il y a marqué omg )...
recording[28] est un int, PrintVariable est une fonction permettant d'afficher un int à telle coordonnées de la couleur qu'on veut.
Merci de votre aide mais moi la, après avoir passé 1h30 dessu je sature


1, 2 Suivante
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 30/10/2014 23:28 | #


Et lorsque je met sec_rec en float, lui aussi passe à 1 (alors que ce n'est pas sa valeur )
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Xavier59 Hors ligne Membre de CreativeCalc Points: 1337 Défis: 12 Message

Citer : Posté le 30/10/2014 23:39 | #


Essai avec :
cent_sec_rec=(record-((float)sec_rec))*100;
1337
Dodormeur Hors ligne Ancien rédacteur Points: 3964 Défis: 82 Message

Citer : Posté le 30/10/2014 23:43 | #


Sinon tu peux aussi eviter de passer par des variables et faire directement le calcul dans l'affichage

      
PrintVariable(101, scroll+10, (recording[0]/6000), 1);
PrintVariable(108, scroll+10, (recording[0]/100)%60, 1);
PrintVariable(119, scroll+10, recording[0]%100, 1);


Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 31/10/2014 17:59 | #


Un grand merci à dodo (en plus ca va me permettre d'optimiser ) et merci quand meme à xavier pour avoir pris la patience de regarder mon prbm
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1238 Défis: 54 Message

Citer : Posté le 31/10/2014 18:32 | #


Je ne suis pas sûr qu'on modulo soit particulièrement plus optimisé que des divisions et soustractions ^^, enfin, si ça marche c'est déjà ça !
Lephenixnoir Hors ligne Administrateur Points: 21025 Défis: 143 Message

Citer : Posté le 31/10/2014 18:37 | #


Niveau Asm aussi, je pense que le modulo c'est pas super...
Ben tiens, je vais regarder ce qu'en dit gcc, en plus je cherchais comment le faire, s'il n'y avait pas par hasard en instruction.
Dodormeur Hors ligne Ancien rédacteur Points: 3964 Défis: 82 Message

Citer : Posté le 31/10/2014 19:22 | #


Maintenant tout dépend de ce qu'on appelle optimiser
Au niveau de la ram, c'est mieux que d'avoir des variables, par contre au niveau de la vitesse d’exécution, c'est clair qu'il vaut mieux retenir le résultat plutôt que de le recalculer a chaque fois
Mais au niveau de la lisibilité, les modulos sont quand même vachement clair
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Lephenixnoir Hors ligne Administrateur Points: 21025 Défis: 143 Message

Citer : Posté le 31/10/2014 19:46 | #


Oui mais là n'est pas le problème : c'est beaucoup plus optimisé d'utiliser des soustractions et des divisions que des modulos.
D'ailleurs même la division et la racine carrée flottantes sont plus rapides que le modulo !
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 11/11/2014 16:05 | #


Salut j'ai toujours une erreur quand je cherche a simplifier la moyenne de temps.
void statisques(int *recording){
    int scroll=2, min_rec=0, sec_rec=0, trou;


    while(IsKeyUp(KEY_CTRL_MENU)){
        ML_clear_vram();

        if(IsKeyDown(KEY_CTRL_DOWN) && scroll>-74)  scroll--;
        if(IsKeyDown(KEY_CTRL_UP) && scroll<2)  scroll++;

        Txt_Text("Meilleur score", 0, scroll+10, TXT_7SEGMINI, TXT_OR);
        PrintMini(105, scroll+10, (const unsigned char *)":", 1);
        PrintMini(116, scroll+10, (const unsigned char *)":", 1);
        PrintVariable(101, scroll+10, (recording[0]/6000), 1);
        PrintVariable(108, scroll+10, (recording[0]/100)%60, 1);
        PrintVariable(119, scroll+10, recording[0]%100, 1);


        Txt_Text(".de jeu", 0, scroll+72, TXT_7SEGMINI, TXT_OR);
        PrintMini(105, scroll+72, (const unsigned char *)":", 1);
        PrintMini(116, scroll+72, (const unsigned char *)":", 1);
        PrintVariable(101, scroll+72, (recording[16]/3600), 1);
        PrintVariable(108, scroll+72, (recording[16]/100)%60, 1);
        PrintVariable(119, scroll+72, (recording[16]%100)%60, 1);

        Txt_Text(".de pause", 0, scroll+79, TXT_7SEGMINI, TXT_OR);
        PrintMini(105, scroll+79, (const unsigned char *)":", 1);
        PrintMini(116, scroll+79, (const unsigned char *)":", 1);
        PrintVariable(101, scroll+79, (recording[17]/3600), 1);
        PrintVariable(108, scroll+79, (recording[17]/100)%60, 1);
        PrintVariable(119, scroll+79, (recording[17]%100)%60, 1);

        Txt_Text(".moyen par partie", 0, scroll+86, TXT_7SEGMINI, TXT_OR);
        PrintMini(105, scroll+86, (const unsigned char *)":", 1);
        PrintMini(116, scroll+86, (const unsigned char *)":", 1);
        trou=(int)(recording[16]/recording[15]);
        PrintVariable(101, scroll+86, (int)(trou/100%60), 1);
        PrintVariable(108, scroll+86, (int)(trou%100%60), 1);
        PrintVariable(119, scroll+86, (int)(trou%100), 1);


        Txt_Text(".moyen par pause", 0, scroll+93, TXT_7SEGMINI, TXT_OR);
        PrintMini(105, scroll+93, (const unsigned char *)":", 1);
        PrintMini(116, scroll+93, (const unsigned char *)":", 1);
        trou=(int)(recording[17]/recording[19]);
        PrintVariable(101, scroll+93, (int)(trou/100%60), 1);
        PrintVariable(108, scroll+93, (int)(trou%100%60), 1);
        PrintVariable(119, scroll+93, (int)(trou%100), 1);

      
        ML_rectangle(0, 0, 128, 10, 0, 0, 0);
        ML_rectangle(32, 0, 106, 10, 1, 1, 0);       //ici on creer un cadre vide pour afficher statistiques
        Txt_Text("Statistiques", 34, 2, TXT_7SEG, TXT_OR);
        ML_display_vram();
    }
}

voila ici c'est la fonction pour afficher les stats de mon jeu.
Recording est un int et recording[0] contient le best score multiplié par 100, recording[15] est le nombre de parties jouees, recording[16] le temps de jeu multiplié par 100, recording[17] le temps de pause multiplié par 100, recording[19] le nombre de pauses.
En clair le prbm c'est que la moyenne ne s'affiche pas correctement mais je ne sais pas comment faire...
Voila si vous avez une idée merci de la poster
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir Hors ligne Administrateur Points: 21025 Défis: 143 Message

Citer : Posté le 11/11/2014 18:32 | #


Au fait, je viens de relire en entier le post principal, et QNAN signifie Quiet Not-A-Number : c'est une valeur dont t'as écopée en faisant un calcul illégal, et le Quiet signifie que si tu l'utilises dans un calcul, il renverra une autre valeur "standard" sans émettre d'exception. L'autre valeur est justement je pense un SNAN ou Signaling Not-A-Number, qui générera une exception si tu l'utilises.

Mais revenons-en au sujet :
trou = recording[16] / recording[15];

Autrement dit, trou = (tpsJeu/100)/nbParties ⇒ tpsJeu = trou*nbParties*100 ⇒ tpsJeu/nbParties = trou*100.
Je me trompe ?
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 11/11/2014 19:59 | #


Oui : trou=(tempsjeu*100)/nbparties
tempsjeu fois cent pour avoir les centiemes de secondes
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir Hors ligne Administrateur Points: 21025 Défis: 143 Message

Citer : Posté le 11/11/2014 22:26 | #


Darkysun a écrit :
Oui : trou=(tempsjeu*100)/nbparties

Ah, je pensais pas me faire avoir sur un truc aussi bête.
trou = (tpsJeu*100)/nbParties
⇒ tpsJeu = (trou*nbParties)/100
⇒ tpsJeu/nbParties = trou/100

Pourquoi modulo 60 ?
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 12/11/2014 17:04 | #


PrintVariable(101, scroll+72, (recording[16]/3600), 1);
        PrintVariable(108, scroll+72, (recording[16]/100)%60, 1);
        PrintVariable(119, scroll+72, (recording[16]%100)%60, 1);
Ici, le premier %60 est pour exclure les heures et le deuxieme les minutes
Sur les totaux il ny a aucun prbm cest juste les moyennes qui sont foiree
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir Hors ligne Administrateur Points: 21025 Défis: 143 Message

Citer : Posté le 12/11/2014 17:11 | #


Darkysun a écrit :
le premier %60 est pour exclure les heures et le deuxieme les minutes

Tu peux pas faire ça.
Le temps de jeu, il est en quelle unité ?
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 12/11/2014 19:35 | #


Euh le temps de jeu est en centieme de secondes : les deux derniers chiffres sont les cent de sec et apres de ne sont qur des sec
Mais je vois pas pq tu dis que je peu pas faire ca pasque le meilleur temps et le temps total de jeu et de pause marche (normalement )
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir Hors ligne Administrateur Points: 21025 Défis: 143 Message

Citer : Posté le 12/11/2014 19:46 | #


Appliquer un double modulo, ça n'a pas de sens.
Bon, eh bien si comme je l'ai dit :
tpsJeu(cs)/nbParties(⌀) = trou(s)/100(10^-2)
Le nombre d'heures est :
h = trou/100/3600 = trou/36000 (automatiquement tronqué)
Le nombre de minutes :
m = ((trou/100)%3600)/60
Et le nombre de secondes :
s = (trou/100)%60
Y'a pas de raison de mettre un double modulo.
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 12/11/2014 19:49 | #


Bah ca marche quand meme mais bon tu as raison je vais quand meme mettre ta solution
et sinon pour les moyenne tu as une solution ?
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir Hors ligne Administrateur Points: 21025 Défis: 143 Message

Citer : Posté le 12/11/2014 19:50 | #


Ben c'est ça la moyenne >_<
Puisque trou/100 = tpsJeu/nbParties, c'est le temps de jeu moyen par partie...
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 12/11/2014 19:51 | #


A oui jai confondu desole :boulet:

Ajouté le 01/02/2015 à 22:54 :
Hey donc si vous avez lu la rdp vous savez sans doute que jai repris la programmation de escape et ainsi je rencontre un nouveau problème bizarre : des fois le jeu se stoppe : cela arrive en particulier dans le menu au moment ou on entre (littéralement ) dans la partie JOUER... cela peut il venir de IsKeyDown ? Sachant que cela ne le faisais pas dans l'ancienne version mais que je nai pas du tout touche a cette partie la du code en tout cas ca se stoppe a une boucle : while(IsKeyDown(KEY_CTRL_DOWN)); Donc ca bouffe treeeeeeees vite les piles il faut appuyer sur reset tres vite pour les preserver au maximum... Avez vous une idee de ce qui peut causer ceci ?
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 03/02/2015 12:19 | #


IsKeyDown n'est pas compatible sh, peut être ça le problème
1, 2 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 40 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd