Partage
  • Partager sur Facebook
  • Partager sur Twitter

zPlus

Août - Revisitez vos classiques !

    13 août 2012 à 15:28:34

    Citation : Mr21

    En fait la recursion terminale j'ai toujours trouve ca inutile car justement on peut faire un while: […]



    Ça dépend. La version récursive peut être plus confortable à écrire, plus lisible, plus conforme à la logique du langage que tu utilises (un langage fonctionnel par exemple)…
    • Partager sur Facebook
    • Partager sur Twitter
      13 août 2012 à 15:52:18

      Tout d'abord, je teste le jeu en lui-même, koloce : je trouve que tout est trop sérré, fouilli. ^^

      Le nombre mystere se trouve entre 0 et 100

      Tant qu'à faire, tu aurais pu mettre à jour les deux nombre ("entre 50 et 100", par exemple).

      Ensuite :

      main.c:21:5: attention : no previous prototype for ‘ppow’ [-Wmissing-prototypes]
      main.c:32:5: attention : no previous prototype for ‘tour’ [-Wmissing-prototypes]
      main.c: In function ‘tour’:
      main.c:40:15: attention : conversion to ‘double’ from ‘time_t’ may alter its value [-Wconversion]
      main.c: Hors de toute fonction :
      main.c:64:5: attention : function declaration isn’t a prototype [-Wstrict-prototypes]
      main.c:81:10: attention : function declaration isn’t a prototype [-Wstrict-prototypes]
      main.c: In function ‘main’:
      main.c:118:13: attention : conversion to ‘unsigned int’ from ‘time_t’ may alter its value [-Wconversion]
      main.c:110:14: attention : unused parameter ‘argc’ [-Wunused-parameter]
      main.c:110:26: attention : unused parameter ‘argv’ [-Wunused-parameter]
      </span>
      À part ça, niveau code c'est assez bien. :)
      Et c'est pas bête le coup de ppow, de même pour le "i=((i+1) >= nombrejoueur)? 0:i+1;". Par contre, je trouve que tu t'embêtes un peu la vie avec ta gestion du temps.

      double temps = (double) time(NULL);
      scanf("%d",&proposition);
      while(getchar()!='\n');
      temps = time(NULL)- temps;
      
      acteur->time_all+=temps;
      

      Pourquoi tu t'embêtes à caster toussa (et encore, il en manque un) alors que le type time_t est là pour toi ?

      Moi j'aurai tout simplement fait ceci :

      acteur->temps_debut = time(NULL);
      /* Jeu */
      acteur->temps_fin = time(NULL);
      acteur->temps_total = difftime(acteur->temps_fin, temps_debut);
      


      Tant qu'on y est :

      if(proposition < acteur->nombremystere)
      {
        acteur->vie--;
        puts("Ce nombre est plus grand");
        return 1;
      }
      
      else if (proposition > acteur->nombremystere)
      {
        acteur->vie--;
        puts("Ce nombre est plus petit");
        return 1;
      }
      

      -->

      acteur->vie--;
      
      if(proposition < acteur->nombremystere)
      {
        puts("Ce nombre est plus grand");
        return 1;
      }
      
      else if (proposition > acteur->nombremystere)
      {
        puts("Ce nombre est plus petit");
        return 1;
      }
      


      J'ai ajouté un petit bonus. ^^


      Edit : Le nombre d'essais est mal compté (avec ton code, of course) : lorsque l'on gagne, le compteur n'est pas incrémenté.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        13 août 2012 à 16:06:33

        voici mon code avec le dernier bonus qui viens d'être ajouté :)

        #include <stdio.h>
        #include <stdlib.h>
        #include <time.h>
        
        #ifdef __WIN32__
        #define clear() system("cls")
        
        #else /* Le reste, UNIX en particulier */
        #define clear() system("clear")
        #endif
        
        void difficulte(void);              
        unsigned menu(void);
        unsigned aleatoire(void);
        unsigned intervalle(unsigned nbMystere);
        unsigned choisirNbMystere(void);        /* Prototypes */
        void solo(void);
        void multi(void);
        void maxIA(void);
        void debutIA(void);
        void IA(void);
        unsigned rejouer(void);
        void jeu(unsigned nbMystere);
        
        unsigned max;                           
        unsigned min = 0;
        
        int main (void)
        {
            srand((unsigned int)time(NULL));
            
            do {
                switch (menu()) {
                    case 1:
                        solo();
                        break;
                    case 2:
                        multi();
                        break;
                    case 3:
                        debutIA();
                        break;
                    default:
                        return EXIT_SUCCESS;
                        break;
                }
            } while (rejouer()); 
                       
            return EXIT_SUCCESS;
        } 
        
        void difficulte(void)
        {
            unsigned niveau;
            
            puts("Niveau de difficulté ? ");
            puts("1. Facile (entre 0 et 10)");
            puts("2. Normal (entre 0 et 100)");
            puts("3. Difficile (entre 0 et 1000)");
            
            scanf("%d", &niveau);
            
            switch (niveau) {
                case 1:
                    max = 10;
                    break;
                case 2:
                    max = 100;
                    break;
                default:
                    max = 1000;
                    break;
            }
        }
        
        unsigned menu(void)
        {
            unsigned choix;
            
            puts("Bienvenu(e) dans le jeu du Plus ou Moins !");
            puts("Votre choix ? ");
            puts("1. Solo");
            puts("2. Multi");
            puts("3. IA");
            puts("4. Quitter");
                
            scanf("%d", &choix);
            
            return choix;
        }
        
        unsigned aleatoire(void)
        {
            return (rand() % (max - min + 1)) + min;
        }
        
        unsigned intervalle(unsigned nbMystere)
        {
            unsigned intervalle = 1;
            
            while (nbMystere > 0) {
                nbMystere /= 10;
                intervalle *= 10;
            }
            
            return intervalle;
        }
        
        unsigned choisirNbMystere(void)
        {
            unsigned mystere;
            
            puts("Entrez le nombre mystère : ");
            scanf("%d", &mystere);
            
            clear();
            
            return mystere;
            
        }
        
        void solo(void)
        {
            difficulte();
            jeu(aleatoire());
        }
        
        void multi(void)
        {
            jeu(choisirNbMystere());
        }
        
        void maxIA(void)
        {
            puts("Entrez le nombre maximum : ");
            scanf("%d", &max);
        }
        
        void debutIA(void)
        {
            maxIA();
            IA();
        }
        
        void IA(void)
        {
            unsigned debut = 0;
            unsigned fin = max;
            unsigned trouve = 0;
            unsigned milieu;
            unsigned nbMystere = aleatoire();
            unsigned coups = 0;
            
            do {
                milieu = (debut + ((fin - debut) / 2));
                
                if (milieu == nbMystere) 
                    trouve = 1;
                else
                {
                    if (milieu < nbMystere) 
                        debut = milieu + 1;
                    else
                        fin = milieu - 1;
                    
                    coups++;
                }
            } while (trouve == 0);
            
            printf("L'IA a trouvé le nombre mystère %d en %d coup(s) !\n", nbMystere, coups);
            
        }
        
        unsigned rejouer(void)
        {
            unsigned continuer;
            
            puts("Voulez-vous rejouer ? (1/0)");
            scanf("%d", &continuer);
            
            return continuer;
        }
        
        void jeu(unsigned nbMystere)
        {
            time_t debut;
            time_t fin;
            double temps;
            unsigned nbEntre;
            unsigned nbCoups = 0;
            
            time(&debut);
            
            min = 0;
            max = intervalle(nbMystere);
            
            printf("Le nombre mystere se trouve entre 0 et %d\n\n", max);
            
            do {
                printf("Quel est le nombre mystère [%d - %d] : ", min, max);
                scanf("%d", &nbEntre);
                
                if (nbEntre > nbMystere)
                {
                    printf("C'est moins !");
                    max = nbEntre;
                }
                else if (nbEntre < nbMystere) 
                {
                    printf("C'est plus !");
                    min = nbEntre;
                }
                else
                    printf("Bravo !");
                
                nbCoups++;
                
                putchar('\n');
                
            } while (nbEntre != nbMystere);
            
            time(&fin);
            
            temps = difftime(fin, debut);
            
            printf("Vous avez mis %d essais pour trouver le nombre %d, le tout en %.0f secondes.\nCe qui fait en moyenne %.1fs par essais.\n\n", nbCoups, nbMystere, temps, temps / (double)nbCoups);
        }
        
        • Partager sur Facebook
        • Partager sur Twitter
          13 août 2012 à 16:20:33

          Je suis contre ce nouveau bonus : pas que ce soit compliqué à mettre en place (au contraire), mais je trouve que ça facilite vraiment trop le travail au joueur. Même plus besoin de se souvenir de l’intervalle ni de le mettre à jour mentalement, il n’a plus qu’à prendre la moyenne des deux valeurs affichées, et le jeu perd de son intérêt déjà si limité.
          • Partager sur Facebook
          • Partager sur Twitter
            13 août 2012 à 16:22:48

            bah c'est justement ce que j'ai fait ^^
            Et dans le cas ou tu sors de cet intervalle tu ne perds pas ta vie \o/

            J'ai mentionne qu'il etait fair-play mon jeu :p
            • Partager sur Facebook
            • Partager sur Twitter
              13 août 2012 à 16:29:22

              Citation

              bah c'est justement ce que j'ai fait


              J'ai eu une illumination en regardant ton code ! ×D

              Citation

              Je suis contre ce nouveau bonus : pas que ce soit compliqué à mettre en place (au contraire), mais je trouve que ça facilite vraiment trop le travail au joueur. Même plus besoin de se souvenir de l’intervalle ni de le mettre à jour mentalement, il n’a plus qu’à prendre la moyenne des deux valeurs affichées, et le jeu perd de son intérêt déjà si limité.


              Tu trouves ? :(
              • Partager sur Facebook
              • Partager sur Twitter
                15 août 2012 à 14:59:39

                RAAAAAAAAAAAAAAAAAAAAAA.

                L'intervalle c'était mon idée !

                Le nouveau code que je donne manque de comment dire: place et de commentaire?
                Tout est dans un fichier...

                J'ai pas appris le type de retour time. Ca passe dans un printf ?

                Nouveau code qui fonctionne:
                #include <stdio.h>
                #include <stdlib.h>
                #include <time.h>
                #include <unistd.h>
                #define VIE 15
                #define JOUEUR 5
                #define TAILLE_NOM 15
                
                
                #define NIVEAU(A)							\
                printf("Quel niveau de difficulté %s ?\nEntre 0 et 10 niveau:1\nEntre 0 et 100 niveau:2\nEntre 0 et 1000 niveau:3\n\nNiveau>>>>>", A); \
                scanf("%d",&nouveau->diffi);						\
                while(getchar()!='\n')						
                
                
                
                #define INVERS(A,B)	      \
                A = A + B;		      \
                B = A - B;		      \
                A = A - B
                
                
                #define OUIOUNON(A, B)					\
                  char option=' ';					\
                  do							\
                    {							\
                      printf("%s [o\\n]\n", A);				\
                      option=getchar();					\
                      while(getchar()!='\n');				\
                    }while(option !='n' && option!='o');		\
                							\
                  if(option=='o') B
                
                
                typedef struct Sjoueur Sjoueur;
                
                struct Sjoueur
                {
                  char nom[TAILLE_NOM];
                  int vie;
                  int time_all;
                  int diffi;
                  int nombremystere;
                  int proposition[2];
                };
                
                
                void total_score(Sjoueur* Liste[]);
                
                
                int ppow(int nombre,int puissance)
                {
                  int i=0;
                  int resultat=1;
                
                  for(i=1;i <= puissance;++i)
                    resultat*=nombre;
                
                  return resultat;
                }
                
                int tour( Sjoueur* acteur )
                {
                  int proposition=0,temps=0;
                  printf("A vous: %s \nVous avez fait %d essais plus que %d essais.\nLe nombre mystere se trouve entre %d et %d.\nNombre que vous proposez\nNombre>>>>>",(acteur->nom[0]!=0)? acteur->nom: "Ordinateur\n\nIA:-Oui maître.\n",VIE - acteur->vie,acteur->vie,acteur->proposition[0],acteur->proposition[1]);
                  temps = (int) time(NULL);
                
                  if(acteur->nom[0]!=0)
                    {
                  scanf("%d",&proposition);
                  while(getchar()!='\n');
                    }
                  else
                    {
                      proposition= (acteur->proposition[0]+acteur->proposition[1])/2;
                      printf("%d\n",proposition);
                    }
                  
                
                  temps = time(NULL) - temps;
                  acteur->time_all+=temps;
                 
                 if(proposition < acteur->nombremystere)
                    {
                      if(proposition < acteur->proposition[1] && proposition > acteur->proposition[0])
                	acteur->proposition[0]=proposition;
                	  
                      acteur->vie--;
                      puts("Ce nombre est plus grand.");
                      sleep(1);
                      return 1;
                    }
                  else if (proposition > acteur->nombremystere)
                  {
                    if(proposition >  acteur->proposition[0] && proposition < acteur->proposition[1])
                	acteur->proposition[1]=proposition;
                    acteur->vie--;
                    puts("Ce nombre est plus petit.");
                    sleep(1);
                    return 1;
                  }
                  
                
                  return 0;
                }
                
                
                
                
                int nombreJoueur()
                {
                
                  int nombre=JOUEUR +2;
                  printf("combien de joueur ?\n\nJoueur>>>>>");
                  
                  while( nombre > JOUEUR )
                    {
                      scanf("%d",&nombre);
                      while(getchar()!='\n');
                    }
                
                
                  return nombre;
                }
                
                
                Sjoueur* new(const char* IA) //non ce n'est pas du C++
                {
                
                  Sjoueur* nouveau= malloc(sizeof(Sjoueur));
                
                  if(nouveau==NULL)
                    {
                      perror(NULL);
                      exit(EXIT_FAILURE);
                    }
                
                  if( IA==NULL)
                    {
                      printf("\n\nQuel est votre nom ?\nNom>>>>>");
                  
                  fgets(nouveau->nom,TAILLE_NOM -1 ,stdin);
                    NIVEAU("voulez-vous"); 
                
                    }
                  else
                    {
                      int i=0;
                      for(;i < TAILLE_NOM;++i)
                	nouveau->nom[i]=0;
                    NIVEAU("voulez vous pour l'IA");
                    }
                  nouveau->vie=VIE;
                
                  nouveau->time_all=0;
                
                  nouveau->nombremystere= rand() % ppow(10 , nouveau->diffi);
                
                  nouveau->proposition[0]=0;
                  nouveau->proposition[1]=ppow(10 , nouveau->diffi);
                  return nouveau;
                }
                
                								
                    					      
                Sjoueur *getIA()
                {
                
                  OUIOUNON("Voulez vous Jouer avec une IA ?", return new("IA"));
                 
                  return NULL;
                }
                
                void tourpartour()
                { 
                 int nombrejoueur;
                  Sjoueur* Liste[JOUEUR]={NULL};
                
                  int i=0;
                
                  nombrejoueur=nombreJoueur();
                
                  for(i=0; i < nombrejoueur;++i)
                    Liste[i]=new(NULL);
                
                  Liste[nombrejoueur]=getIA();
                
                  if(Liste[nombrejoueur]!=NULL)
                    nombrejoueur++;
                
                  i=-1;
                
                  do
                    {
                      i=((i+1) >= nombrejoueur)? 0:i+1;
                      if(!(Liste[i]->vie) )
                	{
                	  puts("Vous avez Tous perdu.\n");
                	  break;
                	}
                    }while(tour(Liste[i]));
                
                  if(Liste[i]->vie)
                    {
                  printf("Félicitation %s\nVous avez mis %d essai pour trouver le nombre %d, le tout en %d secondes.\nCe qui fait en moyenne %d seconde par essais.\n",(Liste[i]->nom[0]!=0)? Liste[i]->nom: "Ordinateur\n\nIA:-Merci maître. Les programmes vainquront!\n\n",VIE - Liste[i]->vie,Liste[i]->nombremystere,Liste[i]->time_all, (Liste[i]->time_all / (VIE - Liste[i]->vie +1)));
                
                  if(nombrejoueur!=1)
                    puts("Tous les autres ont perdu :'(");
                
                    }
                
                  for(i=0;i < nombrejoueur;++i)
                    free(Liste[i]);
                
                  getchar();
                }
                
                void chrono()
                {
                 int nombrejoueur;
                  Sjoueur* Liste[JOUEUR]={NULL};
                
                  int i=0;
                
                  nombrejoueur=nombreJoueur();
                
                  for(i=0; i < nombrejoueur;++i)
                    Liste[i]=new(NULL);
                
                  for(i=0;i < nombrejoueur;++i)
                    {
                      while(tour(Liste[i]))
                	if( !(Liste[i]->vie) )
                	{
                	  printf("Vous avez perdu %s, dommage :'(\n\n",Liste[i]->nom);
                	  break;
                	}
                    }
                
                  total_score(Liste);
                
                  for(i=0;i < nombrejoueur;++i)
                    free(Liste[i]);//bande de puriste
                
                  getchar();
                
                  total_score(Liste);
                }
                
                void total_score(Sjoueur* Liste[])
                {
                  /*Cacule des scores au chrono*/
                  int nombrejoueur=0;
                  int score[JOUEUR]={0};
                  int buffer[JOUEUR]={0};
                  /*int egalite[JOUEUR]={0};*/
                  int y=0,i=0,position=0;
                
                  for(i=0;Liste[i]!=NULL;++i)
                    nombrejoueur++;
                
                  for(i=0; i < nombrejoueur;++i)
                    {
                      if(Liste[i]->vie)
                	{
                	  score[i]=Liste[i]->time_all;
                	  buffer[i]=i;
                	}
                      else
                	{
                	  score[i]=Liste[i]->time_all;
                	  buffer[i]=-i;
                	}
                    }
                
                		
                  for(i=0; i <nombrejoueur;++i)
                    {
                      for(y=0;y < nombrejoueur;++y)
                	{
                	  if(score[i] < score[y])
                	    {
                	      INVERS(score[i],score[y]);
                	      INVERS(buffer[i],buffer[y]);
                	    }
                	  else if(score[y] > score[i] && score[i] < 0)
                	    {
                	      INVERS(score[y],score[i]);
                	      INVERS(buffer[i],buffer[y]);
                	    }
                
                	    
                	}
                      	  
                    }
                #define BUFFER (buffer[i]<0)?buffer[i]*-1:buffer[i]
                
                
                  for(i=0; i <nombrejoueur;++i)
                    {
                      
                      if(!Liste[BUFFER]->vie|| buffer[i] < 0 )
                	continue;
                
                      position++;
                      printf("En place n°%d nous avons %s avec un temps %d secondes total et %d seconde par tour en moyenne. Bravo !\n\n",position,Liste[buffer[i]]->nom,Liste[buffer[i]]->time_all,(int)(Liste[buffer[i]]->time_all /(VIE - Liste[buffer[i]]->vie +1 )));
                    }
                
                  for(i=0; i <nombrejoueur;++i)
                    {
                      if(Liste[BUFFER]->vie|| buffer[i] > 0)
                	continue;
                      
                      position++;
                      printf("La méga loose pour %s en°%d, avec un score ridicule de %d secondes qui n'a pas réussi à finir après %d essais le jeu TROLOLOL?\n",Liste[BUFFER]->nom,position,Liste[BUFFER]->time_all,VIE);
                    }
                #undef BUFFER
                }
                
                
                int main(int argc,char** argv)
                {
                    srand(time(NULL));
                
                
                    char option=0;
                    do
                      {
                	puts("Bienvenu dans le jeu du plus ou moins.");
                	puts("Il existe deux type de jeux:");
                	puts(" ");
                	puts("Chrono: Chaque joueur est chronométré celui qui fait le moins de temps en 15 essais à gagner");
                	puts("Taper: 'c' pour jouer au Chrono");
                	puts("Tour par Tour: Chacun leur tour les joueurs doivent trouver le nombre mystere.");
                	puts("Le plus rapide a trouver le nombre mystere élimine les autres joueurs");
                	puts("Taper: 't' pour jouer au tour par tour");
                	printf("\n\nJeu>>>>>");
                	option=getchar();
                	while(getchar()!='\n');
                	
                	  switch (option)
                	    {
                	    case 't':
                	      tourpartour();
                	      break;
                	    case 'c':
                	      chrono();
                	      break ;
                	    default :
                	      puts("Pour Quitter taper: q");
                	    break;
                	    }
                	}while(option!='q');
                
                  return EXIT_SUCCESS;
                }
                


                Ca a l'aire de fonctionner...

                EDIT: Maintenant, on peut perdre pour de vrai.
                • Partager sur Facebook
                • Partager sur Twitter
                -User:"Sais-tu où vont les mails de réclamation ?" -Admin:"/dev/null"
                Anonyme
                  15 août 2012 à 15:19:44

                  pour ta fonction nombreJoueur mets une boucle do..while ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 août 2012 à 15:23:42

                    koloce les macros ne sont pas vraiment fait pour être utilisées comme ça. :-°
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      15 août 2012 à 15:29:22

                      Ta macro est risquée :

                      #define OUIOUNON(A, B)					\
                        char option=' ';					\
                        do							\
                          {							\
                            printf("%s [o\\n]\n", A);				\
                            option=getchar();					\
                            while(getchar()!='\n');				\
                          }while(option !='n' && option!='o');		\
                      							\
                        if(option=='o') B
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 août 2012 à 15:38:05

                        Car tu t'y connais toi Pouet en préprocesseur ?
                        moi -> [.]
                        C'est pas portable ton truc koloce.

                        Citation

                        J'ai pas appris le type de retour time. Ca passe dans un printf ?


                        Je ne comprends pas trop ce que tu veux dire.
                        Sinon, je n'aime pas trop tes printf à rallonge.

                        Personne pour le niveau 4 ? :D

                        Citation : Maëlan

                        Je suis contre ce nouveau bonus : pas que ce soit compliqué à mettre en place (au contraire), mais je trouve que ça facilite vraiment trop le travail au joueur. Même plus besoin de se souvenir de l’intervalle ni de le mettre à jour mentalement, il n’a plus qu’à prendre la moyenne des deux valeurs affichées, et le jeu perd de son intérêt déjà si limité.


                        Après réflexion, je pense que t'as (attention la rîme) raison.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 août 2012 à 15:42:44

                          Citation : koloce

                          RAAAAAAAAAAAAAAAAAAAAAA.
                          L'intervalle c'était mon idée !

                          Tellement pas!
                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 août 2012 à 15:46:31

                            Citation : paraze

                            Personne pour le niveau 4 ? :D



                            Ça vient, ça vient. J‘ai eu quelques contretemps, mais je suis en plein dedans là. retenez votre soufle, mon code approche à grands pas.

                            Citation : paraze

                            Citation : Maëlan

                            Je suis contre ce nouveau bonus : pas que ce soit compliqué à mettre en place (au contraire), mais je trouve que ça facilite vraiment trop le travail au joueur. Même plus besoin de se souvenir de l’intervalle ni de le mettre à jour mentalement, il n’a plus qu’à prendre la moyenne des deux valeurs affichées, et le jeu perd de son intérêt déjà si limité.


                            Après réflexion, je pense que t'as (attention la rîme) raison.


                            Bien sûr que j’ai raison, comme Darwin. En doutais-tu ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              15 août 2012 à 15:50:38

                              Meuh non je doutais pas du tout de toi. ;)
                              Et j'attends ton code avec impatience.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                15 août 2012 à 15:52:21

                                ( C’est quoi ce lien vers ton propre profil sur le mot « tout » du dernier bonus ? )
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  15 août 2012 à 15:57:34

                                  C'est simple pourtant :

                                  Citation : Maëlan

                                  Bouh, le vilain prétexte pour faire de la pub. :p


                                  Citation : Mr21

                                  Citation : koloce

                                  RAAAAAAAAAAAAAAAAAAAAAA.
                                  L'intervalle c'était mon idée !

                                  Tellement pas!


                                  +42 :-)

                                  Bon, je me suis aperçus que les 3-4 derniers messages que j'ai posté étaient plutôt inutiles, je vais me racheter en postant bientôt mon niveau 3 (z'ai pas encore commencé). :-°
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    15 août 2012 à 16:02:31

                                    Citation : paraze

                                    Car tu t'y connais toi Pouet en préprocesseur ?

                                    moi -> [.]

                                    Pas trop, c'est juste que dans le tuto de M@teo21 il fait pas comme ça. :)
                                    pwned
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      15 août 2012 à 21:48:51

                                      Je reviens en force pour répondre aux précédents messages et faire des trolls pour les messages suivants.

                                      Dans l'ordre:

                                      Citation : tib92

                                      pour ta fonction nombreJoueur mets une boucle do..while


                                      - C'est fait.

                                      Citation : Pouet_forever

                                      koloce les macros ne sont pas vraiment fait pour être utilisées comme ça.


                                      -Mais, c'est tellement pratique de faire des macros qui part dans tous les sens.

                                      Citation : informaticienzero


                                      Ta macro est risquée :

                                      #define OUIOUNON(A, B)					\
                                        char option=' ';					\
                                        do							\
                                          {							\
                                            printf("%s [o\\n]\n", A);				\
                                            option=getchar();					\
                                            while(getchar()!='\n');				\
                                          }while(option !='n' && option!='o');		\
                                      							\
                                        if(option=='o') B
                                      

                                      -Même pas peur. Je changerais surement cette macro si je peut faire plus petit en code mais plus en fonctionnalité.

                                      Citation : paraze

                                      C'est pas portable ton truc koloce.


                                      -Et Maintenant ?

                                      Citation : paraze

                                      Je ne comprends pas trop ce que tu veux dire.


                                      -Pardon, je me suis mal exprimé. Je voualis dire quel type se cache derrière le time_t pour pouvoir utiliser un regex pour l'afficher à l'écran.

                                      Citation : paraze

                                      Sinon, je n'aime pas trop tes printf à rallonge.


                                      -Je doit vraiment utiliser des fonction de conversion + des fwrite ? Je prendrais bien volontiers des fonctions qui font le même boulot que printf. Et le retour chariot de puts qui mal approprié.

                                      Citation : paraze

                                      Personne pour le niveau 4 ?


                                      -Je finis l'intégration de tous les types de jeux.

                                      Citation : Mr21

                                      Citation : koloce

                                      RAAAAAAAAAAAAAAAAAAAAAA.
                                      L'intervalle c'était mon idée !


                                      Tellement pas!


                                      -Pourtant, pour des soucis de facilité (sur mon code) l'IA pouvait être intégré plus facilement avec cette méthode après c'était un jeu d'enfant de codé la même chose pour le joueur.


                                      Comme la version 3.4 de Gnome Shell l'émergence des applications inutiles De nouvelles fonctionnalités inutiles sont venus dans le jeu.

                                      Je prévois de revoir les macros la fonction des scores pour un classement par le nombre de tentatives, quelques corrections dans le calcule de la vie, une meilleur polyvalence de la fonction new, virer le retour chariot dans le nom des joueur et l'orthographe.

                                      Je vais surement ajouter d'autre(s) type(s) de jeu pour le plus ou moins. Si vous avez des idées, n'hésité à les poster.

                                      Voici le nouveau code:


                                      #include <stdio.h>
                                      #include <stdlib.h>
                                      #include <time.h>
                                      
                                      #if defined __APPLE__ || defined linux
                                      #include <unistd.h>
                                      #elif defined ( WIN32 ) || defined ( WIN64 )
                                      #define sleep(X) for( proposition=0; proposition <( 1000000* X );proposition++) /*Fallait pas être sur windows*/
                                      #endif
                                      
                                      #define VIE 15
                                      #define JOUEUR 5
                                      #define TAILLE_NOM 15
                                      #define JOUEUR_IA 1
                                      #define SIMPLE 0
                                      #define COOPERATE 2
                                      #define NIVEAU_COOPERATE(A,B)							\
                                      printf("Quel niveau de difficulté %s ?\nEntre 0 et 10 niveau:1\nEntre 0 et 100 niveau:2\nEntre 0 et 1000 niveau:3\n\nNiveau>>>>>", A); \
                                      scanf("%d",B);						\
                                      while(getchar()!='\n')						
                                      
                                      #define NIVEAU_SIMPLE(A) \
                                        NIVEAU_COOPERATE(A,&nouveau->diffi)
                                      
                                      #define INVERS(A,B)	      \
                                      A = A + B;		      \
                                      B = A - B;		      \
                                      A = A - B
                                      
                                      
                                      #define OUIOUNON(A, B)					\
                                        char option=' ';					\
                                        do							\
                                          {							\
                                            printf("%s [o\\n]\n", A);				\
                                            option=getchar();					\
                                            while(getchar()!='\n');				\
                                          }while(option !='n' && option!='o');		\
                                      							\
                                        if(option=='o') B
                                      
                                      
                                      typedef struct Sjoueur Sjoueur;
                                      
                                      struct Sjoueur
                                      {
                                        char nom[TAILLE_NOM];
                                        int vie;
                                        int time_all;
                                        int diffi;
                                        int nombremystere;
                                        int proposition[2];
                                      };
                                      
                                      
                                      void total_score(Sjoueur* Liste[]);
                                      
                                      
                                      int ppow(int nombre,int puissance)
                                      {
                                        int i=0;
                                        int resultat=1;
                                      
                                        for(i=1;i <= puissance;++i)
                                          resultat*=nombre;
                                      
                                        return resultat;
                                      }
                                      
                                      int tour( Sjoueur* acteur )
                                      {
                                        int proposition=0,temps=0;
                                        printf("\n\n\n\nA vous: %s \nVous avez fait %d essais plus que %d essais.\nLe nombre mystere se trouve entre %d et %d.\nNombre que vous proposez\nNombre>>>>>",(acteur->nom[0]!=0)? acteur->nom: "Ordinateur\n\nIA:-Oui maître.\n",VIE - acteur->vie,acteur->vie,acteur->proposition[0],acteur->proposition[1]);
                                        temps = (int) time(NULL);
                                      
                                        if(acteur->nom[0]!=0)
                                          {
                                        scanf("%d",&proposition);
                                        while(getchar()!='\n');
                                          }
                                        else
                                          {
                                            proposition= (acteur->proposition[0]+acteur->proposition[1])/2;
                                            printf("%d\n",proposition);
                                          }
                                        
                                      
                                        temps = time(NULL) - temps;
                                        acteur->time_all+=temps;
                                       
                                       if(proposition < acteur->nombremystere)
                                          {
                                            if(proposition < acteur->proposition[1] && proposition > acteur->proposition[0])
                                      	acteur->proposition[0]=proposition;
                                      	  
                                            acteur->vie--;
                                            puts("Ce nombre est plus grand.");
                                            sleep(1);
                                            return 1;
                                          }
                                        else if (proposition > acteur->nombremystere)
                                        {
                                          if(proposition >  acteur->proposition[0] && proposition < acteur->proposition[1])
                                      	acteur->proposition[1]=proposition;
                                          acteur->vie--;
                                          puts("Ce nombre est plus petit.");
                                          sleep(1);
                                          return 1;
                                        }
                                        
                                      
                                        return 0;
                                      }
                                      
                                      
                                      
                                      int nombreJoueur()
                                      {
                                      
                                        int nombre=JOUEUR +2;
                                        printf("combien de joueur ?\n\nJoueur>>>>>");
                                        
                                        /*Content ?*/
                                        do
                                          {
                                            scanf("%d",&nombre);
                                            while(getchar()!='\n');
                                      
                                          }while( nombre > JOUEUR );
                                      
                                      
                                        return nombre;
                                      }
                                      
                                      
                                      Sjoueur* new(const int type)
                                      {
                                      
                                        Sjoueur* nouveau= malloc(sizeof(Sjoueur));
                                      
                                        if(nouveau==NULL)
                                          {
                                            perror(NULL);
                                            exit(EXIT_FAILURE);
                                          }
                                      
                                        if( type!=JOUEUR_IA && type != (JOUEUR_IA + COOPERATE))
                                          {
                                            printf("\n\nQuel est votre nom ?\nNom>>>>>");
                                        
                                            fgets(nouveau->nom,TAILLE_NOM -1 ,stdin);
                                      
                                            if(type != COOPERATE)
                                      	{
                                      	  NIVEAU_SIMPLE("voulez-vous"); 
                                      	}
                                          }
                                        else if(type ==JOUEUR_IA || type ==(JOUEUR_IA + COOPERATE))
                                          {
                                            int i=0;
                                            for(;i < TAILLE_NOM;++i)
                                      	nouveau->nom[i]=0;
                                      
                                            if(type != (COOPERATE +JOUEUR_IA ))
                                      	{
                                      	  NIVEAU_SIMPLE("voulez vous pour l'IA");
                                      	}
                                          }
                                        nouveau->vie=VIE;
                                      
                                        nouveau->time_all=0;
                                        nouveau->proposition[0]=0;
                                        nouveau->proposition[1]=ppow(10 , nouveau->diffi);
                                        nouveau->nombremystere= rand() % nouveau->proposition[1];
                                      
                                      
                                        return nouveau;
                                      }
                                      
                                      								
                                          					      
                                      Sjoueur *getIA()
                                      {
                                      
                                        OUIOUNON("Voulez vous Jouer avec une IA ?", return new(JOUEUR_IA));
                                       
                                        return NULL;
                                      }
                                      
                                      void tourpartour()
                                      { 
                                       int nombrejoueur;
                                        Sjoueur* Liste[JOUEUR]={NULL};
                                      
                                        int i=0;
                                      
                                        nombrejoueur=nombreJoueur();
                                      
                                        for(i=0; i < nombrejoueur;++i)
                                          Liste[i]=new(SIMPLE);
                                      
                                        Liste[nombrejoueur]=getIA();
                                      
                                        if(Liste[nombrejoueur]!=NULL)
                                          nombrejoueur++;
                                      
                                        i=-1;
                                      
                                        do
                                          {
                                            i=((i+1) >= nombrejoueur)? 0:i+1;
                                            if(!(Liste[i]->vie) )
                                      	{
                                      	  puts("Vous avez Tous perdu.\n");
                                      	  break;
                                      	}
                                          }while(tour(Liste[i]));
                                      
                                        if(Liste[i]->vie)
                                          {
                                        printf("Félicitation %s\nVous avez mis %d essai pour trouver le nombre %d, le tout en %d secondes.\nCe qui fait en moyenne %d seconde par essais.\n",(Liste[i]->nom[0]!=0)? Liste[i]->nom: "Ordinateur\n\nIA:-Merci maître. Les programmes vainquront!\n\n",VIE - Liste[i]->vie,Liste[i]->nombremystere,Liste[i]->time_all, (Liste[i]->time_all / (VIE - Liste[i]->vie +1)));
                                      
                                        if(nombrejoueur!=1)
                                          puts("Tous les autres ont perdu :'(");
                                      
                                          }
                                      
                                        for(i=0;i < nombrejoueur;++i)
                                          free(Liste[i]);
                                      
                                        getchar();
                                      }
                                      
                                      void chrono()
                                      {
                                       int nombrejoueur;
                                        Sjoueur* Liste[JOUEUR]={NULL};
                                      
                                        int i=0;
                                      
                                        nombrejoueur=nombreJoueur();
                                      
                                        for(i=0; i < nombrejoueur;++i)
                                          Liste[i]=new(SIMPLE);
                                      
                                        for(i=0;i < nombrejoueur;++i)
                                          {
                                            while(tour(Liste[i]))
                                      	if( !(Liste[i]->vie) )
                                      	{
                                      	  printf("Vous avez perdu %s, dommage :'(\n\n",Liste[i]->nom);
                                      	  break;
                                      	}
                                          }
                                      
                                        total_score(Liste);
                                      
                                        for(i=0;i < nombrejoueur;++i)
                                          free(Liste[i]);
                                      
                                        getchar();
                                      
                                        total_score(Liste);
                                      }
                                      
                                      void cooperation()
                                      {
                                        int nombrejoueur=nombreJoueur();
                                      
                                        Sjoueur* Liste[JOUEUR]={NULL};
                                      
                                        Sjoueur* ALL=malloc(sizeof(Sjoueur));
                                      
                                        int i=0,y=0;
                                      
                                        if (ALL==NULL)
                                          {
                                            perror(NULL);
                                            exit(EXIT_FAILURE);
                                          }
                                      
                                      
                                        for(i=0; i < nombrejoueur;++i)
                                          Liste[i]=new(COOPERATE);
                                        
                                      
                                        while(1)
                                        {
                                          NIVEAU_COOPERATE("pour tout le monde",&ALL->diffi);
                                      
                                          OUIOUNON("Cela conviens", break);
                                          }
                                      
                                        
                                        OUIOUNON("Voulez vous intégré une IA à l'équipe ?",Liste[nombrejoueur]=new(COOPERATE + JOUEUR_IA));
                                        
                                      
                                        if(Liste[nombrejoueur]!=NULL)
                                          nombrejoueur++;
                                      
                                        ALL->vie=Liste[0]->vie;
                                        ALL->proposition[0]=0;
                                        ALL->proposition[1]=ppow(10,ALL->diffi);
                                        ALL->nombremystere= rand() % ALL->proposition[1];
                                      
                                        i=-1;
                                      
                                        do
                                          {
                                            i=((i+1) >= nombrejoueur)? 0:i+1;
                                            if(!(ALL->vie) )
                                      	{
                                      	  puts("Vous avez Tous perdu.   \n");
                                      	  break;
                                      	}
                                            
                                            for(y=0;y < TAILLE_NOM; ++y)
                                      	ALL->nom[y]=Liste[i]->nom[y];
                                      
                                          }while(tour(ALL));
                                      
                                        puts("Bravo à tout les participants:\n");
                                          
                                      
                                          for(i=0; i < nombrejoueur;++i)
                                            {
                                      	if(Liste[i]->nom[0]!=0)
                                      	  {
                                      	    printf("%s ",Liste[i]->nom);
                                      	  }
                                      	else
                                      	  {
                                      	    puts("Ordinateur\n\nIA:- Merci maître. Les humains sont bêtes comme leurs pieds. Il faut donc les aidés\n");
                                      	  }
                                            }
                                        printf("Vous remportez le mode cooperation en %d secondes avec seulement %d essais ce qui fait une moyenne %d secondes par essai\n\n",ALL->time_all,(VIE - ALL->vie),ALL->time_all /(VIE - ALL->vie));
                                      
                                      
                                        for(i=0;i < nombrejoueur;++i)
                                          free(Liste[i]);
                                      
                                        free(ALL);
                                      
                                        getchar();
                                      }
                                      
                                      
                                      int deathmatch()
                                      {
                                        puts("***********************L'ENFER VOUS ATTENDS******************************");
                                      
                                        Sjoueur* Liste[JOUEUR]={NULL};
                                      
                                        int i=0;
                                      
                                        int nombrejoueur=nombreJoueur();
                                      
                                        for(i=0; i < nombrejoueur;++i)
                                          Liste[i]=new(SIMPLE);
                                      
                                      
                                        OUIOUNON("Oserez vous affronter le diable en perssonne ?",Liste[nombrejoueur]=new(JOUEUR_IA));
                                      
                                        if(Liste[nombrejoueur]!=NULL)
                                          nombrejoueur++;
                                      
                                        for(i=0; i <nombrejoueur;++i)
                                          {
                                            if(tour(Liste[i])==0)
                                      	{
                                      	  puts("MOUHAAHHAHAHAHAHAHAHAouuuuHAHAHouuuHAHA\n\nNous avons un erreur élu !!! :-)");
                                      
                                      	  printf("%s sera épargné et pour les autres vous serez.",Liste[i]->nom);
                                      	  sleep(1);
                                      	  printf(".");
                                      	  sleep(1);
                                      	  printf(".");
                                      	  puts("CHATIIIIEEEEEERRRRRR par la loooseeeee");
                                      	  return 0;
                                      	}
                                          }
                                      
                                        int joueurrestant[JOUEUR]={0};
                                        int numero=0,bol=0;
                                        int temps=Liste[0]->time_all;
                                      
                                        do
                                          {
                                            temps=Liste[numero]->time_all;
                                            bol=0;
                                            for(i=0;i < nombrejoueur;++i)
                                      	{
                                      
                                      	  if(!(Liste[i]->vie))
                                      	    {
                                      	      joueurrestant[i]=1;
                                      	      temps=100000;
                                      	      numero=0;
                                      	    }
                                      	}
                                            
                                      
                                            for(i=0;i < nombrejoueur;++i)
                                      	{
                                      	  if(joueurrestant[i]==0)
                                      	    {
                                      			    
                                      	      if( temps > Liste[i]->time_all )
                                      		{
                                      		  temps=Liste[i]->time_all;
                                      		  numero=i;
                                      		}
                                      	      bol=1;
                                      	    }
                                      	}
                                      
                                            if(!bol)
                                      	{
                                      	  break;
                                      	}
                                      
                                          }while(tour(Liste[numero]));
                                      
                                      
                                        if(Liste[numero]->vie)
                                          {
                                            printf("Nous avon enfin notre vainqueur:\n%s\nEt pour les autres la méga looooooosee sur le podium niark niark\n",Liste[numero]->nom);
                                      
                                        
                                          for(i=0; i <nombrejoueur;++i)
                                            {
                                      	if(numero==i)
                                      	  continue;
                                      	
                                      	Liste[i]->vie=0;
                                            }
                                      
                                          total_score(Liste);
                                          }
                                        else
                                          {
                                            puts("Que des looseurrs en perspective\n Vous serez tous chatier. Oui tous chatier niark niark");
                                      
                                            total_score(Liste);
                                          }
                                      
                                          for(i=0; i <nombrejoueur;++i)
                                            free(Liste[i]);
                                      
                                      
                                          getchar();
                                      
                                          return 0;
                                      }
                                      
                                      void total_score(Sjoueur* Liste[])
                                      {
                                        /*Cacule des scores au chrono*/
                                        int nombrejoueur=0;
                                        int score[JOUEUR]={0};
                                        int buffer[JOUEUR]={0};
                                        /*int egalite[JOUEUR]={0};*/
                                        int y=0,i=0,position=0;
                                      
                                        for(i=0;Liste[i]!=NULL;++i)
                                          nombrejoueur++;
                                      
                                        for(i=0; i < nombrejoueur;++i)
                                          {
                                            if(Liste[i]->vie)
                                      	{
                                      	  score[i]=Liste[i]->time_all;
                                      	  buffer[i]=i;
                                      	}
                                            else
                                      	{
                                      	  score[i]=Liste[i]->time_all;
                                      	  buffer[i]=-i;
                                      	}
                                          }
                                      
                                      		
                                        for(i=0; i <nombrejoueur;++i)
                                          {
                                            for(y=0;y < nombrejoueur;++y)
                                      	{
                                      	  if(score[i] < score[y])
                                      	    {
                                      	      INVERS(score[i],score[y]);
                                      	      INVERS(buffer[i],buffer[y]);
                                      	    }
                                      	  else if(score[y] > score[i] && score[i] < 0)
                                      	    {
                                      	      INVERS(score[y],score[i]);
                                      	      INVERS(buffer[i],buffer[y]);
                                      	    }
                                      
                                      	    
                                      	}
                                            	  
                                          }
                                      #define BUFFER (buffer[i]<0)?buffer[i]*-1:buffer[i]
                                      
                                      
                                        for(i=0; i <nombrejoueur;++i)
                                          {
                                            
                                            if(!Liste[BUFFER]->vie|| buffer[i] < 0 )
                                      	continue;
                                      
                                            position++;
                                            printf("En place n°%d nous avons %s avec un temps %d secondes total et %d seconde par tour en moyenne. Bravo !\n\n",position,Liste[buffer[i]]->nom,Liste[buffer[i]]->time_all,(int)(Liste[buffer[i]]->time_all /(VIE - Liste[buffer[i]]->vie +1 )));
                                          }
                                      
                                        for(i=0; i <nombrejoueur;++i)
                                          {
                                            if(Liste[BUFFER]->vie|| buffer[i] > 0)
                                      	continue;
                                            
                                            position++;
                                            printf("La méga loose pour %s en°%d position, avec un score ridicule de %d secondes qui n'a pas réussi à finir après %d essais le jeu TROLOLOL?\n",Liste[BUFFER]->nom,position,Liste[BUFFER]->time_all,VIE);
                                          }
                                      #undef BUFFER
                                      }
                                      
                                      
                                      int main()
                                      {
                                          srand(time(NULL));
                                      
                                          puts("Bienvenu dans le jeu du plus ou moins.");
                                      
                                          char option=0;
                                          do
                                            {
                                      	
                                      	puts("Il existe trois types de jeux:");
                                      	puts("\n");
                                      	puts("Chrono: Chaque joueur est chronométré celui qui fait le moins de temps en 15 essais à gagner");
                                      	puts("Taper: 'c' pour jouer au Chrono\n\n");
                                      	puts("Tour par Tour: Chacun leur tour les joueurs doivent trouver le nombre mystere.");
                                      	puts("Le plus rapide a trouver le nombre mystere élimine les autres joueurs");
                                      	puts("Taper: 't' pour jouer au tour par tour\n\n");
                                      	puts("Cooperation: Chaque joueur possède le même nombre mystere , faites équipe pour trouver le nombre mystere");
                                      	puts("Taper: 'p' pour joueur au mode coopération\n\n");
                                      	puts("Deathmatch: Combat à mort pas de pitié pour les adversaires.\nChaque tour est chronomètré et s'ajoute à votre temps total.\nLe premier tour définis votre temps.\nLes autres tours, l'ordre d'apparition dépends du temps total de chaque joueur.\nSi le joueur à le temps le plus faible alors, il peut jouer son tours.");
                                      	puts("Taper: 'd' Pour dégomer le clavier"); 
                                      	printf("\n\nJeu>>>>>");
                                      	option=getchar();
                                      	while(getchar()!='\n');
                                      	
                                      	  switch (option)
                                      	    {
                                      	    case 't':
                                      	      tourpartour();
                                      	      break;
                                      	    case 'c':
                                      	      chrono();
                                      	      break ;
                                      	    case 'p':
                                      	      cooperation();
                                      	      break;
                                      	    case 'd':
                                      	      deathmatch();
                                      	      break;
                                      	    case 'q':
                                      	      break;
                                      	    default :
                                      	      puts("Pour Quitter taper: entrer et q");
                                      	      while(getchar()!='\n');
                                      	    break;
                                      	    }
                                      	}while(option!='q');
                                      
                                        return EXIT_SUCCESS;
                                      }
                                      



                                      On arrive presque à 600 lignes de code pour un plus ou moins tout en essayant un minimum de ne pas répéter le code. Le tout sans brouillon ,sans copier le code des autres et surtout dans un unique fichier.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      -User:"Sais-tu où vont les mails de réclamation ?" -Admin:"/dev/null"
                                      Anonyme
                                        15 août 2012 à 23:01:16

                                        Tu peux pas utiliser une fonction de Windows au lieu de boucler comme un porc à l'ancienne ?
                                        (La dernière fois que je gérais le temps comme ça, c'était sur un TO7)
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          16 août 2012 à 2:57:54

                                          Eh ben alors là je suis vraiment étonné que le + ou - génère un intérêt tellement énorme chez les pseudos que je connaît bien sur le fofo du langage C. Ainsi je ne suis pas le seul non débutant qui trouve ce jeu mythique \o/
                                          Bon pour ma part je suis tombé sur ce topic complètement par hasard je crois via une signature mais je suis pas sûr.
                                          Bon en gros moi j'ai décidé de faire un plus ou moins au rendu final le meilleur possible quitte à avoir un code très lourd. C'est un choix voilà tout :)
                                          Bon je vais par contre me limiter à la console dont je suis tombé amoureux :p
                                          En gros voici ce qui est prévu :
                                          • Tous les bonus proposés sauf la SDL. Pour ce qui est de l'IA j'en ferait juste une simple pas une IA par apprentissage (eh oui c'est le joueur qui va rentrer le nombre à deviner)
                                          • Un texte haut en couleur.
                                          • Gestion des accents
                                          • Malgré les contre indications de certains vu que je suis orienté code lourd pour beau rendu je vais utiliser l'effacement de la console.
                                          • En bonus je pense que je vais peut-être mettre des musiques mais ça c'est pas sûr...

                                          Bon pour le moment moi->dodo();
                                          Je commencerai demain je vous posterai le code une fois fini mais je vous dit à l'avance que je doute passer plus d'une journée dessus d'où l'IA un peu simplette (le joueur n'aura qu'à demander à l'IA de deviner 100 à chaque fois pour un nombre entre 1 et 100 et il massacrera les stats de l'IA).
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          qry = 2b || !2b
                                          Anonyme
                                            16 août 2012 à 9:48:49

                                            Citation

                                            moi->dodo();


                                            Ça serait pas du C++ ça ? :D
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              16 août 2012 à 9:59:48

                                              Citation : MicroJoe

                                              Citation

                                              moi->dodo();


                                              Ça serait pas du C++ ça ? :D

                                              Ça peut également être du C ;)
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

                                                16 août 2012 à 10:16:20

                                                Non mais koloce les macros c'pas fait pour ça. ^^ Là ton code est tout sauf réutilisable. Et c'est mon affichage qui déconne ou le code est mal indenté ?


                                                [Troll] ah mais c'est du style GNU, tout s'explique ! [/Troll]
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Staff désormais retraité.
                                                  16 août 2012 à 10:20:38

                                                  Eh bien tsunami33, ça en fait du boulot. :D

                                                  Citation

                                                  - Tous les bonus proposés sauf la SDL. Pour ce qui est de l'IA j'en ferait juste une simple pas une IA par apprentissage
                                                  - d'où l'IA un peu simplette (le joueur n'aura qu'à demander à l'IA de deviner 100 à chaque fois pour un nombre entre 1 et 100 et il massacrera les stats de l'IA).


                                                  Qu'entends-tu pas IA par apprentissage ? Une IA qui commencerait à proposer des nombres aléatoires puis qui affinerait ses choix pour finir à tenter à chaque fois la moyenne du min et du max courant ?
                                                  Et je ne comprends pas trop quand tu dis "le joueur n'aura qu'à demander à l'IA de deviner 100 à chaque fois pour un nombre entre 1 et 100 et il massacrera les stats de l'IA" avec ton IA simplette, pourquoi l'IA proposerait 100 au début de la partie et non 50 ?
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    16 août 2012 à 14:34:48

                                                    En gros voilà comment ça se passe. Le joueur entre le nombre que l'IA doit deviner.
                                                    L'IA va commencer par demander si c'est 50. Si c'est plus il demandera 75, si c'est moins il demandera 25 et si c'est égal ça s'arrête. Le problème c'est qu'avec cette technique de division par deux si le joueur rentre 100 à chaque fois l'IA mettra à chaque fois un maximum de coups à trouver le nombre. Une IA par apprentissage aurai vu que si le gars a déjà proposé 100 trois fois de suite alors le premier choix à proposer le coup suivant sera 100. Ainsi elle aurait en théorie de meilleurs stats. Le problème c'est qu'il faudrait aussi gérer le fait que l'utilisateur rentre 0 puis 100 puis 0 puis 100, etc...
                                                    Il se trouve qu'un truc comme ça c'est compliqué donc je vais simplement faire une IA classique voilà tout :)
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    qry = 2b || !2b
                                                      16 août 2012 à 14:45:47

                                                      À la limite tu fais une IA "aventureuse" qui teste 90 puis 10 (si seulement le nombre est inférieur à 90 bien sûr); ensuite, tu fais une IA classique. ^^

                                                      J'ai réussis à parser un fichier xml (pour un autre projet) ! :D





                                                      Ben quoi... il y a une première à tout, non ?
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        16 août 2012 à 14:57:51

                                                        À propos de ça (de l’IA du +/-, pas du parsage du XML), je me demandais si il n’y avait pas moyen de faire mieux qu’une bête dichotomie au milieu (genre, déplacer la « dichotomie » au 1er tiers — ça me paraît louche, mais je n’y ai pas encore réfléchi trop longtemps, je me demande si on ne pourrait pas diminuer le nombre max. de coups à gauche sans augmenter celui à droite).
                                                        Sans parler d’apprentissage, bien sûr.
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          16 août 2012 à 15:05:24

                                                          Uhm, si on suit le fait que l'utilisateur a entré un nombre au hasard (sinon ça devient de l'étude de comportementalisme !), il n'y a, AMHA, pas moyen d'optimiser l'algo dans le pire des cas. J'veux dire, quel que soit le résultat, tu élimineras normalement le même nombre de solutions, donc tu ne peux pas faire mieux. Après, tu peux faire effectivement plusieurs "niveaux d'IA" en essayant d'éliminer plus de possibilités d'un coup, mais bon, du moment que le tirage est parfaitement aléatoire, y a pas moyen de s'échapper de la proportionnalité à première vue. (après, je ne suis pas un spécialiste des IA de plus ou moins, hein)
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Staff désormais retraité.
                                                            16 août 2012 à 15:08:47

                                                            En considérant que le nombre est tiré aléatoirement, il n'y a pas de meilleures solutions que la dichotomie. Ca permet de converger assez rapidement avec une certitude d'avoir le résultat en un nombre de coups réduit. :)
                                                            Jouer avec des probas et tout, je ne pense pas que ça serve, comme c'est de l'aléatoire 'pur'. :)
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              16 août 2012 à 16:39:12

                                                              Ben justement tout dépend. Dans mon cas c'est l'utilisateur qui rentre le nombre donc tous les nombres n'ont pas une équiprobabilité d'apparaître. Une étude de comportementalisme sur l'utilisateur dans ce cas là.
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter
                                                              qry = 2b || !2b

                                                              zPlus

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown