Probleme avec le jeu de loie

edwix Messages postés 12 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 7 janvier 2010 - 28 sept. 2009 à 22:20
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 - 7 oct. 2009 à 07:59
Alors bonjour a tous le monde je vous montre le sujet que j'ais a faire en exercie un jeu de l'oi voici le sujet :

-on avance du nombre de cases indiquer par le joueur
-si on arrive juste a la case 66 le jeu est terminé sinon on recule
-une oie toutes les 9 cases sauf la case 63 et on rejoue
-une tete de mort en case 58 nous fait retomber a la case 0

voila maintenant ce que j'ai fait et ce que je n'arrive pas a faire c'est dès que je suis a la case 66 je ne recule pas mais je continue a avancer merci de m'aider car sa fait deux jours que je suis dessus merci d'avances :

#include<stdio.h>
#define caseMort 58
#define caseFin 66

void main(void)
{
long de = 0;
long cases = 0;

printf("ecrivez la valeur du de entre 2 et 12\n");
scanf("%d",&de);


do
{

if(de >= 2 && de <= 12)
{
cases = cases + de;
printf("Vous avancer de %d case et vous ete a la case %d\n",de,cases);
scanf("%d", &de);
}
else
{
printf("ce n'est pas bon recomencez\n");
scanf("%d", &de);
}


if(cases % 9 == 0 && cases != 63)
{
printf("Relancez le de vous etes a la case %d\n", cases);
scanf("%d", &de);
}


if(cases == caseMort)
{
cases = 0;
printf("Oh non vous etes a la case %d vous recomencez tout depuis le debut\n", cases);
scanf("%d",&de);
}


if(cases == 66)
{
break;

}
else if(cases + de > caseFin)

{


cases = (caseFin - cases) + (caseFin - de);
}


}while(cases != 66);

printf("bien jouez vous avez gagner\n");

}

13 réponses

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
29 sept. 2009 à 08:18
je dirais que la valeur du recul (valeur négatif) est :
(casFin - cases)

donc cases = caseFin + (caseFin - cases)

A affiner, il y a peut-etre un +/-1 à ajouter.
0
edwix Messages postés 12 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 7 janvier 2010
29 sept. 2009 à 12:31
merci je vais essayer sa et je te dit si sa marche ou pas.
0
edwix Messages postés 12 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 7 janvier 2010
29 sept. 2009 à 12:37
sa ne marche pas ici kan j'exécute le programme modifier une fois arriver a la cases 60 je rentre une valeur comme 12 et il m'affiche que je suis a la cases 84.

une idée quelqu'un

merci de m'avoir répondu fregolo52
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
29 sept. 2009 à 15:41
Bonjour,

ta formule était bonne mais tu avais déjà validé le déplacement en début de boucle.
Reprend la logique, et évite de faire autant de scanf.

cases = 0;
do {
printf
scanf
if ( de pas ok ) {
erreur
}
else {
if ( cases + de > 66 ) {
...
}
else
cases += de;

/* déplacement terminé on teste les cases spéciales */
if ( cases == ? ) {
...
}
else if ( cases == ? ) {
...
}
}
}
thip
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
edwix Messages postés 12 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 7 janvier 2010
29 sept. 2009 à 17:34
Sa ma l'air bien ce que ta fais je vais tester tout sa et je te dirais si sa marche et merci du conseille pour les scanf parce moi mon plus gros défaut c'est de me compliquer toujours l'existence lol .
Juste un truc encore sa veut dire quoi thip pour savoir car c'est la première fois que je vois sa.

merci de tas réponses tpoinsot j'espère quel me sera utile.
0
edwix Messages postés 12 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 7 janvier 2010
30 sept. 2009 à 17:34
Et voila le travail j'ai enfin réussi lol voila pour ceux qui veulent voir comment j'ai fait j'ai un peut modifier l'analyse de tpoinsot voila :


#include<stdio.h>
#define FIN 66
#define MORT 58
#define DE_MIN 2
#define DE_MAX 12


void main (void)
{
long de = 0;
long cases = 0;

do{
printf("Ecrivez une valeur entre 2 et 12\n");
scanf("%d", &de);


while(de < DE_MIN || de > DE_MAX )
{
printf("erreur\n");
scanf("%d", &de);
}

if (cases + de > FIN)
{
cases = (FIN - cases)+(FIN - de);
printf("vous avancer de %d case et vous ete a la case %d\n", de, cases);

}
else
{
cases = cases + de;
printf("vous avancer de %d case et vous ete a la case %d\n", de, cases);
}

if(cases == FIN)
{
break ;
}

if(cases == MORT)
{
printf("oh non vous etes sur la case 58 vous retomber a la case 0");
cases = 0;
}

if(cases % 9 == 0 && cases <= 64)
{

cases = cases + 2 * de;
printf("vous etes sur une oie vous avez de la chance, vous etes a la case %d\n", cases);
}

}while(cases != FIN);
printf ("vous avez gagner\n");
}
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
1 oct. 2009 à 09:11
Salut,

As-tu testé la case MORT ? la case 63 ?

Le test "if (cases==FIN)" est inutile mais peut-être plus pratique pour la compréhension.
Il ne restera qu'à corriger les fautes.

thip
0
edwix Messages postés 12 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 7 janvier 2010
1 oct. 2009 à 20:45
oui j'ai tester case 58 et 63 sa marche a merveille et je suis de ton avis en réfléchissant que ma (cases == FIN) ne sert a rien mais bon ce qu'il veulent corriger sa le corrigerons heu juste on fait comment pour mettre résolu sur le forum vu que je suis nouveau je sais pas trop.
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
2 oct. 2009 à 14:43
Bonjour,
Pour valider je ne sais pas, je n'ai jamais posé de question. Demande à un admin.

Je demandais si tu avais vérifié la case MORT car tu mets cases 0; Puis juste en dessous, if ( cases%9 0 ... : il n'y a pas de raison je crois de passer dans ce if.
Donc if() {...} else if ( ...

Pour la case 63, tu disais
-une oie toutes les 9 cases sauf la case 63 et on rejoue

donc, tu n'as pas tout à fait terminé.

Un dernier truc : il est préférable de mettre des parenthèses et des espaces, pour la compréhension :
if ( (cases % 9) == 0 && cases <= 64 )

thip
0
edwix Messages postés 12 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 7 janvier 2010
5 oct. 2009 à 12:31
Heu je me suis tromper en faite on rejoue pas mais on avance le double du dé. Dès qu'on arrive sur la case 9 par exemple est qu'on a fait 9 points avec le dé et ben on avance denouveau de 9 case.
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
5 oct. 2009 à 19:02
oui, il faudrait modifier la valeur du déplacement final avant de tester les cases.

if(cases % 9 == 0 && cases <= 64) 
{ 
  de *= 2; 
} 

if (cases + de > FIN) 
{ 
  cases = (FIN - cases)+(FIN - de); 
  ...
} 



cases 0 et 64 font un double ?
0
edwix Messages postés 12 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 7 janvier 2010
6 oct. 2009 à 12:43
Heu je ne vois pas trop ce que tu veut me demander là.
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
7 oct. 2009 à 07:59
je dis qu'il faut calculer le déplacement avant de le traiter.
donc, s'occuper des cases qui doublent la valeur du dé, puis déterminer la case d'arrivée (soit reculer si on a dépassé) puis tester les cases particulières.


thip
0
Rejoignez-nous