IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Jeu de balle rebondissante


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 20
    Points
    20
    Par défaut Jeu de balle rebondissante
    Bonsoir !

    Je suis nouveau ici J'aime bien ce site !

    J'ai besoin de votre aide dans cet exercice : moi je suis encore bloqué au 1er niveau , c'est facile ! Ne soyez pas choqué mais j'ai un petit problème , je ne sais pas ou exactement donc voila l’énoncé :

    On souhaite réaliser un programme qui permettrait de faire rebondir une balle sur les bords de l'écran. Ce jeu contient deux niveaux : un niveau avec un écran à une dimension et un niveau avec un écran à deux dimensions.

    La balle doit pouvoir rebondir sur un écran (tableau unidimensionnel) suivant le niveau choisi :

    - Si L’utilisateur a choisi le premier niveau, la balle qui est symbolisée par le caractère 'O' démarre à la case 0 et le but est d’arriver à la case finale. L’application lui demande de choisir le pas de rebondissement(entre 1 et 3) (s’il choisit 2 par exemple, la balle avancera de deux cases sur l’écran). Sachant que l’application a défini aléatoirement deux cases piège , si la balle arrive dans ces cases après avoir avancé, la balle reviendra à la case de départ et le joueur recommence. Sinon la balle continue d’avancer. Il a le droit de rejouer 3 fois sinon il perd.

    - Si l’utilisateur a choisi le deuxième niveau, La balle doit pouvoir rebondir sur un écran (tableau multidimensionnel) . Afin de faciliter la programmation, on rajoute une couronne d'étoiles qui permettra de simplifier les tests lorsque la balle arrivera sur un bord .

    La balle, qui est symbolisée par le caractère 'O' démarre à la position [0;0]. Elle part suivant un vecteur (abscisse et d'ordonnée) déterminé par l’utilisateur. Le but est d’arriver à la case finale [7,7] sans tomber dans l’une des quatre cases pièges qui sont prédéfinis aléatoirement par l’application. Comme le premier niveau, si la balle arrive

    dans une case piège, la balle reviendra à la case de départ et le joueur recommence et Il a le droit de rejouer 3 fois sinon il perd.¨Lorsqu'elle arrive sur un bord vertical, il suffit d'inverser le sens de déplacement selon l'axe des ordonnées. De même, si la balle arrive sur un bord horizontal, on inverse le sens du déplacement selon l'axe des abscisses.

    et voila ce que j'ai réalisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int main()
    {int niv,p1,p2,xp1,yp1,xp2,yp2,xp3,yp3,xp4,yp4,xb,yb,nb,k,i=0,j=0;//niv pour dire niveau,p pour dire piege et b pour dire balle
       char t[8];
       char t1[10][10];
     
       t[0]='O';
     
     printf("taper 1 si vous voulez le 1er niveau sinon 2 pour le niveau 2 \n");
     scanf("%d",&niv);
     switch (niv)
    {
     
     case 1 :
    srand(time(NULL));
       p1=(rand()%8);
       p2=(rand()%8);
       printf("les cases pieges sont : %d et %d\n",p1,p2);
     
      while (j<3)
      {
     
        while (((i!= p1)||(i!=p2))&&(i<8))
           {
          t[i]=' '; // ici on efface la case courante
     
     do
     {
         printf("entrer le nombre de pas \n");
         scanf("%d",&nb);
     }while (((nb<1)||(nb>3))&&(i+nb<8));
     
     printf("la balle saute de %d case(s) \n",nb);
     i+=nb;
    t[i] = 'O';//ici on remet le 'O' juste avant l'affichage
     
    //affichage du tableau
    for(k=0; k<8; k++)
    {
         printf( "%c |",t[k]);
    }
     
        getch();
     
     
           if (i==7) printf("Vous avez gagne ! Bravo ! \n");
           }
    if ((i==p1)||(i==p2)) printf("\n vous avez perdu , essayer encore ! il vous reste %d tentatives \n",2-j);
     
     
       j++;
      }
     
      break;
     case 2 :
     
    for (i=0;i<10;i++)
     
         {
    for (j=0;j<10;j++)
         {
             t1[0][j]='*';
             t1[9][j]='*';
     
     
             t1[i][0]='*';
             t1[i][9]='*';
             t1[0][0]='O';
     
         }
         }
         xp1=(rand()%8);
     
      yp1=(rand()%8);
       xp2=(rand()%8);
     
       yp2=(rand()%8);
       xp3=(rand()%8);
     
      yp3=(rand()%8);
     
      xp4=(rand()%8);
     
      yp4=(rand()%8);
     
     printf("les cases pieges sont de coordonnees: (%d,%d),(%d,%d),(%d,%d) et (%d,%d) \n",xp1,yp1,xp2,yp2,xp3,yp3,xp4,yp4);
      while (j<3)
      {
     
        while ((((i!=xp1)&&(j!=yp1))||((i!=xp2)&&(j!=yp2))||((i!=xp3)&&(j!=yp3))|((i!=xp4)&&(j!=yp4)))&&((i<8)&&(j<8)))
           {
           t1[8][8]=' ';
               t1[i][j]='O';
     
     
          do
           {
               printf("\n entrer les coordonnees de la balle \n");
               scanf("%d%d",&xb,&yb);
           }
     
    while (((j<0)||(j>8))&&(i<0)||(i>8));
    /*if ((i==0)||(i==9))
           {
     else if ((j==0)||(j==9)) */
     
    //affichage du tableau
         for(i=0; i<8; i++)
            {for (j=0;j<10;j++)
            {
                printf( "%c |",t1[i][j]);
            }
           }
     
        getch();
     
         if ((i==8)&&(j==8)) printf("Vous avez gagne ! Bravo ! \n");
           }
    if (((i==xp1)&&(j==yp1))||((i==xp2)&&(j==yp2))||((i==xp3)&&(j==yp3))|((i==xp4)&&(j==yp4))) printf("\n vous avez perdu , essayer encore ! il vous reste %d tentatives \n",2-j);
     
     
       j++;
      }
     
      break;
     
        break;
     
    }
     
     
     
     
     
     
    return 0;
    }
    On commence par le niveau 1 et puis on passe au 2eme

    J’espère que vous m'aidiez le plutôt possible ! et merci d'avance !!!

    Cordialement

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Euh, quelle est ta question exactement?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 20
    Points
    20
    Par défaut
    Bonsoir !
    Merci pour votre attention
    le programme marche lorsque je gagne mais pourquoi lorsque je perd , le jeu ne se répète pas alors que je l'ai bien mis dans une boucle while ?

    en fait , dans l'exercice , il y'a deux cases pièges , j'ai écrit 2 fois la formule qui donne un nombre aléatoire mais pourquoi j'ai qu'une seule case affichée a la console ?
    et puis il y'a d'autres problèmes ...exécutez le programme et vous allez voir !
    j’espère que vous m'aidiez a les résoudre ! il faut que je le termine le plutôt possible !
    Merci
    Cordialement

  4. #4
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Bonjour et bienvenue !

    Sans doute que le prof n'a pas encore parlé des fonctions.

    Quelques suggestions :
    • Un seul srand(time(NULL)) suffit.
    • Penser à déclarer les variables au plus proche de là où elles sont utilisées et leur donner un nom plus subjectif.
    • Arranger l'indentation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while()
    {
        while()
        {
            ...
        }
        do
        {
            ...
        } while(...)
    }
    Avec un code mieux organisé on pourra plus facilement s'y retrouver et donc t'aider.

    Citation Envoyé par hi-1995 Voir le message
    et puis il y'a d'autres problèmes ...exécutez le programme et vous allez voir !
    C'est à toi de nous dire ce qui ne va pas.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 20
    Points
    20
    Par défaut
    Bonsoir !
    Merci pour votre aide oui on n'a pas encore vu les fonctions ...
    il y'a un problème au contrôle de saisie pour le nombre de pas , je ne sais pas pourquoi il acceptent n'importe quelle valeur et pourtant j'ai mis des conditions raisonnables !
    ensuite j'ai bien vérifié avec les accolades , normalement , ils sont bien dans leurs place ...
    en plus , lorsque je perd le jeu ne s’arrête pas ! et lorsque je gagne le programme s’arrête et le message que j'ai écrit "BRAVO ! vous avez gagné ! " n’apparaît pas alors qu'il est bien dans la boucle !!!
    s'il vous plait aidez moi a résoudre ces problèmes
    J’apprécie vraiment
    cordialement

  6. #6
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Le j me semble être la cause de pas mal de problèmes.
    Il sert plusieurs fois, à plusieurs choses.

    N'hésites pas à ajouter des variables, il en faut une pour chaque élément.

    Voici ton code indenté plus proprement, j'ai commencé à redistribuer et renommer les variables, je te laisses faire le reste, je pense que tu verras par toi même d'où vient le problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    //niv pour dire niveau,p pour dire piege et b pour dire balle
    int main()
    {
        int xp1,yp1,xp2,yp2,xp3,yp3,xp4,yp4,xb,yb,k;
     
        srand(time(NULL));
        int p1 = rand()%8;
        int p2 = rand()%8;
     
        printf("%d %d \n",p1,p2);
        printf("taper 1 si vous voulez le 1er niveau sinon 2 pour le niveau 2 \n");
     
        int niveau = 0;//On initialise(imagine que ne nombre non initialisé soit 1 ou 2 !)
        scanf("%d",&niveau);
        if(niveau == 1)//Un if est plus pratique ici
        {
            int j = 0;// j c'est quoi ?
            while(j<3)
            {
                int i = 0;
     
                char tableau[8];//Le declarer ici permet
                tableau[0]='O';//de le redefinir à chaque tour
     
                while(((i!= p1)||(i!=p2))&&(i<8))
                {
                    tableau[i]='*'; // ici on efface la case courante
                    int pas;
                    do
                    {
                        printf("entrer le nombre de pas \n");
                        scanf("%d",&pas);
                    } while(((pas<1)||(pas>3))&&(i+pas<8));
     
                    printf("la balle saute de %d case(s) \n",pas);
                    i+=pas;
                    tableau[i] = 'O';//ici on remet le 'O' juste avant l'affichage
                    //affichage du tableau
                    for(k=0; k<8; k++)
                    {
                         printf( "%c |",tableau[k]);
                    }
                    getch();
                    if (i==7) printf("Vous avez gagne ! Bravo ! \n");
                }
                if ((i==p1)||(i==p2))
                    printf("\n vous avez perdu , essayer encore ! il vous reste %d tentatives \n",2-j);
                j++;
            }
        }
        else if(niveau == 2)
        {
            char t1[10][10];
            int j = 0;
            int i = 0;
            for (i=0;i<10;i++)
            {
                int j = 0;
                for (j=0;j<10;j++)
                {
                    t1[0][j]='*';
                    t1[9][j]='*';
                    t1[i][0]='*';
                    t1[i][9]='*';
                    t1[0][0]='O';
                }
            }
            xp1=(rand()%8);
            yp1=(rand()%8);
            xp2=(rand()%8);
            yp2=(rand()%8);
            xp3=(rand()%8);
            yp3=(rand()%8);
            xp4=(rand()%8);
            yp4=(rand()%8);
            while (j<3)
            {
                while((((i!=xp1)&&(j!=yp1))||((i!=xp2)&&(j!=yp2))||((i!=xp3)&&(j!=yp3))|((i!=xp4)&&(j!=yp4)))&&((i<8)&&(j<8)))
                {
                    t1[8][8]='*';
                    t1[i][j]='O';
     
                    do
                    {
                       printf("\n entrer les coordonnees de la balle \n");
                       scanf("%d%d",&xb,&yb);
                    } while (((j<0)||(j>8))&&((i<0)||(i>8)));
     
                    //affichage du tableau
                    for(i=0; i<8; i++)
                    {
                        for (j=0;j<10;j++)
                        {
                            printf( "%c |",t1[i][j]);
                        }
                    }
                    getch();
     
                    if((i==8)&&(j==8))
                        printf("Vous avez gagne ! Bravo ! \n");
                }
                if(((i==xp1)&&(j==yp1))||((i==xp2)&&(j==yp2))||((i==xp3)&&(j==yp3))|((i==xp4)&&(j==yp4)))
                    printf("\n vous avez perdu , essayer encore ! il vous reste %d tentatives \n",2-j);
                j++;
            }
        }
        return 0;
    }
    Aussi initialise la variable qui sert à for() à l'interieur d'elle même, ça évitera d'en trimbaler partout.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(int nombre_de_tour = 0; nombre_de_tour < tour_max; nombre_de_tour++)
    {
       ...
    }
    Ce qui suit non plus n'est pas l'idéal, le mieux est de créer une variable bool pour savoir quand sortir de la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while(((i!= p1)||(i!=p2))&&(i<8))
    {
        ...
    }
     
    bool rester = true;
    while(rester)
    {
        ...
        if(...)
            rester = false;
    }
    editdésolé pour les erreurs.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 20
    Points
    20
    Par défaut
    Merci pour votre aide !
    mais on n'a pas encore vu les booléens ...ensuite j'ai changer les noms des variables , Pour le j<3, j pour dire tentative,
    j'ai essayé de changer son nom mai il y'a un probleme lorsque j'ai voulu ajouter une variable que j'ai appelé "tentative", j'ai eu un problème d'affichage !! au tableau , j'ai pas seulement O , j'ai d'autres caractères , alors j'ai décidé de laisser le j .. c'est mieux mais..j'ai un problème au contrôle de saisie , pourquoi il accepte n'importe quelle valeur alors que j'ai mis des conditions raisonnables ? bon voila le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int main()
    {int niveau,p1,p2,xp1,yp1,xp2,yp2,xp3,yp3,xp4,yp4,xb,yb,pas,k,i=0,j=0;//p pour dire piege et b pour dire balle
       char t[8];
       char t1[10][10];
     
       t[0]='O';
     
     printf("taper 1 si vous voulez le 1er niveau sinon 2 pour le niveau 2 \n");
     scanf("%d",&niveau);
     switch (niveau)
    {
     
     case 1 :
    srand(time(NULL));
       p1=(rand()%8);
       p2=(rand()%8);
       printf("les cases pieges sont : %d et %d\n",p1,p2);
     
      while (j<3) //on a 3 tentatives
      {
     
        while (((i!= p1)||(i!=p2))&&(i<8))
           {
          t[i]=' '; // ici on efface la case courante
     
     do
     {
         printf("entrer le nombre de pas \n");
         scanf("%d",&pas);
     }while (((pas<1)||(pas>3))&&(i+pas<8));
     
     printf("la balle saute de %d case(s) \n",pas);
     i+=pas;
    t[i] = 'O';//ici on remet le 'O' juste avant l'affichage
     
    //affichage du tableau
    for(k=0; k<8; k++)
    {
         printf( "%c |",t[k]);
    }
     
        getch();
     
     
           if (i==7) printf("Vous avez gagne ! Bravo ! \n");
           }
    if ((i==p1)||(i==p2)) printf("\n vous avez perdu , essayer encore ! il vous reste %d tentatives \n",2-j);
     
     
       j++;
      }
     
      break;
     case 2 :
     
    for (i=0;i<10;i++)
     
         {
    for (j=0;j<10;j++)
         {
             t1[0][j]='*';
             t1[9][j]='*';
     
     
             t1[i][0]='*';
             t1[i][9]='*';
             t1[0][0]='O';
     
         }
         }
         xp1=(rand()%8);
     
      yp1=(rand()%8);
       xp2=(rand()%8);
     
       yp2=(rand()%8);
       xp3=(rand()%8);
     
      yp3=(rand()%8);
     
      xp4=(rand()%8);
     
      yp4=(rand()%8);
     
     printf("les cases pieges sont de coordonnees: (%d,%d),(%d,%d),(%d,%d) et (%d,%d) \n",xp1,yp1,xp2,yp2,xp3,yp3,xp4,yp4);
      while (j<3)
      {
     
        while ((((i!=xp1)&&(j!=yp1))||((i!=xp2)&&(j!=yp2))||((i!=xp3)&&(j!=yp3))|((i!=xp4)&&(j!=yp4)))&&((i<8)&&(j<8)))
           {
           t1[8][8]=' ';
               t1[i][j]='O';
     
     
          do
           {
               printf("\n entrer les coordonnees de la balle \n");
               scanf("%d%d",&xb,&yb);
           }
     
    while (((j<0)||(j>8))&&(i<0)||(i>8));
    /*if ((i==0)||(i==9))
           {
     else if ((j==0)||(j==9)) */
     
    //affichage du tableau
         for(i=0; i<8; i++)
            {for (j=0;j<10;j++)
            {
                printf( "%c |",t1[i][j]);
            }
           }
     
        getch();
     
         if ((i==8)&&(j==8)) printf("Vous avez gagne ! Bravo ! \n");
           }
    if (((i==xp1)&&(j==yp1))||((i==xp2)&&(j==yp2))||((i==xp3)&&(j==yp3))|((i==xp4)&&(j==yp4))) printf("\n vous avez perdu , essayer encore ! il vous reste %d tentatives \n",2-j);
     
     
       j++;
      }
     
      break;
     
        break;
     
    }
     
     
     
     
    return 0;
    }
    Merci bien ! j’apprécie vraiment !
    Cordialement

  8. #8
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(pas<1 || pas>3 || i+pas>=8);

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 20
    Points
    20
    Par défaut
    OUI , ca marche maintenant lorsque je gagne !
    mais lorsque je perd , le programme ne m'affiche pas que j'ai perdu !!! il me demande encore de nombre de pas vraiment bizarre et pourtant j'ai mis la condition if ((i==p1)||(i==p2)) p1 et p2 pour dire les pieges !!!
    Merci bien monsieur!
    j’apprécie bien votre aide ! c'est très gentil !!!
    Cordialement

  10. #10
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(i==p1 || i==p2 || j>=3)

  11. #11
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par PilloBuenaGente Voir le message
    Aussi initialise la variable qui sert à for() à l'interieur d'elle même, ça évitera d'en trimbaler partout.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(int nombre_de_tour = 0; nombre_de_tour < tour_max; nombre_de_tour++)
    {
       ...
    }
    Ce qui suit non plus n'est pas l'idéal, le mieux est de créer une variable bool pour savoir quand sortir de la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while(((i!= p1)||(i!=p2))&&(i<8))
    {
        ...
    }
     
    bool rester = true;
    while(rester)
    {
        ...
        if(...)
            rester = false;
    }
    Attention au mélange des genres . Le int dans la boucle for ainsi que bool rester=true;, c'est en C++. En C il n'est pas permis la déclaration de la variable dans le for();. Pour le type bool tu n'as pas trop le choix. Il faut le définir si tu tiens à l'utiliser tel quel en C.

  12. #12
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Merci Gerald3d, désolé pour la confusion

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 20
    Points
    20
    Par défaut
    C'est pas grave
    OUI ! merci bien a vous deux ! effectivement lorsque j'ai essayee d'introduire la variable bool , j'ai eu un probleme de compilation alors je l'ai enlevee car on l'a pas encore vu !
    J'ai modifiee la condition if(i==p1 || i==p2 || j>=3) , lorsque je tombe dans la case piege , il me dit que j'ai perdu mais le programme ne se repete pas ! alors que j'ai 3 tentatives , et je l'ai bien mis dans l'accolade du while (j<3) !!!
    Pourquoi ?
    Cordialement

  14. #14
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Y a pas mal de conditions dans ces boucles

    Le mieux est d'écrire ce que l'on veut en toute lettre :

    nombre_de_tours = 0
    piège_1 = rand
    piège_2 = rand
    max_tour = 3
    pos_gagnante = 7(?)
    pos_joueur = 0

    tant que le nombre de tour n'est pas dépasser
    {
    jouer
    nombre_de_tours + 1
    si pos_joueur egale piège_1 ou piège_2 -> pos_joueur = 0
    si nombre_de_tours est superieur à max_tour -> perdu
    si pos_joueur égale à pos_gagnante -> gagné (mettre nombre_de_tours à 3(max_tour) pour sortir de la première boucle)
    }

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 20
    Points
    20
    Par défaut
    Mais c'est ce que j'ai fait ! mais sauf que je l'ai fait dans un tableau et le nom de variable est un peu différent !!!
    Normalement ça devrait marcher ! j'ai passé beaucoup de temps sur cet exercice et il n'est pas encore terminé

  16. #16
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Un truc qui ce rapprocherait de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
        //NIVEAU 1
            int j = 0;
            int i = 0;
            while(j < 3)
            {
                tableau[i]='*'; // ici on efface la case courante
                int pas;
     
                do
                {
                    printf("entrer le nombre de pas \n");
                    scanf("%d",&pas);
                } while(pas < 1 || pas > 3 || i+pas > 8);
     
                printf("la balle saute de %d case(s) \n",pas);
                tableau[i] = 'O';//ici on remet le 'O' juste avant l'affichage
                for(k=0; k<8; k++)
                {
                    printf( "%c |",tableau[k]);
                }
     
                j++;
                i += pas;
     
                if(i==7)
                {
                    printf("Vous avez gagne ! Bravo ! \n");
                    j = 3;
                }
                else if(j >= 3)
                {
                    printf("\n vous avez perdu\n");
                }
                else if(i==p1 || i==p2)
                {
                    printf("\n vous avez perdu , essayer encore ! il vous reste %d tentatives \n",2-j);
                    i = 0;
                }
            }
    (J'ai pas compilé)

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 20
    Points
    20
    Par défaut
    Merci bien !
    mais j'ai essayé ça ne marche pas non plus

  18. #18
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Ce n'est pas avec un "copier coller" que ça aurai marché !?! , c'est plus pour montrer la démarche.
    Peux-tu mettre ton code actuel ?
    (PS si l'indentation est pas faite et les variables sont restées des a, j, n... ça va pas donner envie )

  19. #19
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 20
    Points
    20
    Par défaut
    malheureusement c'est encore pire :/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {int pas,k,piege_1,piege_2;
    char tableau[8];
     int tentative = 0;
            int i = 0;
            srand(time(NULL));
       piege_1=(rand()%8);
       piege_2=(rand()%8);
       printf("les cases pieges sont : %d et %d\n",piege_1,piege_2);
     
            while(tentative < 3)
            {
                tableau[i]=' '; // ici on efface la case courante
                int pas;
     
                do
                {
                    printf("entrer le nombre de pas \n");
                    scanf("%d",&pas);
                } while(pas < 1 || pas > 3 || i+pas > 8);
     
                printf("la balle saute de %d case(s) \n",pas);
                tableau[i] = 'O';//ici on remet le 'O' juste avant l'affichage
                for(k=0; k<8; k++)
                {
                    printf( "%c |",tableau[k]);
                }
     
                tentative++;
                i += pas;
     
                if(i==7)
                {
                    printf("Vous avez gagne ! Bravo ! \n");
                    tentative = 3;
                }
                else if(tentative >= 3)
                {
                    printf("\n vous avez perdu\n");
                }
                else if((i==piege_1) || (i==piege_2))
                {
                    printf("\n vous avez perdu , essayer encore ! il vous reste %d tentatives \n",2-tentative);
                    i = 0;
                }
            }
     
            return 0 ;
    }

    merci comme meme ! quel exercice

  20. #20
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    J'ai exécuté ton dernier code. Il ne plante pas, c'est déjà çà .

    Cependant je ne comprends pas bien l'intérêt du jeu. Si le programme te dis que tu as perdu il est normal que le jeu s'arrête : tentative>=3. C'est la condition de la boucle while();

    Ensuite petit soucis. Il peut arriver qu'une case piégée soit la case 0. Cependant tu interdis le déplacement 0. Il serait intéressant de revoir la génération des cases piégées pour ne pas autoriser le chiffre 0.

Discussions similaires

  1. Jeu de balles
    Par ralba dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 24/05/2014, 09h24
  2. [Android] [Jeu] Bubly Balls
    Par lkstudio dans le forum Mon application mobile
    Réponses: 0
    Dernier message: 09/04/2014, 01h22
  3. Balle Rebondissante Soucis Form1 Taille
    Par KaZz- dans le forum Débuter
    Réponses: 6
    Dernier message: 28/10/2011, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo