Exo programme c

Résolu/Fermé
trem_56_tu Messages postés 24 Date d'inscription dimanche 18 novembre 2007 Statut Membre Dernière intervention 9 octobre 2008 - 18 nov. 2007 à 13:16
trem_56_tu Messages postés 24 Date d'inscription dimanche 18 novembre 2007 Statut Membre Dernière intervention 9 octobre 2008 - 18 nov. 2007 à 16:13
Bonjour,
je voudrai résoudre cette exercice, mdodifier le programme suivant afin de répondre aux consigne ci -dessous,cei enrajoutant deux fonction une pour le liver une pour la tortue?
#include <time.h>
#include <stdlib.h>
#include <stdio.h>

/*--------------------------------------
* Programme lievre et tortue version 1
* ------------------------------------- */

/* Le lievre et la tortue font une course sur un plateau.
* Le plateau est ici represente
* par un tableau 1D de N cases.
* A chaque tour, le lievre peut aleatoirement
* - Sauter (avancer de x cases)
* - Glisser (reculer de x cases)
* - Dormir
* A chaque tour, le lievre peut aleatoirement
* - Marcher (avancer de x cases)
* - Glisser (reculer de x cases)

* La course se termine lorsque le lievre ou la tortue
* arrive a la fin du plateau. */


/*--------------------------------------
* Les fonctions utiles au
* programme principal
* ------------------------------------- */

// On initialise le cote aleatoire du jeu.
// Disons qu'on utilise l'heure d'execution du
// programme (localtime) pour cela.
void InitialiserAleatoire(void)
{
time_t t_loc;
struct tm *tmp;

time(&t_loc);
tmp= localtime(&t_loc);
srand(tmp->tm_sec);
}

// Fonction testant la fin de la course
int courseFinie(pLievre,pTortue,lCourse)
{
// Si le lievre depasse la ligne d'arrivee
// la course est finie
if (pLievre >= lCourse)
return 1;

// Si la tortue depasse la ligne d'arrivee
// la course est finie
if (pTortue >= lCourse)
return 1;

// Si aucune des deux conditions precedente
// n'a permis de dire que la course est finie,
// alors la course n'est pas finie
return 0;
}

// Fonction permettant de deplacer la tortue
int DeplacerTortue(int position)
{
int aleat; // Sert au tirage aleatoire du deplacement

// On tire aleatoirement entre 1 et 10
aleat = (rand() % (10 - 1 + 1)) + 1;

printf("Tortue : ");
if (aleat <= 5 )
{
printf("un pas rapide \n");
position = position+3;
}

if (aleat >= 6 && aleat <=7)
{
printf("une glissade \n");
position = position - 6;
if(position <1)
position =1;
}

if (aleat >=8)
{
printf("un pas lent \n");
position = position + 1;
}

return position;
}

int DeplacerLievre(int position)
{
int aleat; // Sert au tirage aleatoire du deplacement

// On tire aleatoirement entre 1 et 10
aleat = (rand() % (10 - 1 + 1)) + 1;

printf("Lievre : ");
if (aleat <= 2 )
{
printf("il dort \n");
position = position; // Il dort
}

if (aleat >= 3 && aleat <=4)
{
printf("grand saut \n");
position = position + 9; // grand saut
}

if (aleat >= 5 && aleat <=7)
{
printf("petit saut \n");
position = position + 1; // Petit saut
}

if (aleat == 8 )
{
printf("grande glissade \n");
position = position - 9; // grande glissade
if (position <1)
position = 1;
}

if (aleat > 8)
{
printf("petite glissade \n");
position = position - 2; // Petite glissade
if (position <1)
position = 1;
}

return position;
}

// Fonction qui affiche l'etat de la course
void AfficherPlateau(int pTortue,int pLievre,int lCourse)
{
int i;

// Une boucle pour afficher chacune des 70 cases
for (i=1; i<=lCourse;i++)
{
// Ici on affiche la ieme case.

if(i!=pTortue && i !=pLievre)
{
// Si il n'y a rien
printf("_");
}
else
{
if (i==pTortue) // Si on est a la poursuite de la tortue
{
if (i==pLievre) // Tortue etLievre sont a la meme place
printf("A");
else
printf("T");
}
else // il n'y a pas de tortue (donc il n' y apas de lievre)
{
printf("L");
}
}
}
printf("\n");
printf("-----------------------------------\n");
}
/*Programme Principal
* ------------------------------------- */
int main(void)
{
int positionTortue=1;
int positionLievre=1;
int longueurCourse =70;
// Pour tirer des nombres aleatoires differents,
// on doit faire une petite manip avant tout tirage
InitialiserAleatoire();

// Affichage de debut de course
printf("Depart \n");
AfficherPlateau(positionTortue,positionLievre,longueurCourse);

// On attends que l'utilisateur appuie sur la touche enter;
getchar();

// La course continue tant qu'aucun des deux n'est arrivé a la fin
while (courseFinie(positionLievre, positionTortue, longueurCourse ) == 0 )
{
// On deplace la tortue;
positionTortue = DeplacerTortue(positionTortue);
// On deplace le lievre;
positionLievre = DeplacerLievre(positionLievre);

// On affiche le plateau;
AfficherPlateau(positionTortue,positionLievre,longueurCourse);

// On attends que l'utilisateur appuie sur la touche enter;
getchar();
}

// Ici, la course est forcement finie
// Ce qui suit sert a determiner qui est vainqueur
if (positionTortue>=longueurCourse)
{
if(positionLievre>=longueurCourse)
printf("Egalite ! \n");
else
printf("Vainqueur : la tortue ! \n");
}
else
printf("Vainqueur : le lievre ! \n");


// Disons pour simplifier
// qu'il faut toujours mettre ceci a la fin du main
return 0;
}
Voici l'énoncé:
Modifier le programme de façon a inclure l'existence de cases spéciales au cours de la
course. Ces cases agissent lorsque le joueur tombe dessus a l'issue de son déplacement
normal et lui font subir un second déplacement lié au type de la case. Ces cases spéciales
sont de trois types :
 Cases « Recule » : Toutes les cases dont le numéro est divisible par 10. Lorsqu'un
joueur arrive sur une case de ce type, il recule de 4 cases.
 Cases « Boost » : Toutes les cases dont le numéro est divisible par 13. Lorsqu'un
joueur arrive sur une case de ce type, il avance de 4 cases.
 Case « Magique » : La case 35. Lorsqu'un joueur qui est devant l'autre arrive sur cette
case, il revient dans la case précédent celle de l'autre joueur. Lorsqu'un joueur en retard
sur l'autre arrive sur cette case, il saute juste devant l'autre joueur.
Pour faire ceci, vous allez coder une fonction qui s'occupe des cases spéciales.

2 réponses

trem_56_tu Messages postés 24 Date d'inscription dimanche 18 novembre 2007 Statut Membre Dernière intervention 9 octobre 2008 1
18 nov. 2007 à 16:13
Je tient à remercier mype pour l'aide précieuse qu'il m'a apporter comme tu dis à mon tour de jouer.


trem_56_tu.
1
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
18 nov. 2007 à 15:16
voici a quoi doi ressemble ta fonction "case special"

1)
if(positionTortue%10==0)
                positionTortue = positionTortue - 4;
             if(positionLievre%10==0)
               positionLievre =positionLievre - 4;

2)
if(positionTortue%13==0)
                  positionTortue = positionTortue + 4; 
              if(positionLievre%13==0)
                  positionLievre =positionLievre + 4;

3)
if(positionTortue == 35)
                 if(positionTortue<positionLievre)
                       positionTortue = positionLievre +1;
                  else
                      positonTortue = positionLievre - 1;
              ifpositionLievre == 35)
                 if(positionTortue<positionLievre)
                       positionLievre = positionTortue - 1;
                  else
                     positionLievre = positionTortue + 1;


a toi de bosser un peu pr trouer l'en tete de la fonction
bonne chance ;)
0