Besoin d'avis et aide pour code

Fermé
thybault Messages postés 2 Date d'inscription mercredi 17 janvier 2018 Statut Membre Dernière intervention 18 janvier 2018 - 17 janv. 2018 à 15:19
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 18 janv. 2018 à 13:55
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 !
A voir également:

1 réponse

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié le 17 janv. 2018 à 15:59
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 :
  • 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
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
17 janv. 2018 à 16:06
note aussi qu'il ne me parait pas logique de déclarer en dur des variables représentant les joueurs comme tu le fais en faisant
int joueur1, joueur2;
puisque tu ne sais pas à l'avance combien de joueurs l'utilisateur voudra indiquer (outre que je vois pas ce que tu vas en faire, ni pourquoi ces variables seraient nécessaires à l'exécution du programme demandé)
0
thybault Messages postés 2 Date d'inscription mercredi 17 janvier 2018 Statut Membre Dernière intervention 18 janvier 2018
18 janv. 2018 à 06:28
Très bien merci je vais tester ça ! Autre question par rapport à ma boucle pour les dés, donc elle lance 6 dès, j’aimer Qu’elle le fasse donc trois fois d'affilé , il faut donc que je réutilise une boucle mais je ne n’arrive pas à savoir laquelle exactement car à l’écrit Cela semble simple mais je m’embarque Dans des choses trop complexes...
Merci de votre réponse bonne journée
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié le 18 janv. 2018 à 14:01
ma boucle pour les dés, donc elle lance 6 dès, j’aimer Qu’elle le fasse donc trois fois d'affilé

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 :
  • faire un lancer de n dés (selon le stade où tu te trouves)
  • interpréter les résultats (pour mettre à jour le stade où tu te trouves)

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
0