p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Candidat au titre de Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : septembre 2010
    Messages : 30
    Points : 12
    Points
    12

    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 : 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
     
    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

    Avatar de Neckara
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    5 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2011
    Messages : 5 550
    Points : 16 417
    Points
    16 417

    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.
    On dit "chiffrer" pas "crypter" !

    On dit "bibliothèque" pas "librairie" !

    Ma page DVP : http://neckara.developpez.com/

  3. #3
    Expert Confirmé Sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    5 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 : 5 208
    Points : 13 459
    Points
    13 459
    Billets dans le blog
    1

    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

    Avatar de Neckara
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    5 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2011
    Messages : 5 550
    Points : 16 417
    Points
    16 417

    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.
    On dit "chiffrer" pas "crypter" !

    On dit "bibliothèque" pas "librairie" !

    Ma page DVP : http://neckara.developpez.com/

  5. #5
    Candidat au titre de Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : septembre 2010
    Messages : 30
    Points : 12
    Points
    12

    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 : 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
    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
    Candidat au titre de Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : septembre 2010
    Messages : 30
    Points : 12
    Points
    12

    Par défaut

    J'ai essayé ça aussi mais ça marche pas :
    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
    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
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    5 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 : 5 208
    Points : 13 459
    Points
    13 459
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par Cannot Voir le message
    J'ai essayé ça aussi mais ça marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void InitialiserPosition (int t[NBLigne][NBColonne], int *position){
        *position = t[0][0];
    }
    ... et de programmer correctement son appel...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Candidat au titre de Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : septembre 2010
    Messages : 30
    Points : 12
    Points
    12

    Par défaut

    Merci

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/03/2011, 11h17
  2. Détermination d'une position dans un tableau
    Par oLie dans le forum Bibliothèque standard
    Réponses: 13
    Dernier message: 21/05/2008, 10h38
  3. [Tableaux] probleme d'afficher une image dans un tableau
    Par ZAYDOUN dans le forum Fonctions
    Réponses: 3
    Dernier message: 15/12/2007, 16h56
  4. afficher une image dans un tableau
    Par phpaide dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 26/04/2006, 12h10
  5. Réponses: 3
    Dernier message: 11/07/2005, 17h09

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