Besoin d'aide exo en C

Fermé
unmec13 - 3 oct. 2010 à 15:59
 unmec13 - 4 oct. 2010 à 19:55
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 :

#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...:-(


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 ???

#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;
}

0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
4 oct. 2010 à 19:26
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.
0
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
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
4 oct. 2010 à 19:35
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...
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
4 oct. 2010 à 19:44
Remarque : ton "c!=31" dans la condition du while revient au même que faire le break.
Le problème est juste qu'en sortant de la boucle, dans ce cas là tu perds alors que tu affiches que tu gagnes !
0
Ca marche pas le c=64 surement pq dans mon while j'ai c<64 et c!=31

et quand je le mets en dehors du while ça marche pas non plus ça me dit toujours que j'ai gagné quand je dépasse :-( je perds espoir avec cet exo
0
Oui voilà lorsque je sors de la boucle je gagne à tous les coups et c'est justement ça que je sais pas résoudre
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
4 oct. 2010 à 19:53
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");
0