Besoin d'aide exo en C
unmec13
-
unmec13 -
unmec13 -
Bonjour,
Je viens vous demander un peu d'aide pour un exo en C que j'ai à réaliser voici le sujet :
Le jeu de l'Oie
Vous écrivez un programme qui déplace un pion sur un jeu de l'oie de 63 cases en fonction des valeurs de 2 dés fournis par l'utilisateur et en appliquant les règles suivantes :
Si le joueur jette du premier coup 6 et 3, il se place case 26.
Si le joueur fait un double, il avance du double de la valeur des dès.
Si le joueur arrive sur le pont(case 6), il se déplace case 12.
Si le joueur arrive case 42, il retourne case 30.
Si le joueur arrive case 58, retour au début.
Si le joueur dépasse l'arrivée (case 64), il recule d'autant de points qu'il a jetés en trop.
Le programme s'arrête quand l'utilisateur a gagné (lorsque le pion s'arrête case 64) ou bien si le pion arrive case 31.
voici un exemple d'exécution du programme ( ce qui est affiché à l'écran par le programme est écrit en gras, le reste est tapé par l'utilisateur) :
vous êtes à la position 0. Donnez la valeur des dés :
6
3
vous êtes à la position 26. Donnez la valeur des dés :
3
4
vous êtes à la position 33. Donnez la valeur des dés :
6
6
vous êtes à la position 57. Donnez la valeur des dés :
4
6
vous êtes à la position 61. Donnez la valeur des dés :
1
2
VOUS AVEZ GAGNE.
Voici ma production pour le moment :
Ca marche pas si vous pouviez me dire ce qu'il va pas...:-(
Je viens vous demander un peu d'aide pour un exo en C que j'ai à réaliser voici le sujet :
Le jeu de l'Oie
Vous écrivez un programme qui déplace un pion sur un jeu de l'oie de 63 cases en fonction des valeurs de 2 dés fournis par l'utilisateur et en appliquant les règles suivantes :
Si le joueur jette du premier coup 6 et 3, il se place case 26.
Si le joueur fait un double, il avance du double de la valeur des dès.
Si le joueur arrive sur le pont(case 6), il se déplace case 12.
Si le joueur arrive case 42, il retourne case 30.
Si le joueur arrive case 58, retour au début.
Si le joueur dépasse l'arrivée (case 64), il recule d'autant de points qu'il a jetés en trop.
Le programme s'arrête quand l'utilisateur a gagné (lorsque le pion s'arrête case 64) ou bien si le pion arrive case 31.
voici un exemple d'exécution du programme ( ce qui est affiché à l'écran par le programme est écrit en gras, le reste est tapé par l'utilisateur) :
vous êtes à la position 0. Donnez la valeur des dés :
6
3
vous êtes à la position 26. Donnez la valeur des dés :
3
4
vous êtes à la position 33. Donnez la valeur des dés :
6
6
vous êtes à la position 57. Donnez la valeur des dés :
4
6
vous êtes à la position 61. Donnez la valeur des dés :
1
2
VOUS AVEZ GAGNE.
Voici ma production pour le moment :
#include <stdio.h> int main() { int a,b,c; c=0; a=1; b=1; scanf("%d",&c); scanf("%d",&a); scanf("%d",&b); while(a>0 && b>0 && a<=6 && b<=6 && c<64 && c!=31){ if(a==6 && b==3 && c==0){ c=c+26; } else if(a==b){ c=c+(2*(a+b)); } else if(c==6){ c==12; } else if(c==42){ c==30; } else if(c==58){ c==0; } else if(c==63){ c=c-(a+b-2); } else{c=c+(a+b); } scanf("%d",&a); scanf("%d",&b); printf("vous etes a la position %d",c); printf("Donnez la valeur des des %d:",a,b); } printf("VOUS AVEZ GAGNE."); return; }
Ca marche pas si vous pouviez me dire ce qu'il va pas...:-(
A voir également:
- Besoin d'aide exo en C
- Comment ouvrir un fichier exo? - Forum Programmation
- Exo de reflexion - Forum Algorithmes / Méthodes
- EXE Explorer - Télécharger - Divers Utilitaires
- Exo pix - Forum Excel
- Blocage sur un exo ✓ - Forum Programmation
3 réponses
Bonjour on m'a aidé à amélioré le programme et il me manque que le cas ou avec les dés on est supérieur à 64
et si le dé tombe sur 31 et le programme s'arrête quelqu'un ???
et si le dé tombe sur 31 et le programme s'arrête quelqu'un ???
#include <stdio.h> #include <stdlib.h> int main() { int a = 1,b = 1,c = 0; while(a>0 && b>0 && a<=6 && b<=6 && c<64 && c!=31) { printf("Vous etes a la position %d\n",c); printf("Donnez la valeur des des :\n"); scanf("%d",&a); scanf("%d",&b); if(!(a > 0 && a < 7) || !(b > 0 && b < 7)) { a = 1; b = 1; continue; } if((a==6 && b==3 && c==0) || (a == 3 && b==6 && !c)) { c = 26; } else if(a == b) { c = c+(2*(a+b)); } else if(c == 6) { c = 12; } else if(c == 42) { c = 30; } else if(c == 58) { c = 0; } else { c = c+(a+b); } } printf("VOUS AVEZ GAGNE."); system("pause"); return 0; }
Quand tu dépasses 64, tu dois rebrousser chemin.
Formellement tu retires de 64 ce qui dépasse : c=64-(c-64) ou c=128-c
Pour ta case 31, un break, ou un exit devrait faire l'affaire.
Formellement tu retires de 64 ce qui dépasse : c=64-(c-64) ou c=128-c
Pour ta case 31, un break, ou un exit devrait faire l'affaire.
Slt à toi pour ce qui est du c=64-...je le place où hors du WHILE ou à l'interieur ?
Et pour la case 31 il doit y avoir un autre moyen car break et exit
je ne les ai pas encore vu en cours donc
Et pour la case 31 il doit y avoir un autre moyen car break et exit
je ne les ai pas encore vu en cours donc
Pour le c=64, tu le places dans tes if associés à c : if (c>64) c=128-c;
break, te permet de sortir de la boucle prématurément, exit sort du programme
ici ça ferait : if (c==31) { printf("PERDU"); exit; }
Ou alors : if (c==31) break;
Mais dans ce dernier cas il faudrait différencier à la fin du while, le cas où tu es sortie de la boucle en gagnant, ou en perdant pour afficher le bon message...
break, te permet de sortir de la boucle prématurément, exit sort du programme
ici ça ferait : if (c==31) { printf("PERDU"); exit; }
Ou alors : if (c==31) break;
Mais dans ce dernier cas il faudrait différencier à la fin du while, le cas où tu es sortie de la boucle en gagnant, ou en perdant pour afficher le bon message...
Déjà je pense que tu as mis trop de conditions !
a>0 && b>0 && a<=6 && b<=6 // Ceux là ne servent à rien...
Si l'utilisateur du programme ne sait pas s'en servir, tant pis pour lui ^^
En tout cas, on ne devrait pas perdre la partie à cause de ça !
Du coup il reste "c<64 && c!=31", mais si tu mets "c!=64 && c!=31" dans ce cas tu ne sors plus de la boucle quand c>64 et tu peux mettre en place ta condition if (c>64)
Ensuite quand tu es sortie tu n'as plus que deux cas :
if (c==31) printf('PERDU") else printf("GAGNE");
a>0 && b>0 && a<=6 && b<=6 // Ceux là ne servent à rien...
Si l'utilisateur du programme ne sait pas s'en servir, tant pis pour lui ^^
En tout cas, on ne devrait pas perdre la partie à cause de ça !
Du coup il reste "c<64 && c!=31", mais si tu mets "c!=64 && c!=31" dans ce cas tu ne sors plus de la boucle quand c>64 et tu peux mettre en place ta condition if (c>64)
Ensuite quand tu es sortie tu n'as plus que deux cas :
if (c==31) printf('PERDU") else printf("GAGNE");