Voilà, donc je propose ma solution pour les améliorations du TP de m@t, j'ai tout inclu, ça marche
Ce post a double but : permettre d'offrir une solution à ceux qui n'en ont pas trouvé, et éventuellement qu'un bon programmeur me donne son avis sur mon code
main() { int nombreMystere; int nombreTape; int NombreDeCoups; int continuer; // variable pour savoir si on rejoue ou pas
continuer = 1; // boléen int VeuxTuContinuer; int mode; // mode = 1 >> un joueur ; mode = 2 >> 2 joueurs constlong MIN = 1; int MAX; int niveau;
NombreDeCoups = 0;
// Début du programme // Choix entre le mode 1 joueur ou 2 joueurs
printf("Mode un joueur ou 2 joueurs ? \n"); printf("Tape 1 pour mode un joueur. \n"); printf("Tape 2 pour mode 2 joueurs. \n");
scanf("%ld", &mode);
if( mode == 1){ printf("Choisissez le niveau de difficulte. \n"); printf("Tapez 1 pour un nombre entre 1 et 100. \n"); printf("Tapez 2 pour un nombre entre 1 et 1000. \n"); printf("Tapez 3 pour un nombre entre 1 et 10000. \n");
scanf("%ld", &niveau); if( niveau == 1){
MAX = 100; } elseif( niveau == 2){
MAX = 1000; } elseif( niveau == 3){
MAX = 10000; }
Explications : il vaut mieux commencer tes noms de vars par une minuscule.
Quant à MAX, c'est en majuscules si c une constante. Or ce n'est plus une constante à ce stade, donc nomme ça en minuscules stp !
Ca ne change rien au résultat de ton programme, mais c important de respecter des conventions de nommage !
Bonsoir,
Moi je voulais juste demandé quelque chose ...
Voilà j'ai travaillé sur le TP, fait les améliorations, etc. Aucun problèmes. Seulement une question, de professionalité ... Voici une partie de mon code source :
int okMenu = 1; do { long level; printf("Bienvenue dans le jeu 'Plus ou Moins'\nLe but est de trouver un nombre myst%cre ... Bonne chance !\n\n", 138); printf("=== Menu ===\n\n"); printf("Choisissez le niveau de jeu :\n"); printf("1. Niveau 1 (1 - 100)\n"); printf("2. Niveau 2 (1 - 1000)\n"); printf("3. Niveau 3 (1 - 10 000)\n\n"); printf("Choix ? ");
scanf("%ld", &level); printf("\n\n");
// On définit deux constantes qui seront les limites du nombre aléatoire à générer switch(level){ case1 :
numberMax = 100; break; case2 :
numberMax = 1000; break; case3 :
numberMax = 10000; break; default : printf("Erreur ! Veuillez recommencer ...\n\n");
okMenu = 0; } }while(!(okMenu));
constlong MIN = 1, MAX = numberMax;
Je me demandais si le fait de créer un constante ( MAX ) à partir d'une variable ( numberMax ) était correct ?
J'ai caché, au cas où certains ne veulent pas voir la solution.
Pour les system("CLS") que j'ai mis, je sais, c'est moche, mais pour le mode multi joueur, j'avais pas vraiment le choix... Ce serait bête que le deuxième joueur voit la réponse directement. Secret (cliquez pour afficher)
int main(int argc, char *argv[]) { /* Variables d'options de jeu */ int difficulte, mode; /* Variables nécessaires au jeu */ int nombre, essai, compteur; /* Variables autres */ int continuer = 1, abandon = 0; /* Valeur minimum et maximum du nombre caché */ int max; const MIN = 1;
srand(time(NULL));
/* Boucle pour rejouer */ while(continuer == 1) { /* Initialise les variables de jeu */
compteur = 0;
nombre = 0;
essai = 0;
/* Initialise la valeur max */
max = 0;
system("CLS");
/* Sélection du mode 1/2 joueur(s) */ printf("Quel mode souhaitez-vous?\n\n"); printf("\t1 - Mode un joueur\n\t2 - Mode deux joueurs\n\t---------------------\n\t0 - Quitter\n\n"); printf("Votre choix: ");
scanf("%ld", &mode);
system("CLS"); switch(mode) { /* Quitte le jeu */ case0: return0; /* Mode 2 joueurs */ case2: /* Indication de la valeur MAX */ printf("Veuillez indiquer la valeur MAX sachant que la valeur MIN est 1.\n (La valeur MAX doit etre strictement superieur a 1)\n\n"); do { printf("\tMAX = ");
scanf("%ld", &max); printf("\n"); if(max <= 1) printf("La valeur MAX doit etre strictement superieure a 1.\n\n"); }while(max <= 1);
system("CLS"); /* Indication du nombre caché */ printf("Veuillez maintenant indiquer le nombre cache.\n (Il doit etre compris entre 1 et %d)\n\n", max); do { printf("\tNombre cache = ");
scanf("%d", &nombre); printf("\n"); if(!(nombre >= 1 && nombre <= max)) printf("Le nombre cache doit etre compris entre 1 et %d.\n\n", max); }while(!(nombre >= 1 && nombre <= max));
system("CLS"); /* Affichage de la niveau de difficulté pour le joueur */ printf("Niveau de difficulte: Personnalise"); break; /* Mode 1 joueur */ case1: default: /* Indication du mode de difficulté */ printf("Quelle difficulte souhaitez-vous?\n\n"); printf("\t1 - Facile\n\t2 - Moyen\n\t3 - Difficile\n\t-------------\n\t0 - Quitter\n\n"); printf("Votre choix: ");
scanf("%ld", &difficulte);
system("CLS"); switch(difficulte) { case0: return0; case2:
max = 1000; printf("Niveau de difficulte: Moyen"); break; case3:
max = 10000; printf("Niveau de difficulte: Difficile"); break; case1: default:
max = 100; printf("Niveau de difficulte: Facile"); break; }
/* Sélection "aléatoire" du nombre caché */
nombre = (rand()% (max - MIN + 1)) + MIN; break; } /* Aide pour le joueur */ printf("\n\tNombre compris entre 1 et %d\n", max); printf("\tTappez 0 pour abandonner.\n\n"); while(essai != nombre) { printf("Quel est le nombre? ");
scanf("%ld", &essai); /* Option pour abandonner */ if(essai == 0) { printf("Etes-vous sur(e) de vouloir abandonner?\n\n"); printf("\t0 - Non\n\t1 - Oui\n\n"); printf("Votre choix: ");
scanf("%d", &abandon); printf("\n"); if(abandon == 1) { printf("La reponse etait: %d\n\n", nombre);
essai = nombre; } } else {
compteur++; if(essai < nombre) printf("C'est plus!\n"); elseif(essai > nombre) printf("C'est moins!\n"); else { if(compteur == 1) printf("\nBravo, vous avez trouve le nombre cache en %d coup!\n\n", compteur); else printf("\nBravo, vous avez trouve le nombre cache en %d coups!\n\n", compteur); } }
} /* Demande pour relancer le jeu */ printf("Voulez-vous continuer?\n"); printf("1 - Oui\t\t2 - Non\n\n"); printf("Votre choix: ");
scanf("%ld", &continuer); printf("\n"); } return0; }
Pour l'histoire de la constante variable. Non, c'est trop gore de faire ça. Pour les conventions de nommage qu'utilise m@t ce sont les conventions Java à la base, traditionnellement, en C on ne nomme pas comme ça mais bon...
Explications : il vaut mieux commencer tes noms de vars par une minuscule.
Quant à MAX, c'est en majuscules si c une constante. Or ce n'est plus une constante à ce stade, donc nomme ça en minuscules stp !
Ca ne change rien au résultat de ton programme, mais c important de respecter des conventions de nommage !
Salut à tous, moi j'ai une petite question. Voilà pour l'instant mon code qui marche. A noter que j'ai préféré faire une while car c'est à mon habitude :
int main(int argc, char *argv[]) { longconst MAX = 100, MIN = 1; long NombreMystere, VotreNombre; long NmbrCoups = 0;
srand(time(NULL));
NombreMystere = (rand() % (MAX - MIN + 1)) + MIN; printf("Quel est le nombre ? ");
scanf("%ld",&VotreNombre); while(VotreNombre != NombreMystere) {
NmbrCoups++; if(VotreNombre > NombreMystere) { printf("C'est moins !\n\n"); printf("Quel est le nombre ? ");
scanf("%ld",&VotreNombre); } elseif(VotreNombre < NombreMystere) { printf("C'est plus !\n\n"); printf("Quel est le nombre ? ");
scanf("%ld",&VotreNombre); } } printf("Bravo, le nombre mystere etait %ld et vous l'avez trouve en %ld coups\n",NombreMystere,NmbrCoups);
system("PAUSE"); return0; }
Donc voilà, mon code marche mais j'ai un petit soucis :
J'ai remplacé le system("PAUSE"); par un getchar(); pour que ce soit compatible à tous, mais il ne me prend pas en compte mon getchar(); et quitte le programme. Quel est le probléme ?
Le problème est (cette saloperie de) scanf qui laisse des caractères traîner dans l'entrée standard (c'est un flux qui amène dans l'ordre toutes les données tapées sur le clavier), ce qui fait que le getchar lit tout de suite quelque chose, et que le programme se finit immédiatement.
Un suggestion d'améiorations du code.
Pour définir MAX, à la place de ces if successif, faites:
MAX = 10 * 10 puissance niveau
Ce qui donnera 100 pour le niveau 1, 1000 pour le 2, 10000 pour le 3 et tu accède ainsi à une infinité de niveau
Pour l'histoire de la constante variable. Non, c'est trop gore de faire ça. Pour les conventions de nommage qu'utilise m@t ce sont les conventions Java à la base, traditionnellement, en C on ne nomme pas comme ça mais bon...
--> peux-tu développer plz ?
Quelles sont alors les "vraies" conventions de nommage pour le C ?
Bonjour,
vraiment pas mal le mode deux joueurs mais c'est embêtant comme système, il faudrait essayer de le faire en réseaux, voilà déjà le code du server ( qui peut-être amélioré ).
Voilà le code en secret pour ceux que ça n'interresse pas
printf("Entrez un nombre de 0 a 100 : ");
scanf("%d", &Nombre);
printf("Appuyer sur une touche pour lancer le serveur...\n");
getchar();
////////////////////////////////////////////////////////////
// Initialisation Winsock ...
if (recvbuf == "moins")
printf("Votre amis vient de ce planter, il a mis trop peu !\n");
if (recvbuf == "plus")
printf("Votre amis est toujours aussi mauvais, il est au dessus de la verite !\n");
if (recvbuf == "Fin")
{
printf("\nLe client vient de deconecter.");
Fin = true;
}
}
/////////////////////////////////////////////////////////////
Sa pourrait etre utile neartik, mais apprend a commenter, parce que la je croit que la plupart ne sauront pas l'utiliser. En clair : commente chaque variable ou fonction que tu utilise quand tu fais un truc que l'on a pas encore vu ici.
Nan mais lol, vous allez pas vous mettre aux sockets direct avec cet exemple là. Pas que ça soit super-trop-compliqué, juste que vous avez super-pas le niveau encore. Enfin pour ceux qui suivent le cours de M@téo en tout cas.
Oui, c'est bien possible que les cours de m@teo ne suffisent pas mais les sockets, quand on débute, consiste à se servir de msdn Par exemple ici, je ne me suis pas vraiment écarté du code exemple d'msdn
Tp des cours
× 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.
If you'd like to join us, read "How do we work at OpenClassrooms"! :)