Améliorer labyrinthe en C
parisestmagic63
Messages postés
1171
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
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 :
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 ;)
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:
- Améliorer labyrinthe en C
- Logiciel pour améliorer performance pc gratuit - Accueil - Utilitaires
- Améliorer qualité vidéo youtube - Guide
- Améliorer qualité audio mp3 en ligne - Forum Audio
- Améliorer performance pc - Guide
- Le labyrinthe de pan streaming - Forum Cinéma / Télé
2 réponses
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.
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.
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.
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.
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.
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.