Améliorer labyrinthe en C

Fermé
parisestmagic63 Messages postés 1171 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 6 avril 2021 - Modifié par parisestmagic63 le 27/04/2010 à 14:36
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 28 avril 2010 à 08:40
Bonjour,

il y a plusieurs mois j'ai crée un petit labyrinthe et je voudrais améliorer le code pour le rendre plus "pro" afin de le présenter à mon BTS.
Quelles fonctions et procédures je pourrais mettre pour remplacer ce code :


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

void main() { 
 int tab[11][11]={{2,1,1,1,2,1,1,1,1,2},{4,0,0,0,3,0,0,0,0,0,3},{2,1,2,0,2,1,1,0,1,2},{3,0,3,0,0,0,0,0,0,3},{3,0,2,1,2,1,2,0,2,2},{3,0,0,0,3,0,3,0,2,2},{3,0,3,0,0,0,0,0,0,3},{3,0,3,0,1,1,1,1,1,2},{3,0,3,0,0,0,0,0,0,8},{2,1,2,1,1,1,1,1,1,1,2}}; 
 int i; 
 int j; 
 int a; 
 system("color c1"); 

 for(i=0;i<10;i++){ 
  for(j=0;j<10;j++){ 
    
   if(tab[i][j]==0){ 
    printf (" "); 
   }else{ 
    if(tab[i][j]==1){ 
     printf("-"); 
    }else{ 
     if(tab[i][j]==2){ 
      printf("+"); 
     }else{ 
      if(tab[i][j]==3){ 
       printf("|"); 
      }else{ 
       if(tab[i][j]==4){ 
        printf("X"); 
       }else{  
        if(tab[i][j]==8){ 
         printf("Z"); 
        } 
       } 
      } 
     } 
    } 
   } 
  } 
  printf("\n"); 
 } 
 printf("\n\nd=droite\nq=gauche\nz=haut\nw=bas\n\n"); 


 while(tab[i][j+1]!=8) { 


  a=getch(); 
  system("cls"); 
  switch(a){ 
case 100: 
 for(i=0;i<10;i++){ 
  for(j=0;j<10;j++){ 
   if(tab[i][j]==4){ 
    if(tab[i][j+1]==0){ 
     tab[i][j]=0; 
     tab[i][j+1]=4; 
     
     for(i=0;i<10;i++){ 
      for(j=0;j<10;j++){ 
       if(tab[i][j]==0){ 
        printf (" "); 
       }else{ 
        if(tab[i][j]==1){ 
         printf("-"); 
        }else{ 
         if(tab[i][j]==2){ 
          printf("+"); 
         }else{ 
          if(tab[i][j]==3){ 
           printf("|"); 
          }else{ 
           if(tab[i][j]==4){ 
            printf("X"); 
           }else{  
            if(tab[i][j]==8){ 
             printf("Z"); 
             
               
            } 
           } 
          } 
         } 
        } 
       } 
      } 
      printf("\n"); 
     } 
     printf("\n\nd=droite\nq=gauche\nz=haut\nw=bas\n\n"); 
    } 
   } 
  } 
 } 
 break; 

case 113: 
 for(i=0;i<10;i++){ 
  for(j=0;j<10;j++){ 
   if(tab[i][j]==4){ 
    if(tab[i][j-1]==0){ 
     tab[i][j]=0; 
     tab[i][j-1]=4; 
     for(i=0;i<10;i++){ 
      for(j=0;j<10;j++){ 
       if(tab[i][j]==0){ 
        printf (" "); 
       }else{ 
        if(tab[i][j]==1){ 
         printf("-"); 
        }else{ 
         if(tab[i][j]==2){ 
          printf("+"); 
         }else{ 
          if(tab[i][j]==3){ 
           printf("|"); 
          }else{ 
           if(tab[i][j]==4){ 
            printf("X"); 
           }else{  
            if(tab[i][j]==8){ 
             printf("Z"); 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
      printf("\n"); 
     } 
    } 
   } 
  } 
 } 
 break; 

case 122: 
 for(i=0;i<10;i++){ 
  for(j=0;j<10;j++){ 
   if(tab[i][j]==4){ 
   if(tab[i-1][j]==0){ 
    tab[i][j]=0; 
    tab[i-1][j]=4; 
    for(i=0;i<10;i++){ 
     for(j=0;j<10;j++){ 
      if(tab[i][j]==0){ 
       printf (" "); 
      }else{ 
       if(tab[i][j]==1){ 
        printf("-"); 
       }else{ 
        if(tab[i][j]==2){ 
         printf("+"); 
        }else{ 
         if(tab[i][j]==3){ 
          printf("|"); 
         }else{ 
          if(tab[i][j]==4){ 
           printf("X"); 
          }else{  
           if(tab[i][j]==8){ 
            printf("Z"); 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
     printf("\n"); 
    } 
   } 
   } 
  } 
 } 


 break; 

case 119: 
 for(i=0;i<10;i++){ 
  for(j=0;j<10;j++){ 
   if(tab[i][j]==4){ 
    if(tab[i+1][j]==0){ 
     tab[i][j]=0; 
     tab[i+1][j]=4; 
      
     for(i=0;i<10;i++){ 
      for(j=0;j<10;j++){ 
       if(tab[i][j]==0){ 
        printf (" "); 
       }else{ 
        if(tab[i][j]==1){ 
         printf("-"); 
        }else{ 
         if(tab[i][j]==2){ 
          printf("+"); 
         }else{ 
          if(tab[i][j]==3){ 
           printf("|"); 
          }else{ 
           if(tab[i][j]==4){ 
            printf("X"); 
           }else{  
            if(tab[i][j]==8){ 
             printf("Z"); 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
      printf("\n"); 
     } 
    } 
   } 
  } 
 } 
 break; 
} 
} 

system("pause"); 
} 





La différence entre un portable et une femme?
Le portable on peut le mettre sur silencieux...

Je n'adhère pas a vos idées mais je me battrai pour que vous puissiez les exprimer ;)
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
28 avril 2010 à 07:46
Bonjour,

Pour le rendre plus pro, voici toutes mes remarques :

#include<conio.h>
Evite cette bibliothèque autant que possible. Elle ne fait pas partie du standard.

void main()
Le prototype de main sans argument est : int main(void)
Il renvoie de fait un 0 (return 0;) à la fin du programme pour signaler au programme appelant le bon déroulement du programme.

system("color c1"); et system("cls");
Le top aurait été d'utiliser une API plutôt que cette fonction. Par contre, c'est un poil plus compliqué. Si tu veux, je peux te donner le nom de cette API. De plus, lorsqu'on fait un programme spécifique à un OS (ici windows), il vaut mieux séparer les fonctions respectant la norme de celles qui sont spécifiques. En suite avec les directives préprocesseurs comme #ifdef _WIN32 tu pourras tester sur quel OS sera compilé ton programme. Cela facilitera grandement la vie du programmeur.

Tu peux également regrouper plusieurs de tes nombreux if else par des switch. C'est quand même beaucoup plus lisible. Et je te conseille également de mettre le tout dans des fonctions. Car là le code n'est pas agréable à lire. Le but n'est pas de tout mettre dans un main().

case 122:
Plutôt que mettre des 122 dont le code ascii n'est pas connu par tous, tu pourrais mettre 'z'. C'est plus lisible.

Et dernière remarque sur le code : ça manque de commentaire tout ça. Un code sans commentaire est inutile ;-))).

Voilà pour mes remarques sur le code.
Sur l'aspect des fonctionnalités de ton programme, tu pourrais mettre ton tableau dans un fichier, c'est-à-dire en faire la lecture depuis un fichier que tu laisserais le soin à l'utilisateur de construire.

Il doit y avoir d'autres choses à dire, mais pour l'instant je ne vois pas ;-))).

Si t'as des questions n'hésite pas.
1
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
28 avril 2010 à 08:25
Tout pareil que Fiddy.
a part conio, même si elle n'est pas standard, elle est bien utile lorsque l'on fait une application en mode console.
à ce moment là, je crois qu'il existe des fonctions dans conio pour remplacer tes system. ça serait un peu plus propre que de faire appel au shell.
Comme evolution du programme, tu pourrai faire un labyrinthe de taille variable, et éventuellement un générateur aléatoire de labyrinthe.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
28 avril 2010 à 08:40
@ Char Snipeur
Oui les fonctions de conio.h sont peut-être bien utiles. Ce que je reproche c'est de ne pas séparer le code portable du code spécifique à l'OS. En cas de maintenabilité d'un projet, c'est ainsi qu'il faut faire. Cela facilite énormément la vie aux programmeurs.

@ parisestmagic63 (pas si magique que ça d'ailleurs : 4-0 par grenoble :p)
Et je rajoute également qu'il vaut mieux utiliser _getch et non getch si tu souhaites utiliser cette fonction.
0
arthurik Messages postés 166 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 22 juin 2015 14
28 avril 2010 à 01:25
Salut Ce que je te conseille de faire c'est d'ajouter une difficulté de plus pour ton niveau, et je voudrai bien par exemple que ça soit tes niveaux :)
Ce que tu peux ajouter comme difficulté, c'est un nombre de coups limité, comme ça le joueur n'a pas la possibilté de se balader dans le champs.

Sinon j'ai beaucoup plus de conseille à te donner, mais c'est pas des fonctionnalités et des procedures, mais si tu veux je te les dis.

Exemple nombreux niveaux, avec un editeur de niveux dans ton programme.

J'espere que je t'ai interessé par ces idées et pour toute question n'hesite pas.

A bientôt.
0