IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

revenir sur une boucle sur homebrew psp


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut revenir sur une boucle sur homebrew psp
    salut a tous je suis entrain de coder un homebrew pour psp en c et j'ai un probleme j'aimerai qu'a l'appui d'une touche mon code pointe sur le menu donc en faite faire un retour au debut du code mais je ne c'est pas comment faire :/
    voila mon code , merci de votre aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    #include <stdio.h>
    #include <stdlib.h>
    #include <libge/libge.h>
     
    PSP_MODULE_INFO("Menu", 0, 0, 0);
    PSP_HEAP_SIZE_KB(512);
     
     
    int main(int argc, char *argv[])
    {
     
     
        geInit();
     
        ge_Image* back = geLoadImage("fond.png");
        ge_Image* curs1 = geLoadImage("fleche_g.png");
        ge_Image* curs2 = geLoadImage("fleche_d.png");
    	ge_Image* sex = geLoadImage("sex.png");
    	ge_Image* laf = geLoadImage("laf.png");
        ge_Image* you = geLoadImage("you.png");
     
     
     
        int selecteur = 1, maxselecteur = 3;
        ge_Keys *pad = geCreateKeys(), *oldpad = geCreateKeys();
     
     
       while (1)
        {
            geClearScreen();
            geReadKeys(pad);
            geDrawImage(0, 0, back);
     
            if(pad->pressed[GEK_DOWN] && !oldpad->pressed[GEK_DOWN])
            {
                selecteur++;
            }
            if(pad->pressed[GEK_UP] && !oldpad->pressed[GEK_UP])
            {
                selecteur--;
            }
            if (selecteur > maxselecteur)
            {
               selecteur = 1;
            }
            else if (selecteur < 1)
            {
               selecteur = maxselecteur;
            }
     
            if (selecteur == 1)
            {
               geDrawImage(150, 145, curs1);
               geDrawImage(270, 145, curs2);
            }
            if (selecteur == 2)
            {
               geDrawImage(120, 180, curs1);
               geDrawImage(315, 180, curs2);
            }
            if (selecteur == 3)
            {
               geDrawImage(140, 230, curs1);
               geDrawImage(285, 230, curs2);
     
            }  
     
     
            if(pad->pressed[GEK_CROSS] && !oldpad->pressed[GEK_CROSS] && selecteur == 1){
     
     
            while (2)
        {
     
            geClearScreen();
            geDrawImage(0,0, laf);
    		if(pad->pressed[GEK_CROSS] && !oldpad->pressed[GEK_CROSS]){
     
     
     
    c'est ici que je veut revenir au debut du code ( a l'appuie du boutton rond) 
    		}
            geSwapBuffers();
        }
     
            }
            if(pad->pressed[GEK_CROSS] && !oldpad->pressed[GEK_CROSS] && selecteur == 2){
     
            while (3)
        {
     
            geClearScreen();
            geDrawImage(0,0, sex);
    		if(pad->pressed[GEK_CIRCLE] && !oldpad->pressed[GEK_CIRCLE]){
     
    		}
            geSwapBuffers();
        }
     
     
            }
            if(pad->pressed[GEK_CROSS] && !oldpad->pressed[GEK_CROSS] && selecteur == 3){
     
            while (4)
        {
     
            geClearScreen();
            geDrawImage(0,0, you);
    		if(pad->pressed[GEK_CIRCLE] && !oldpad->pressed[GEK_CIRCLE]){
     
    		}
            geSwapBuffers();
        }
     
     
            }
     
                 geFreeImage(laf);
    			 geFreeImage(sex);
    			 geFreeImage(you);
            geReadKeys(oldpad);
            geSwapBuffers();
        }
     
        sceKernelExitGame();
        return 0;
     
    }

  2. #2
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Salut,

    intéressant les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while(1) {
      ...
      while (2) {
        ...
        while (3) {
          ...
        }
        ...
      }
      ...
    }
    while (un nombre différent de 0) est une boucle inifinie, pour en sortir tu peux utiliser l'instruction break :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (1) {
      while (2) {
        if (un événement) break; +
      }                          |
                                /
      // ici après le break *<-´
    }
    si un événement est vrai, tu sortiras du bloc de while(2) pour reprendre juste après dans le bloc du while(1).

    Original comme style de programmation, mais je dirais que l'on doit pouvoir faire plus propre avec une vraie conditionnelle dans le while ...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    salut , j'ai essayé de mettre break dans le if (appuie bouton ) mais ca ne marche pas ... tu pense qu'il faut que j'enleve les while (1) while(2) ?

  4. #4
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Citation Envoyé par tanguynoub Voir le message
    salut , j'ai essayé de mettre break dans le if (appuie bouton ) mais ca ne marche pas ... tu pense qu'il faut que j'enleve les while (1) while(2) ?
    ça ne marche pas ... c'est vague.

    Tu n'as pas d'exemples livrés avec ta bibliothèque ? Bidouiller pour que ça tombe en marche n'est jamais une bonne chose ...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    quand je dit que sa marche pas je veu dire que sa fait beuger mon programme , je ne peut plus rien faire
    et j'ai trouver ce code d'exemple http://dridri85.free.fr/index.php?op...mple&Itemid=36
    mais j'ai pas trouver mon bohneur peut-etre qe tu le trouvera ^^
    merci de m'aidé c'est cool de ta part

  6. #6
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    C'est la première fois que tu programmes en C ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    je codai pas mal avant mais j'ai oublié et puis cet lib est bizarre ^^ pourquoi ?

  8. #8
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Non, le style while(1) while (2) ..., et puis pour adapter ma réponse :

    une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while (2) {
      clearScrean
      draw
      swap
      if (condition) break ;
    }
    peut toujours se réécrire en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    do {
      clearScreen
      draw
      swap
    } while (!condition)
    J'ai regroupé le swapbuffer et les autres instructions .... ça risque de chauffer dans ta boucle ...

    ça beugue est toujours aussi vague :

    * si ça ne fait pas ce que tu as en tête (sans erreur de compilation, ou d'exécution) , c'est que la manière dont tu as organisé ton code est mauvaise.

    * si tu as des messages d'erreurs, il y a en plus une mauvaise utilisation

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Alors je t'explique j'ai modifier comme tu m'a dit a la lettre :

    -pas d'erreur dans la compilation
    -je le transfère sur la psp
    - depuis le menu (while(1)) je vais sur la photo que j'ai modifier (while(2)) .

    Jusque la tout marche bien mais après quand j'appuie sur la touche rond (qui est programmé avec le break )mais sa ne reviens pas au menu sa reste sur la photo voila donc soit le break ne marche pas soit il ne revient pas au while(1) qui est mon menu d’accueil

  10. #10
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Compliqué de cross compiler ...
    À défaut de mettre des printf, affiche des images différentes pour voir quelle portion de code il emprunte.
    Par curiosité ... tu n'as pas de debugger à disposition, ou un émulateur pour faire des tests ?

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    non pas d'emulateur ni de debugger (je cherche emulateur ) as tu team viewver pour pour pouvoir parler et que tu puisse contrôler ?

  12. #12
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Non, et de plus je ne fais jamais ça, jamais de remote.
    Par countre tu peux essayer le chat de dvp (accès tout en haut dans le menu de la page dvp). Je ne sais pas qui y traine à cette heure-ci mais il y a aura peut être qqun pour t'orienter.

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 041
    Points
    33 041
    Billets dans le blog
    4
    Par défaut
    Un break ne sert qu'à sortir de la dernière boucle, à revenir à la boucle supérieure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while(1) {
     while (2) {
      while (3) {
       break; // on retourne dans while (2)
      }
     }
    }
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int while1 = 1, while2 = 1, while3 = 1;
    while (while1) {
     while (while2) {
      while (while3) {
       if (je veux retourner dans while1) {
        while2 = 0;
        break;
       }
      }
     }
    }
    Sinon, il y a goto, mais attention à son utilisation.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    salut, alors j'ai fait comme tu a dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    #include <stdio.h>
    #include <stdlib.h>
    #include <libge/libge.h>
     
    PSP_MODULE_INFO("Menu_Titotuto", 0, 0, 0);
    PSP_HEAP_SIZE_KB(512);
     
     
    int main(int argc, char *argv[])
    {
     
     
        geInit();
     
        ge_Image* back = geLoadImage("fond.png");
        ge_Image* curs1 = geLoadImage("fleche_g.png");
        ge_Image* curs2 = geLoadImage("fleche_d.png");
        ge_Image* sex = geLoadImage("sex.png");
        ge_Image* laf = geLoadImage("laf.png");
        ge_Image* you = geLoadImage("you.png");
     
     
     
        int selecteur = 1, maxselecteur = 3;
        ge_Keys *pad = geCreateKeys(), *oldpad = geCreateKeys();
        int while1 = 1, while2 = 1, while3 = 1;
        while (while1)
        {
            geClearScreen();
            geReadKeys(pad);
            geDrawImage(0, 0, back);
     
            if(pad->pressed[GEK_DOWN] && !oldpad->pressed[GEK_DOWN])
            {
                selecteur++;
            }
            if(pad->pressed[GEK_UP] && !oldpad->pressed[GEK_UP])
            {
                selecteur--;
            }
            if (selecteur > maxselecteur)
            {
                selecteur = 1;
            }
            else if (selecteur < 1)
            {
                selecteur = maxselecteur;
            }
     
            if (selecteur == 1)
            {
                geDrawImage(150, 145, curs1);
                geDrawImage(270, 145, curs2);
            }
            if (selecteur == 2)
            {
                geDrawImage(120, 180, curs1);
                geDrawImage(315, 180, curs2);
            }
            if (selecteur == 3)
            {
                geDrawImage(140, 230, curs1);
                geDrawImage(285, 230, curs2);
     
            }
     
     
     
     
     
     
     
                  if(pad->pressed[GEK_CROSS] && !oldpad->pressed[GEK_CROSS] && selecteur == 1){
     
        while(while2){
            geClearScreen();
            geDrawImage(0, 0, laf);
            geSwapBuffers();
     
    		while(while3){
    		if(pad->pressed[GEK_SQUARE] && !oldpad->pressed[GEK_SQUARE]){
                while2 = 0;
        break;
        }
    	}
     
            }
     
     
        }
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
            if(pad->pressed[GEK_CROSS] && !oldpad->pressed[GEK_CROSS] && selecteur == 2){
     
     
     
                    geClearScreen();
                    geDrawImage(0,0, sex);
     
     
     
     
     
     
                    if(pad->pressed[GEK_CIRCLE] && !oldpad->pressed[GEK_CIRCLE]) {
     
     
     
    				continue;
    				}
     
     
                    geSwapBuffers();
     
                    }
     
     
     
     
     
     
            if(pad->pressed[GEK_CROSS] && !oldpad->pressed[GEK_CROSS] && selecteur == 3){
     
                while (4)
                {
     
                    geClearScreen();
                    geDrawImage(0,0, you);
                    if(pad->pressed[GEK_CIRCLE] && !oldpad->pressed[GEK_CIRCLE]){
     
                    }
                    geSwapBuffers();
                }
     
     
            }
     
            geFreeImage(laf);
            geFreeImage(sex);
            geFreeImage(you);
    		 geReadKeys(oldpad);
            geSwapBuffers();
     
        }
     
     
        sceKernelExitGame();
        return 0;
     
    }
    mais je reste sur la photo , dès que j'appuie sur rond sa ne revient pas au menu :/

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 041
    Points
    33 041
    Billets dans le blog
    4
    Par défaut
    Pourrais-tu indenter correctement le code afin qu'il soit lisible ?
    La méthode indiquée est correcte pour sortir d'une boucle imbriquée, si le résultat attendue n'est pas le bon, ton problème réel est ailleurs.

    Notamment quand je vois ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while(while3){
    		if(pad->pressed[GEK_SQUARE] && !oldpad->pressed[GEK_SQUARE]){
                while2 = 0;
        break;
        }
    	}
    Soit une boucle infinie au beau milieu de nulle part.

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 46
    Points : 33
    Points
    33
    Par défaut
    Je remonte le topic, je ne sais pas si ça a été résolu mais je vois d'où vient le bug.
    Il te manque la lecture des touches (geReadKeys) dans tes autres boucles, du coup tu cherches à sortir à l'appuie de O mais le programme ne peut pas savoir s'il est pressé puisqu'il n'a pas lu les états des touches.

Discussions similaires

  1. [2008R2] SQLCMD faire une boucle sur une query
    Par janlouk dans le forum Développement
    Réponses: 2
    Dernier message: 25/06/2015, 14h10
  2. Écrire le résultat d'une boucle sur une ligne
    Par Erlen dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 03/05/2012, 15h18
  3. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  4. une colle sur une boucle
    Par blastfr dans le forum SAS Base
    Réponses: 6
    Dernier message: 27/04/2010, 15h19
  5. Réponses: 3
    Dernier message: 16/02/2007, 12h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo