Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mon projet

Projet DUT

    27 novembre 2006 à 20:59:40

    Salut à tous, voilà mon projet pour mon DUT : un jeux de boule! Il ya un tableau avec des boules de couleurs, quand on clique sur une boule, elle disparait et fait disparaitre les boules de la même couleur qui sont collées à elle, et les boules collées font disparaitre celles de la même couleur qui sont collées, etc ...

    Voici mon début de programme :


    #include <stdlib.h>
    #include <stdio.h>
    #include <graph.h>

    /*on crée un tableau de 15*10 ou sera afficher les 3 couleurs avec le même nombre de chance de tomber (33,3333333...% de chance)*/
    void tableau() {
      int L,H,tab[15][10];
      srand(time(NULL));
      for (H=0;H<10;H++) {
        for (L=0;L<15;L++) {
          tab[L][H]=rand()%3;
          if (tab[L][H]==0) {                     
            RemplirArcC(L*40+3,H*40+3,34,34,360,360,CouleurParNom("blue")); }
          if (tab[L][H]==1) {     
            RemplirArcC(L*40+3,H*40+3,34,34,360,360,CouleurParNom("blue")); }
          if (tab[L][H]==2) {
            RemplirArcC(L*40+3,H*40+3,34,34,360,360,CouleurParNom("blue")); }
          DessinerRectangleC(L*40,H*40,40,40,CouleurParNom("white")); /*on crée un cadrillage*/
    }
    }
      EcrireTexteC(10,420,"Score : ",CouleurParNom("white"),1);
    }

    /*on crée une fonction qui gère les cliques de la souris*/
    void cliquesouris() {
      int a,b,tab[15][10];
      while (1) {
      if (SourisCliquee()) {
        a=_X/40;/*coordonnées de la souris*/
        b=_Y/40;/*coordonnées de la souris*/
        RemplirArcC(a*40+3,b*40+3,34,34,360,360,CouleurParNom("black"));/*on remplie un cercle noir par decu les couleurs pour les cacher*/
        if (tab[a][b]==tab[a+1][b])/*on test la case de droite pour voir si la couleur est la même*/
          RemplirArcC(a*40+43,b*40+3,34,34,360,360,CouleurParNom("black"));
        if (tab[a][b]==tab[a][b+1])/*on test la case du dessus pour voir si la couleur est la même*/
          RemplirArcC(a*40+3,b*40+43,34,34,360,360,CouleurParNom("black"));
        if (tab[a][b]==tab[a-1][b])/*on test la case du dessous pour voir si la couleur est la même*/
          RemplirArcC(a*40-37,b*40+3,34,34,360,360,CouleurParNom("black"));
        if (tab[a][b]==tab[a][b-1])/*on test la case de gauche pour voir si la couleur est la même*/
          RemplirArcC(a*40+3,b*40-37,34,34,360,360,CouleurParNom("black"));
    }
    }
    }

    int main() {
      InitialiserGraphique();
      CreerFenetre(Maxx()/2-300,Maxy()/2-300,600,500);
      AfficherFenetre();
      EffacerEcran(CouleurParNom("black"));
      tableau();
      cliquesouris();
      Touche();
      FermerGraphique();
      return EXIT_SUCCESS;
    }
    /*Les fonction comme RemplirArcC sont définie dans graph.h*/
    /*Les coordonnées de la souris (_X,_Y) sont définie dans graph.h*/


    Je cherche à répéter la fonction cliquesouris, c'est à dire qu'après avoir tester les 4 cases au tour de la case ou clic la souris, il test les 4 cases au tour des couleur qui ont disparu pour voir si ce n'est pas encore la même couleur, etc ...

    Merci d'avance pour votre aide!
    • Partager sur Facebook
    • Partager sur Twitter
      27 novembre 2006 à 22:13:20

      Alors déjà, utilise la balise code, avec la coloration syntaxique ça sera plus lisible et on aura plus envie de t'aider. (et ça fait partie des règles !!! )

      Et de plus, dans ce cas, il sera inutile de mettre des balises de zCode <couleur> pour les commentaires.

      Pour répondre à ta question, ce que tu pourrais faire c'est utiliser la récursivité, exemple, si dans ta fonction cliquesouris dans un test qui s'avère positif, eh bien tu refait appel à cette fonction et tout ça s'enchaînera jusqu'à ce que tout les tests soient faux (c'est-à-dire plus aucune boule de même couleur dans les parages).

      Si tu veux un article là-dessus, voilà : http://franckh.developpez.com/tutoriels/c-ansi/recursivite/
      • Partager sur Facebook
      • Partager sur Twitter
        28 novembre 2006 à 16:41:04

        J'ai édité pour mettre les couleurs!
        Merci pour ta réponse, je vais voir ca!
        Si vous avez d'autres réponses ;)
        • Partager sur Facebook
        • Partager sur Twitter
          1 décembre 2006 à 12:33:00

          Mais je n'ais pas le droit aux fonctions récursives!
          • Partager sur Facebook
          • Partager sur Twitter
            1 décembre 2006 à 21:52:34

            Euh, alors dans ce cas, là j'ai pas vraiment d'idée concrète en tête, essaye de parcourir ton tableau d'une certaine manière en testant à chaque fois si la couleur est à effacé ou pas, enfin bon je sais c'est pas très clair ce que je dit mais je vois pas trop comment résoudre ce problème algorithmique. :-°

            Tout ce que je peux te conseiller, c'est de prendre une feuille, un crayon, de te mettre au calme sur un bureau et de réfléchir en faisant des schémas de ton tableau, et en trouvant comment accéder aux cases voulues pour effacer toutes les boules adjacentes de même couleur. ;)

            Sur ce, je te souhaite bonne chance et bon courage pour ton projet ! ;)
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              1 décembre 2006 à 22:45:15

              La fonction dont vous parlez (c'est la même qui permet d'implémenter l'outil "pot de peinture" dans un logiciel a la paint) se dérécursionne assez facilement.
              Ceci peut t'aider :
              SDL Tutorial 5
              Bonne prog' !
              • Partager sur Facebook
              • Partager sur Twitter
                3 décembre 2006 à 10:36:25

                Merci je vais m'en aider, je prends encore toutes autres réponses!
                • Partager sur Facebook
                • Partager sur Twitter
                  6 décembre 2006 à 17:44:22

                  Je peux en faite utiliser les fonctions récursives, mais je n'ais aps bien cmpris comment elles marchaient, même dans le lien donné!
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Mon projet

                  × 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