"pierre"feuille"ciseau"

Bonjour,
voila j'aimerais faire un "pierre"feuille"ciseau" en C je m'explique

prenons 2 lettres a et b

si a=1 "pierre" b=1"piere" donc egalité
si a=2"papier" b=1"pierre" donc a gagne
si a=3"ciseau" b=2"papier"donc a gagne

et pour avoir ses nombres ba justement c'est le probleme
un nombre donner aleatoirement lorsqu'on appuie sur entrée par exemple

sa parais compliquer ou tout simplement mal expliquer ^^
Configuration: Windows vista
Firefox 2.0.0.9
...

11 réponses

  1. Mais bon sang... si j'étais pessimiste, je dirais que voilà un ramassis d'absurdités... toutes les réponses pertinentes dépréciées, et les idioties en tête de liste...
    +1 pour geokie et fiddy

    C'est possible de simler le hasard, mais pas vraiment de le créer. Effectivement, on parle de nombres pseudo-aléatoires. Mais en fait, c'est la définition même du hasard qui constitue une polémique. En mathématiques, on peut qualifié de hasardeux ce qui possède des propriétés chaotiques, bref un système (dynamique) instable, et donc difficilement prédictible.

    Alors, dans ce cas, c'est en effet une bonne chose d'utiliser srand(time(NULL));
    et rand().

    pour le code, qui est véritablement simplissime, voici ce à quoi le résultat devrait ressembler :
    #include <stdlib.h> 
    #include <stdio.h> 
    #include <string.h> 
    #include <time.h> 
    
    #define LANG_COUNT 2 
    #define OBJECT_COUNT 3 
    
    int main(int argc, char*argv[]) 
    { 
        if (argc != 2) 
        { 
            printf("Using : <object choice> (\"?\" to see differents choices)\n"); 
            return -1; 
        } 
    
        srand(time(NULL)); 
        const char* choices[] = 
        { 
            "rock", 
            "roche", 
            "paper", 
            "papier", 
            "scissors", 
            "ciseaux" 
        }; 
    
        const char gamesStates[][OBJECT_COUNT] = 
        { 
            {1,0,1}, 
            {1,1,0}, 
            {0,1,1} 
        }; 
    
        long i, ii, iii; 
        if (!strcmp("?", argv[1])) 
        { 
            for (i=0; i<OBJECT_COUNT; i++) 
            { 
                for(ii=0; ii<LANG_COUNT-1; ii++) 
                    printf("%s/", choices[i*LANG_COUNT+ii]); 
                printf("%s, loose against : \n", choices[i*LANG_COUNT+ii]); 
    
                for(ii=0; ii<OBJECT_COUNT; ii++) 
                { 
                    if (!gamesStates[i][ii]) 
                    { 
                        printf("-"); 
                        for(iii=0; iii<LANG_COUNT-1; iii++) 
                            printf("%s/", choices[ii*LANG_COUNT+iii]); 
                        printf("%s\n", choices[ii*LANG_COUNT+iii]); 
                    } 
                } 
            } 
    
            return 0; 
        } 
    
        for (i=0; strcmp(choices[i], argv[1]) && i<OBJECT_COUNT * LANG_COUNT; i++); 
    
        if (i >= OBJECT_COUNT * LANG_COUNT) 
        { 
            printf("There exists no objects choices with name %s.", argv[1]); 
            return -1; 
        } 
    
        i /= LANG_COUNT; 
    
        long computerChoice = rand() % OBJECT_COUNT; 
    
        printf("You choosed : "); 
        for(ii=0; ii<LANG_COUNT-1; ii++) 
                    printf("%s/", choices[i*LANG_COUNT+ii]); 
                printf("%s\n", choices[i*LANG_COUNT+ii]); 
    
        printf("Computer choosed : "); 
        for(ii=0; ii<LANG_COUNT-1; ii++) 
                    printf("%s/", choices[computerChoice*LANG_COUNT+ii]); 
                printf("%s...\n", choices[computerChoice*LANG_COUNT+ii]); 
    
        switch(gamesStates[i][computerChoice]-gamesStates[computerChoice][i]) 
        { 
            case 1: 
                printf("You win!\n"); 
            break; 
    
            case 0: 
                printf("The game is null.\n"); 
            break; 
    
            case -1: 
                printf("You loose.\n"); 
            break; 
        } 
        return 0; 
    } 
    
    1. Pile poil ce que je cherchais, je regarde ça.
      Le post est ancien, mais merci !
  2. Contributeur
    Salut,

    Si tu veux le faire contre la machine : tu lui fais choisir un nombre au hasard : srand(time(NULL)); 1+ (float)rand() /RAND_MAX * 3;
    Ensuite, toi tu choisis, en appuyant sur la touche 1 2 ou 3.
    Et enfin tu affiches la réponse de l'ordinateur, qui regarde qui est le gagnant.

    Je te laisse réfléchir pour la programmation, elle n'est pas très dur. Mais reviens, si tu as besoin d'aide ;)

    Cdt
    1. Bonjour.
      On ne peux pas générer de nombres aléatoires en informatique, mais on peux se servir de l'horloge système pour en générer des pseudo-aléatoires :
      #include <time.h>
      srand(time(NULL));
      1. Franchement je n'ai rien compris les amis ><"
        expliquer un peu plus clairement svp :)
        1. Moi j'ai adopté une technique : je vise toujours la feuille, la souris prête à cliquer sur le ciseau ! xD
          Il faut te mettre un rythme dans la tête, et au moment ou le "rythme" résonne dans ta tête tu appuie. ^^
          Perso, te risque pas à faire du hasard ou à faire l " défi " si t'as gagner, tu fais abandonner après.
          1. pliiiiiiiiiiiiiiiiiiiiiiiiiiiizz je veut fair l'attitude pierre feuille ciseaux
            1. L'aléatoire en informatique n'existe pas ! ( c'est phisique )
              Je te conseille de donné un ordre des gagnient ( 1 : 1-2, 2: 3-1; 3 : 22, 4: 3-2, 5:.... ) et au bout de 100 ( par ex ) sa recommence a 1....
              Bon pour le script c'est pas trop conpliquer...
              Fin jler pas sur moi ^^'

              Mais bon.
              plus x'=)