Partage
  • Partager sur Facebook
  • Partager sur Twitter

Plein de problème avec mon snake

2 problème et 1 question en fait ^^

Sujet résolu
Anonyme
    11 juin 2006 à 8:57:49

    Alors voilà, pour mes 2 problèmes, je ne comprend vraiment pas ce qui cloche.

    Alors voici le premier.

    long i = 0, j = 0, posX = 0, posY = 0, idObjet = 0;
         int objet;
         Ce bout de code bug, je ne sais pas pourquoi
         int bonusSurCarte = 0;
         
         for (i = 0 ; i < NB_CASES_LARGEUR ; i++)
         {
             for (j = 0 ; j < NB_CASES_HAUTEUR ; j++)
             {
                 if(carte[i][j] == BONUS)
                 {bonusSurCarte = 1;}
             }
         }
         
         
         do{//C'est cette boucle qui bug
             do{
                 idObjet = nombreAleatoire(20);
                 
                 if(idObjet >= 1 && idObjet <= 1)
                 {
                     objet = BONUS;
                 }
                 else if (idObjet >= 2 && idObjet <= 4)
                 {
                     objet = POMMEROUGE;
                 }
                 else
                 {
                     objet = POMMEVERTE;
                 }
             }while(objet == BONUS && bonusActuel != AUCUN);//Si un bonus est déja activé, on choisi autre chose
         }while(bonusSurCarte);


    Voilà c'est la deuxième boucle qui bug. Le programme ne réagit plus du tout, et on me dit qu'il de répond plus.
    Mais il marche parfaitement bien si j'enlève juste cette boucle.
    Au début j'avait fait une seul boucle avec les 2
    }while((objet == BONUS && bonusActuel != AUCUN) || (bonusSurCarte == 1));

    Pareil avec ou sans parenthèses.

    Voilà maintenant mon deuxième problème vraiment incompréhensible.

    long idBonus = 0, i = 0;
         
         idBonus = nombreAleatoire(10);
         idBonus = 7;//Pour tenter de reparer mon bug
         
         [...]
         
         else if(idBonus >= 4 && idBonus <= 5)
         {
             *bonusActuel = CINQCENTPOINTS;
             *score += 500;
         }
         else if(idBonus >= 6 && idBonus <= 7)
         {
             *bonusActuel = INVERSIONTOUCHES; //C'est cette ligne qui bug
             *touchesInversees = 1;
         }
         else if(


    Alors pourqui ça bug, c'est obligationrement cette ligne qui bug (j'ai fait plein de test.
    Pourtant toute celle d'avant et d'après marche mais pas celle là et avec n'importe quelle valeur. SI je met "bonusActuel = 25" ça plante aussi.
    En utilisan le debugger on me donne cette erreur
    Une violation d'accès (erreur de segmentation) est apparue dans votre programme.


    Voilà alors pour les plus confirmé pouriez vous me dire ce que ça signifie ?

    Et pour ma question, y-t-il une fonctionqui permet d'éffacer un caractère ou une ligne dans une fichier ?

    Voilà et venez moi aide car ces bug m'énerve vraiment.
    • Partager sur Facebook
    • Partager sur Twitter
      11 juin 2006 à 11:54:47

      Citation : Nigloo le grand

      Alors voilà, pour mes 2 problèmes, je ne comprend vraiment pas ce qui cloche.

      Alors voici le premier.


           do{//C'est cette boucle qui bug
               do{
                   idObjet = nombreAleatoire(20);
                   
                   if(idObjet >= 1 && idObjet <= 1)
                   {
                       objet = BONUS;
                   }
                   else if (idObjet >= 2 && idObjet <= 4)
                   {
                       objet = POMMEROUGE;
                   }
                   else
                   {
                       objet = POMMEVERTE;
                   }
               }while(objet == BONUS && bonusActuel != AUCUN);//Si un bonus est déja activé, on choisi autre chose
           }while(bonusSurCarte);



      Problème récurrent. Je suis prêt à parier que le srand() est mal placé. Il doit être appelé une seule fois au début de l'appplication. On se tue à le répéter, mais le message a du mal à passer visiblement...

      Citation : Pas de titre


      Voilà maintenant mon deuxième problème vraiment incompréhensible.


           else if(idBonus >= 4 && idBonus <= 5)
           {
               *bonusActuel = CINQCENTPOINTS;
               *score += 500;
           }
           else if(idBonus >= 6 && idBonus <= 7)
           {
               *bonusActuel = INVERSIONTOUCHES; //C'est cette ligne qui bug
               *touchesInversees = 1;
           }


      Alors pourqui ça bug, c'est obligationrement cette ligne qui bug (j'ai fait plein de test.
      Pourtant toute celle d'avant et d'après marche mais pas celle là et avec n'importe quelle valeur. SI je met "bonusActuel = 25" ça plante aussi.
      En utilisan le debugger on me donne cette erreur

      Une violation d'accès (erreur de segmentation) est apparue dans votre programme.



      Tu utilises un tas de pointeurs, mais on ne sait pas comment ils ont été initialisé... On ne peut rien dire sans avoir un code complet et compilable...

      La conséquence d'un bug n'est pas la cause de celui-ci...
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
      Anonyme
        11 juin 2006 à 16:22:30

        Le deuxième problème est résolu. (c'est une variable constante qui voulait se modifier, mais c'est bon j'ai enlever le const)

        Pour le srand je doit l'appeler avant chaque génération de nombre ou une seul fois dans le programme ?
        • Partager sur Facebook
        • Partager sur Twitter
          11 juin 2006 à 16:26:39

          Citation : Nigloo le grand

          Pour le srand je doit l'appeler avant chaque génération de nombre ou une seul fois dans le programme ?


          Avant la génération des nombres et une seule fois dans le programme.
          • Partager sur Facebook
          • Partager sur Twitter
            11 juin 2006 à 16:28:16

            une seule fois au début du programme :)
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              11 juin 2006 à 16:35:03

              Ha ok, moi je l'appelez avant chaque génération de nombre.
              Et bien merci beaucoup pour votre aide.
              [EDIT] : Même en inicialisant qu'au début ça bug toujours, donc c'est pas ça.

              Et aussi pour effacer un carartère dans un fichier vous avez pas ?

              J'ai essayer 2 code mais sans succès
              fputc('\r', fichier);
              //Il me fait des petit carré dans mon fichier a la place de ce qu'il faut effacer
              //Et
              fputc('^?', fichier);
              //La il me dise que c'est 2 caractère alors que ça devrait en être un seul
              • Partager sur Facebook
              • Partager sur Twitter
                11 juin 2006 à 17:58:32

                Citation : Nigloo le grand

                Ha ok, moi je l'appelez avant chaque génération de nombre.
                Et bien merci beaucoup pour votre aide.
                [EDIT] : Même en inicialisant qu'au début ça bug toujours, donc c'est pas ça.


                Disons que c'est ce n'est pas que ça... Donne le code en entier. On ne sait pas ce qui manque, on ne sait pas le tester...

                Citation : Pas de titre


                Et aussi pour effacer un carartère dans un fichier vous avez pas ?


                Pas possible. Que veux-tu faire exactement ?

                • Partager sur Facebook
                • Partager sur Twitter
                Music only !
                Anonyme
                  14 juin 2006 à 22:25:51

                  Dans mon jeu, le nombre de niveaux n'est pas fixé (il y en a 10 par defaut), j'ai fait une fonction pour inseréer un niveaux vierge (qui marche) et une pour efface un niveaux, et donc je voudrai pourvoir effacer les caractére et non les remplacer par autre chose.

                  Je sais que tu es expérimenter alors stp te fous pas de moi si tu vois des erreur énorme dans mon code.
                  Je ne met que jeu.c (qui est déjà très long)

                  //Il y avait ici mon code


                  [EDIT] : J'ai résolu le second prob, en fait si on regarde bien, s'il y a déjà un bonus sur la carte, cela faisait une boucle infinit.

                  //Code qui marche
                  long i = 0, j = 0, posX = 0, posY = 0, idObjet = 0;
                       int objet;
                       int bonusSurCarte = 0;
                       
                       for (i = 0 ; i < NB_CASES_LARGEUR ; i++)
                       {
                           for (j = 0 ; j < NB_CASES_HAUTEUR ; j++)
                           {
                               if(carte[i][j] == BONUS)
                               {bonusSurCarte = 1;}
                           }
                       }
                       
                       do{
                           idObjet = nombreAleatoire(20);
                               
                           if(idObjet >= 1 && idObjet <= 1)
                           {
                               objet = BONUS;
                           }
                           else if (idObjet >= 2 && idObjet <= 3)
                           {
                               objet = POMMEROUGE;
                           }
                           else
                           {
                               objet = POMMEVERTE;
                           }
                       }while(objet == BONUS && (bonusActuel != AUCUN || bonusSurCarte == 1));
                       //Si un bonus est déja activé ou qu'il y en a déjà un sur la carte, on choisi autre chose


                  Alors j'en suis a faire ma fonction effacerNiveau pour l'éditeur.
                  J'ai trouvé une solution mais le prob c'est qui faudra pas mal de mémoire vive (le poig de carte.lvl en fait)
                  Alors je fais ma solution ou je ne code pas ma fonction ?
                  Répondez moi svp

                  Ps : je mettrai ce sujet en problème résolu après vos réponces.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    17 juin 2006 à 20:30:25

                    Svp répondez :'(
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      18 juin 2006 à 23:40:07

                      Merci les gars (ironie) :colere2:
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Plein de problème avec mon snake

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown