Aide pour un "jeu de l'oie"

Signaler
Messages postés
27
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
9 avril 2009
-
Messages postés
9
Date d'inscription
vendredi 16 mai 2008
Statut
Membre
Dernière intervention
1 janvier 2011
-
Bonjour,
Je souhaite faire un jeux de l'oie en C en mode console ... certes c'est moche mais je débute ...
Pour l'instant j'ai fait le bout de code qui suit mais j'ai des problèmes ...
<li>   Dans le switch ... je pense qu'il faut utiliser une autre technique ...</li><li>   Mon random ne marche pas, il me sort toujours un 6</li>Il y a peut etre (sans doute ...) d'autres problèmes mais ce sont je pense les plus importants!
Je code sous DEV-C++ et je crois savoir qu'il y a pas mal de problème par rapport au random, mais je n'ai pas bien compris les réponses

                                                                        

VOILA MON CODE

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define HAUTEUR 14
#define LARGEUR 22

const char CHG=218,TH=196,CHD=191,TV=179,CBD=217,CBG=192,espace=32,pion=2;
int x,y,random,PositionPion=0,i=0;

                                             
                                             
                                              /*Partie prise sur CPPfrance*/
void gotoxy(SHORT x, SHORT y)
{
    COORD coord;
    HANDLE  HCmd;

    coord.X = x;
    coord.Y = y;
    HCmd= GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(HCmd, coord);
}

                                             
                                              /*Dessin du contour du plateau*/
void Plateau()
{
  int indiceL, indiceH;
 
  printf ("%c",CHG);
 
  for (indiceL = 0 ; indiceL <= LARGEUR ; indiceL++)
      printf ("%c", TH);
 
  printf ("%c\n",CHD);
 
  for (indiceH = 0 ; indiceH <= HAUTEUR ; indiceH++)
  {
      printf ("%c",TV);
      for (indiceL = 0 ; indiceL <= LARGEUR ; indiceL++)
      {
          printf ("%c", espace);
      }
      printf ("%c\n",TV);
  }
 
  printf ("%c",CBG);
 
  for (indiceL = 0 ; indiceL <= LARGEUR ; indiceL++)
      printf ("%c", TH);
 
  printf ("%c\n  ",CBD);

  printf ("\n");
 
  Case();
 
}

                                                   
                                                   
                                                    /*Dessin des cases*/
int Case(void)
{
   for (y=1 ; y<HAUTEUR+2 ; y++)
   {
       for (x=6 ; x<=LARGEUR ; x+=6)
       {
           gotoxy(x,y);
           printf ("%c",TV);
       }
   }
  
   for (x=1 ; x<LARGEUR+2 ; x++)
   {
       for (y=4 ; y<=HAUTEUR ; y+=4)
       {
           gotoxy(x,y);
           printf ("%c",TH);
       }
   }
  
   gotoxy(20,20);
}

                                                   
                                                   
                                                   
                                                    /*Simulation du lancé d'un dé*/
int LanceDe()
{
    random = rand()%7;
    printf ("Le resultat du lance est %d\n", random);
    return random;
}
   

                                             /* Logique du jeu de l'oie avec affichage du pion  */
                                             /* Des règles pour chaque cases sont à venir       */
int MvtPion()
{
    do
    {
             LanceDe();
             PositionPion += random;
             switch (PositionPion)
             {
                    case 'PositionPion == 1' :
                    {    
                         gotoxy(3,2);
                         printf("%c",pion);
                    }
                    case 'PositionPion == 2' :
                    {    
                         gotoxy(9,2);
                         printf("%c",pion);
                    }
                    case 'PositionPion == 3' :
                    {    
                         gotoxy(15,2);
                         printf("%c",pion);
                    }
                    case 'PositionPion == 4' :
                    {    
                         gotoxy(21,2);
                         printf("%c",pion);
                    }
                    case 'PositionPion == 5' :
                    {    
                         gotoxy(21,6);
                         printf("%c",pion);
                    }
                    case 'PositionPion == 6' :
                    {    
                         gotoxy(21,10);
                         printf("%c",pion);
                    }
                    case 'PositionPion == 7' :
                    {    
                         gotoxy(21,14);
                         printf("%c",pion);
                    }
                    case 'PositionPion == 8' :
                    {    
                         gotoxy(15,14);
                         printf("%c",pion);
                    }
                    case 'PositionPion == 9' :
                    {    
                         gotoxy(9,14);
                         printf("%c",pion);
                    }
                    case 'PositionPion == 10' :
                    {    
                         gotoxy(3,14);
                         printf("%c",pion);
                    }
                    case 'PositionPion == 11' :
                    {    
                         gotoxy(3,10);
                         printf("%c",pion);
                    }
                    case 'PositionPion == 12' :
                    {    
                         gotoxy(3,6);
                         printf("%c",pion);
                    }
                    case 'PositionPion == 13' :
                    {    
                         gotoxy(9,6);
                         printf("%c",pion);
                    }
                    case 'PositionPion == 14' :
                    {    
                         gotoxy(15,6);
                         printf("%c",pion);
                    }
                    case 'PositionPion == 15' :
                    {    
                         gotoxy(15,10);
                         printf("%c",pion);
                    }
                    case 'PositionPion == 16' :
                    {    
                         gotoxy(9,10);
                         printf("%c",pion);
                    }
                    case 'PositionPion > 16' :
                    {    
                         PositionPion = 16 - (random - (16-(PositionPion - random)));
                         /*Il faut atteindre 16 pile pour gagner,
                         lorsque l'on dépasse, on revient en arriere*/
                        
                         goto case 'PositionPion'; //retour du pion là ou il doit etre
                         printf("%c",pion);
                    }
                    i++; //nombre de lancé écoulé
                    system("PAUSE");
             }
    }
    while ( PositionPion == 16);
    printf ("Vous avez gagne en %d lance", i);
}

int main()
{
    Plateau();
    MvtPion();
    system("PAUSE");
    return 0;
}

Encore pardon pour mon code qui doit etre horrible à lire ... et merci a vous d'etre arrivé jusqu'ici !!

5 réponses

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
19
Pour le rand(), il faut d'abord initialiser le générateur dans main() par exemple :
srand(GetTickCount());
OU
srand((unsigned int)time((time_t*)NULL));

puis faire :
valeur = (rand()%6)+1;

un case de prend pas de chaine mais tu peux faire :
#define positionPion1 1
#define positionPion2 2
(...)
#define positionPion16 16

puis

switch(PositionPion)
{
   case positionPion1:
      break;

   case positionPion2:
      break;

   default:
      break;
}

Ensuite, pas de
case > 16:   // impossible
Met le dans default:

Ensuite pas de goto case   // impossible

Faire un :
PositionPion = valeurCase;
puis retour au switch

A plus.
Messages postés
27
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
9 avril 2009

Alor déjà je te remercie grandement d'avoir preté attention à mon problème!
En plus tu as pris la peine de bien répondre ... mais quelques points noirs persistent ...
<li>Dans le default, comment faire pour revenir au switch sans passer par le début de la boucle ?</li><li>Comment faire pour éffacer mon "pion" au fur et à mesure qu'il avance ?</li><li>J'aimerais que l'utilisateur appuie sur une touche pour lancer le random
</li>Sachant que mon code maintenant est le suivant :

do
    {
             LanceDe();
             PositionPion += random;
             switch (PositionPion)
             {
                    case 1 :
                    {    
                         gotoxy(3,2);
                         printf("%c",pion);
                         break;
                    }
                    case 2:
                    {    
                         gotoxy(9,2);
                         printf("%c",pion);
                         break;
                    }
                    case 3 :
                    {    
                         gotoxy(15,2);
                         printf("%c",pion);
                         break;
                    }
                    case 4 :
                    {    
                         gotoxy(21,2);
                         printf("%c",pion);
                         break;
                    }
                    case 5 :
                    {    
                         gotoxy(21,6);
                         printf("%c",pion);
                         break;
                    }
                    case 6 :
                    {    
                         gotoxy(21,10);
                         printf("%c",pion);
                         break;
                    }
                    case 7 :
                    {    
                         gotoxy(21,14);
                         printf("%c",pion);
                         break;
                    }
                    case 8 :
                    {    
                         gotoxy(15,14);
                         printf("%c",pion);
                         break;
                    }
                    case 9 :
                    {    
                         gotoxy(9,14);
                         printf("%c",pion);
                         break;
                    }
                    case 10 :
                    {    
                         gotoxy(3,14);
                         printf("%c",pion);
                         break;
                    }
                    case 11 :
                    {    
                         gotoxy(3,10);
                         printf("%c",pion);
                         break;
                    }
                    case 12 :
                    {    
                         gotoxy(3,6);
                         printf("%c",pion);
                         break;
                    }
                    case 13 :
                    {    
                         gotoxy(9,6);
                         printf("%c",pion);
                         break;
                    }
                    case 14 :
                    {    
                         gotoxy(15,6);
                         printf("%c",pion);
                         break;
                    }
                    case 15 :
                    {    
                         gotoxy(15,10);
                         printf("%c",pion);
                         break;
                    }
                    case 16 :
                    {    
                         gotoxy(9,10);
                         printf("%c",pion);
                         break;
                    }
                    default :
                    {    
                         PositionPion = 16 - (random - (16-(PositionPion - random)));
                         /*Il faut atteindre 16 pile pour gagner,
                         lorsque l'on dépasse, on revient en arriere*/
                        
                         ???????????       //retour du pion là ou il doit etre

                    }
                    i++;  //nombre de lancé écoulé
                    system("PAUSE");
             }
    }while ( PositionPion != 16);
   
    gotoxy (20,20);
    printf ("Vous avez gagne en %d lance\n", i);

Encore mille fois merci et si tu a un bon tuto à me proposer je suis preneur
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
19
Le goto case ne marche pas mais le goto vers étiquette oui, tu peux toujours faire :

 switch (PositionPion)
             {
      LABEL_1:
                    case 1 :
                         break;
      LABEL_2:
                    case 2:
                         break; 
      LABEL_3:
                     /* ect... */ 
             } 

// code
goto LABEL_2;
// code
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
19
Pour effacer le pion, a chaque avance, tu peux sauver les déplacements précedent dans un tab de COORD par exemple.

COORD g_deplPrec[16] = {0};

void sauveDeplacementPrec(int x, int y, bool effacer = false)
{
   static int coup = 0;

   g_depPrec[coup].x = x;
   g_depPrec[coup].y = y;
   if( effacer )
   {
      gotoxy(x, y);


      putc(' ');
   }
   coup++;
}
Messages postés
9
Date d'inscription
vendredi 16 mai 2008
Statut
Membre
Dernière intervention
1 janvier 2011

Bonjour Mon ami je suis Jack de paris .j'ai le meme probleme que toi.
  je dois réaliser le jeu de l'oie .et il me reste que 4 jours pour rendre le travail
 tu peux m'envoyer le code SVP c'est tres urgent
   voici ma boite elantri@hotmail.fr
                              ou
                           elantri@yahoo.fr
                                                                   Merci bk mon cher ami