Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Invité de passage
    Profil pro Rémi Cannot
    Prépa
    Inscrit en
    septembre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Nom : Rémi Cannot

    Informations professionnelles :
    Activité : Prépa

    Informations forums :
    Inscription : septembre 2010
    Messages : 16
    Points : 3
    Points
    3

    Par défaut Afficher une position dans un tableau

    Salut,

    Voilà j'ai un projet dérivé du démineur, je dois aller d'un point A à un point B, mais je bloque vraiment sur la méthode, mon programme est de cette manière :

    Faire
    InitialiserPlateau(plateau)
    InitialiserMines1(plateau
    Affnom(nom)
    AffPlateau(plateau)

    JeuPasTerminé = vrai

    Tant que (JeuPasTerminé)
    Tant que (position !=MINE ou position!=arrivée)
    AffPlateau(position)
    Déplacement


    En gras je n'arrive pas à les mettre en relation, j'ai donc alors tenté de faire une unique fonction, mais j'ai des erreurs dans le switch
    Code :
    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
     
    void AffPosition (int t[NBLigne][NBColonne]) {
        int position[NBLigne][NBColonne];
        int i=0,j=0,k=0, deplacement = 0;
     
        t[0][0] = DEPART; // Détermination point de départ
        t[NBLigne-1][NBColonne-1] = ARRIVEE; // Détermination point d'arrivée
        position = t[0][0];
     
        while (position != MINE || position != ARRIVEE) {
           printf("\n\nDeplacement :");
           printf("\nDroite -  Saisir 1");
           printf("\nGauche -  Saisir 2");
           printf("\nHaut   -  Saisir 3");
           printf("\nBas    -  Saisir 4");
      scanf("%d",&deplacement);  //Déplacement
     
      switch (deplacement) {
      case 1 : position = t[j][k+1];
          break;
      case 2 : position = t[j][k-1];
          break;
      case 3 : position = t[j-1][k];
          break;
      case 4 : position = t[j+1][k];
          break;
     
        for (j=0;j<NBLigne;j++) {
            printf("\n");
              for (k=0;k<NBColonne;k++) {
                   printf("| ");
                  if (t[j][k] == INIT)
                      printf("  ");
                    else if (t[j][k] == DEPART)
                      printf("D ");
                    else if (t[j][k] == ARRIVEE)
                      printf("A ");
                      else if (t[j][k] == position)
                        printf("O");
                    /*else if (t[j-1][k] == MINE || t[j+1][k] == MINE || t[j][k-1] == MINE || t[j][k+1] == MINE )
                       printf("X ");*/
                    else if (t[j][k] == MINE)
                       printf("  ");
                   /* else if (t[j][k] == Gagne)
                    printf("G ");*/
            }
              printf("|");
              printf("\n");
              for(k=0;k<NBColonne;k++)
                printf("----");
          }
      }
     }
    }
    Merci

  2. #2
    Expert Confirmé Sénior


    Homme Profil pro Denis
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    5 005
    Détails du profil
    Informations personnelles :
    Nom : Homme Denis
    Âge : 21
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2011
    Messages : 5 005
    Points : 14 903
    Points
    14 903

    Par défaut

    Bonjour,

    Tu ne teste pas si k+1 est un indice valable de ton tableau ou non.

    Deux possibilités :
    - Quand tu sors d'un côté, tu entre de l'autre côté : position = t[j][(k+1)%nbColonne]; ou position = t[j][(k < nbColonne ? k+1:0)];.
    - Tu ne peux pas sortir d'un côté : position = t[j][(k < nbColonne ? k+1:k)];De même pour les 3 autres cas.

  3. #3
    Expert Confirmé Sénior
    Avatar de Sve@r
    Homme Profil pro Frédéric
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    4 533
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric
    Âge : 46
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 4 533
    Points : 10 147
    Points
    10 147

    Par défaut

    Citation Envoyé par Neckara Voir le message
    - Tu ne peux pas sortir d'un côté : position = t[j][(k < nbColonne ? k+1:k)];
    Bonjour
    On peut même faire mieux et ne proposer, dans le menu, que les choix de déplacement autorisés...
    Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
    Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
    Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
    Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
    Dr. Adrian Rogers (1931-2005)

  4. #4
    Expert Confirmé Sénior


    Homme Profil pro Denis
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    5 005
    Détails du profil
    Informations personnelles :
    Nom : Homme Denis
    Âge : 21
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2011
    Messages : 5 005
    Points : 14 903
    Points
    14 903

    Par défaut

    Citation Envoyé par Sve@r Voir le message
    Bonjour
    On peut même faire mieux et ne proposer, dans le menu, que les choix de déplacement autorisés...
    Mais toujours est-il que l'utilisateur est libre d'entrer des directions non-présentes de le menu et il faut bien les gérer.

  5. #5
    Invité de passage
    Profil pro Rémi Cannot
    Prépa
    Inscrit en
    septembre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Nom : Rémi Cannot

    Informations professionnelles :
    Activité : Prépa

    Informations forums :
    Inscription : septembre 2010
    Messages : 16
    Points : 3
    Points
    3

    Par défaut

    Voilà j'ai trouve une autre méthode pour déplacer mon joueur, le soucis c'est que je ne sais pas comment mémoriser cette nouvelle position, au lieu de ré-initialiser cette position :
    la fonction en cause :
    Code :
    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
    void AfficherPosition (int t1[NBLigne][NBColonne],int position) {
      int x = 0,y = 0;
      int deplacement = 0;
     
     
      printf("\nDroite -  Saisir 1");
      printf("\nGauche -  Saisir 2");
      printf("\nHaut   -  Saisir 3");
      printf("\nBas    -  Saisir 4");
      scanf("%d",&deplacement);
     
        switch (deplacement) {
      case 1 : t1[x][y+1] = position;
          break;
      case 2 : t1[x][y-1] = position;
          break;
      case 3 : t1[x-1][y] = position;
          break;
      case 4 : t1[x+1][y] = position;
          break;
      }
              // scanf("%d %d",&x,&y);
              // t1[x][y] = position;
     
     
    }


    Merci, ça fait vraiment plusieurs jours que je suis sur ce programme.

  6. #6
    Invité de passage
    Profil pro Rémi Cannot
    Prépa
    Inscrit en
    septembre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Nom : Rémi Cannot

    Informations professionnelles :
    Activité : Prépa

    Informations forums :
    Inscription : septembre 2010
    Messages : 16
    Points : 3
    Points
    3

    Par défaut

    J'ai essayé ça aussi mais ça marche pas :
    Code :
    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
    void InitialiserPosition (int t[NBLigne][NBColonne], int position){
    position = t[0][0];
    }
     
    void AfficherPosition (int t1[NBLigne][NBColonne],int position) {
      int x = 0,y = 0,j,k;
      int deplacement = 0;
     
    while (position != t1[NBLigne-1][NBColonne-1]) {
      printf("\nDroite -  Saisir 1");
      printf("\nD1 -  Saisir 2");
      printf("\nHaut   -  Saisir 3");
      printf("\nBas    -  Saisir 4");
      scanf("%d",&deplacement);
     
        switch (deplacement) {
      case 1 : t1[x][y+1] = position;
          break;
      case 2 :
               t1[x][y+1] = position
          break;
      case 3 : t1[x-1][y] = position;
          break;
      case 4 : t1[x+1][y] = position;
          break;
      }
     
          for (j=0;j<NBLigne;j++) {
            printf("\n");
              for (k=0;k<NBColonne;k++) {
                  if (t1[j][k] == INIT)
                     printf(".");
                    else if (t1[j][k] == position)
                        printf("O ");
              }
          }
     
    }
     
          position = t1[x][y];
    }

  7. #7
    Expert Confirmé Sénior
    Avatar de Sve@r
    Homme Profil pro Frédéric
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    4 533
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric
    Âge : 46
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 4 533
    Points : 10 147
    Points
    10 147

    Par défaut

    Citation Envoyé par Cannot Voir le message
    J'ai essayé ça aussi mais ça marche pas :
    Code :
    1
    2
    3
    void InitialiserPosition (int t[NBLigne][NBColonne], int position){
    position = t[0][0];
    }
    Si tu avais écouté en cours, tu te serais rappelé que si on passe une variable à une fonction on ne lui passe que la copie de cette variable et donc qu'il lui est impossible, avec cette copie, de modifier la variable d'origine.

    Il faut donc passer à la fonction non pas la variable mais son adresse. La fonction recevra là aussi une copie de cette adresse mais que ce soit l'adresse d'origine ou la copie, les deux éléments référencent la même chose, à savoir l'emplacement de la variable en question.
    Et donc avec cet emplacement la fonction est tout à fait capable de modifier ladite variable.
    Dernier détail: quand on passe une adresse à une fonction, cette adresse doit être stockée dans une variable adaptée donc un pointeur.

    Ayant tous ces éléments en tête, on est alors à même d'écrire une fonction correcte...
    Code :
    1
    2
    3
    void InitialiserPosition (int t[NBLigne][NBColonne], int *position){
        *position = t[0][0];
    }
    ... et de programmer correctement son appel...
    Code :
    1
    2
    int position;
    InitialiserPosition (..., &position);
    Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
    Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
    Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
    Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
    Dr. Adrian Rogers (1931-2005)

  8. #8
    Invité de passage
    Profil pro Rémi Cannot
    Prépa
    Inscrit en
    septembre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Nom : Rémi Cannot

    Informations professionnelles :
    Activité : Prépa

    Informations forums :
    Inscription : septembre 2010
    Messages : 16
    Points : 3
    Points
    3

    Par défaut

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •