Besoin d'avis et aide pour code
thybault
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
bonjour à tous voila je doit coder ceci Le jeu le bateau, le capitaine et son équipage
I Règle
Le bateau, le capitaine et son équipage
• de 2 joueurs à plus
• 5 dés
Le premier joueur lance les dés et doit obligatoirement faire sortir un 6, qui sera le bateau, puis un 5 qui sera le capitaine et enfin un 4 qui sera l'équipage.
S'il n'a pas de 6 il doit rejouer tous les dés. Il ne peut pas garder ni un capitaine sans bateau, ni un équipage sans bateau.
S'il a un 6 mais pas de 5, il ne pourra garder l'équipage (le 4).
Ces trois dés doivent arriver en un même jet ou à la suite mais dans l'ordre.
Au bout de trois lancers il devra donc avoir eu dans l'ordre un 6 bateau, un 5 capitaine et un 4 équipage. Les deux autres dés serviront alors à compter les points (ou les milles qu'auront fait bateau, capitaine et équipage). Après trois jets on passe
le bateau (indispensable au départ de la course)
le capitaine prêt à embarquer sur le bateau
l'équipage choisi par le capitaine pour monter sur le bateau
Le gagnant est bien sûr celui qui parcourt le plus de milles.
III possible sortie dans la console
Le bateau, le capitaine et son equipage
nombre de joueur ? 2
Appuyer sur une touche pour lancer les des...
joueur 1
5 4 4 5 3
2 2 1 2 1
4 3 3 1 1
joueur 2
2 6 2 3 4
6 6 2 2
3 6 6 4
Joueur 1 a fait 0 miles
Joueur 2 a fait 0 miles
On continue ? O/No
joueur 1 5 1 6 2 2
6 1 4 on a fait 7 miles
joueur 2
6 6 5 2 1
3 5 3
3 4 4 on a fait 7 miles
Joueur 1 a fait 7 miles
Joueur 2 a fait 7 miles
On continue ? O/N
j'ai commencé et voila ou j'arrive :
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *arg[])
{
int nombredejoueur = 0, joueur1, joueur2;
joueur1=1;
joueur2=2;
printf("Nombre de joueur ?\n");
scanf("%d", &nombredejoueur);
printf("joueur dans la partie %d \n\n",nombredejoueur);
printf("joueur %d lancez les des \n",joueur1 );
return 0;
}
j'ai aussi codé la lancement de dés et cela fonctionne bien.
je voudrais des conseils pour coder cette ligne : Joueur 1 appuyer sur une touche pour lancer les dés , et apres avoir appuyé cela lance la boucle que j'ai fait pour lancer les dés.
Merci de vos avis et aides !
I Règle
Le bateau, le capitaine et son équipage
• de 2 joueurs à plus
• 5 dés
Le premier joueur lance les dés et doit obligatoirement faire sortir un 6, qui sera le bateau, puis un 5 qui sera le capitaine et enfin un 4 qui sera l'équipage.
S'il n'a pas de 6 il doit rejouer tous les dés. Il ne peut pas garder ni un capitaine sans bateau, ni un équipage sans bateau.
S'il a un 6 mais pas de 5, il ne pourra garder l'équipage (le 4).
Ces trois dés doivent arriver en un même jet ou à la suite mais dans l'ordre.
Au bout de trois lancers il devra donc avoir eu dans l'ordre un 6 bateau, un 5 capitaine et un 4 équipage. Les deux autres dés serviront alors à compter les points (ou les milles qu'auront fait bateau, capitaine et équipage). Après trois jets on passe
le bateau (indispensable au départ de la course)
le capitaine prêt à embarquer sur le bateau
l'équipage choisi par le capitaine pour monter sur le bateau
Le gagnant est bien sûr celui qui parcourt le plus de milles.
III possible sortie dans la console
Le bateau, le capitaine et son equipage
nombre de joueur ? 2
Appuyer sur une touche pour lancer les des...
joueur 1
5 4 4 5 3
2 2 1 2 1
4 3 3 1 1
joueur 2
2 6 2 3 4
6 6 2 2
3 6 6 4
Joueur 1 a fait 0 miles
Joueur 2 a fait 0 miles
On continue ? O/No
joueur 1 5 1 6 2 2
6 1 4 on a fait 7 miles
joueur 2
6 6 5 2 1
3 5 3
3 4 4 on a fait 7 miles
Joueur 1 a fait 7 miles
Joueur 2 a fait 7 miles
On continue ? O/N
j'ai commencé et voila ou j'arrive :
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *arg[])
{
int nombredejoueur = 0, joueur1, joueur2;
joueur1=1;
joueur2=2;
printf("Nombre de joueur ?\n");
scanf("%d", &nombredejoueur);
printf("joueur dans la partie %d \n\n",nombredejoueur);
printf("joueur %d lancez les des \n",joueur1 );
return 0;
}
j'ai aussi codé la lancement de dés et cela fonctionne bien.
je voudrais des conseils pour coder cette ligne : Joueur 1 appuyer sur une touche pour lancer les dés , et apres avoir appuyé cela lance la boucle que j'ai fait pour lancer les dés.
Merci de vos avis et aides !
A voir également:
- Besoin d'avis et aide pour code
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
1 réponse
Salut thybault,
Tu ne peux pas en C standard stopper l'exécution du programme en attendant la pression d'une touche quelconque.
Par contre, tu peux demander à l'utilisateur de presser "Entrée" en utilisant la fonction standard getchar().
Un moyen de faire simple, en supposant que l'utilisateur soit bien discipliné et tape bien seulement un nombre entier positif, le scanf va récupérer l'entier attendu, et il restera dans le flux le retour à la ligne tapé par l'utilisateur.
Ainsi :
C'est, comme je l'ai dit, une solution simple fonctionnant dans un monde idéal où l'utilisateur est discipliné et comprend et fait ce qu'on lui dit de faire.
Sinon, il faudrait notamment : vérifier que la valeur de retour de scanf() comprend bien 1, si le flux stdin contient autre chose que le retour à la ligne avertir l'utilisateur que le reste sera ignoré ou quitter avec une erreur, vérifier que la saisie est non nulle et renvoyer une erreur si l'utilisateur a saisi 0 ou quitter, vider le flux stdin si on poursuit,...
Dal
Tu ne peux pas en C standard stopper l'exécution du programme en attendant la pression d'une touche quelconque.
Par contre, tu peux demander à l'utilisateur de presser "Entrée" en utilisant la fonction standard getchar().
Un moyen de faire simple, en supposant que l'utilisateur soit bien discipliné et tape bien seulement un nombre entier positif, le scanf va récupérer l'entier attendu, et il restera dans le flux le retour à la ligne tapé par l'utilisateur.
Ainsi :
- pour consommer ce retour il faut un premier
getchar()
, qui prendra le retour à la ligne déjà tapé à la suite du chiffre. A ce stade, stdin devrait être vide. - pour stopper l'exécution en attendant la pression de la touche "Entrée", il faudra alors un deuxième
getchar()
scanf("%d", &nombredejoueur); printf("Appuyer sur la touche Entrée pour lancer les dés...\n"); getchar(); /* on consomme le retour à la ligne */ getchar(); /* on attend la pression de Entrée */
C'est, comme je l'ai dit, une solution simple fonctionnant dans un monde idéal où l'utilisateur est discipliné et comprend et fait ce qu'on lui dit de faire.
Sinon, il faudrait notamment : vérifier que la valeur de retour de scanf() comprend bien 1, si le flux stdin contient autre chose que le retour à la ligne avertir l'utilisateur que le reste sera ignoré ou quitter avec une erreur, vérifier que la saisie est non nulle et renvoyer une erreur si l'utilisateur a saisi 0 ou quitter, vider le flux stdin si on poursuit,...
Dal
Merci de votre réponse bonne journée
Non, à chaque lancer tu lances 5 dés au plus, pas 6.
Selon l'énoncé, il peut y avoir 1, 2 ou 3 (mais pas plus) lancer(s) par joueur selon le résultat de chaque lancer. Par ailleurs, tu observeras qu'on ne lance pas non plus le même nombre de dés selon le résultat des lancers précédents, les dés donnant des résultats requis dans l'ordre requis n'étant pas lancés de nouveau.
Tu dois inclure toute cette logique dans ton programme en décomposant ton problème en sous problèmes plus simples.
Prend un papier et un crayon, et identifie les cas à traiter, et pour chaque cas, les opérations élémentaires à mettre en oeuvre, et ensuite construit ton programme.
Tu dois aussi mettre tout cela dans une boucle répétant ces opérations pour les n joueurs.
Voilà quelques pistes :
Pour simplifier ton code, il te faudra certainement créer des fonctions pour :
Tu mettrais l'appel à ces deux fonctions dans une boucle permettant au plus 3 lancers et stoppant si le stade où tu te trouves ne nécessite plus de lancers selon l'interprétation des résultats précédents
Après être sortit de cette boucle, tu calcules le score
Et tu mets tout cela dans une boucle répétant les opérations précédentes pour tous les autres joueurs.
Dal