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 :

Comment positionner le curseur dans une case d'un tableau à deux dimensions


Sujet :

C

  1. #21
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Par défaut
    Bonsoir à tous, comme prévu je me retrouve face à un mur (comme souvent en info ^^)... Je n'arrive pas à faire un système de poussée. Je m'explique, J'ai trois pions (1 montagne et 2 éléphants) sur une ligne ou un colonne de mon plateau de jeu. Les montagnes ont une "valeur de résistance" de 0,9 et les éléphants sont à 1. Par exemple un éléphant qui fait face à un autre éléphant ne peux pas le pousser (car 1<=1). Cependant si l'éléphant est de côté ou de dos par rapport à celui qui le pousse, l'attaque du joueur marche. Donc je voudrais savoir comment je peux faire pour scanner toute la ligne ou la colonne d'un tableau et récupérer les "valeurs de résistance" présentes sur la ligne ou colonne pour pouvir valider ou non, l'action du joueur.
    Merci d'avance

  2. #22
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 12 841
    Billets dans le blog
    1
    Par défaut
    Il faut que chaque éléphant possède comme paramètre sa direction (style 'N', 'S', 'E', 'O'). Ensuite ben une boucle...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #23
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Par défaut
    Oui c'est déjà prévu, mais c'est surtout la partie "scanner la ligne ou la colonne" qui me pose problème je vois pas comment faire... Parce que pour valider la poussée il faut que je vérifies si oui ou non, le joueur peut pousser ce qu'il y a sur sa trajectoire.

  4. #24
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    T'as pas un tableau ? Scanner une ligne ou colonne ça revient juste à passer en revue toutes les cases de cette ligne/colonne jusqu'au bout.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #25
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 12 841
    Billets dans le blog
    1
    Par défaut
    Imagine un tableau 1D (style char jeu[25]). Alors
    • scanner la ligne (par exemple) 3 c'est une boucle for (i=3*5; i < 4*5; i++)
    • scanner la colonne (par exemple) 2 c'est une boucle for (i=2; i < 25; i+=5)

    Et dans les deux cas, en regardant chaque jeu[i]. Pratique les tableaux 1D non ?

    Si maintenant tu as un tableau 2D (style char jeu[5][5]). Alors scanner une ligne ou une colonne, c'est faire varier "i" de 0 (inclus) jusqu'à 5 (exclu) et
    • pour la ligne 3 c'est regarder chaque jeu[3][i]
    • pour la colonne 2 c'est regarder chaque jeu[i][2]
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #26
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Par défaut
    Parfait ! Merci à vous deux, je pense que je suis tellement épuisé quand je travaille mon code que j'arrive même pas à trouver la solution pour des petits problèmes comme ça ^^. Je vous tiens au courant et je posterai le code final si ça vous intéresse ou si jamais ça vous amuse de cherches les failles :p Bonne soirée !!

  7. #27
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Par défaut
    Bonsoir, nouveau problème. Mon tableau fait 5x5 et j'ai un pion 1 orienté à droite en A2 par exemple. En A1 (derrière le pion 1) se trouve un pion 2 orienté cette fois ci vers la gauche. Le joueur décide faire bouger le pion 1 (vers la droite du coup). Je ne trouve pas comment faire pour scanner la ligne A sans prendre en compte le pion 2. Je sais pas si c'est clair, dites moi si je dois être plus précis
    Merci!

  8. #28
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 12 841
    Billets dans le blog
    1
    Par défaut
    Au lieu de scanner la ligne "A" de 0 à 4, tu ne la scannes que de 2 à 4. Bref tu pars du pion que tu veux bouger et tu scannes la ligne/colonne dans la direction envisagée par le pion...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #29
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Par défaut
    Salut ! Du coup j'ai fait ça :
    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
     
     
    void poussee (char tab1[5][5],char tab2[5][5],char tabE[5],char tabR[5],char pion)
    {
     
        int j, ver, force = 0;  /// Avec j la colonne, i la ligne
        char orientation, hor; /// Je trouve pas comment on peut la passer d'un ssprgm à un autre
        char *dir = NULL;
        char *mont = NULL;
     
        if (orientation = 'g')   ///Si le pion est orienté vers la gauche
        {
     
            for (j=ver; j>0; j--)           ///Alors on récupère les direction des tous les pions qui sont entre lui et le bord du plateau
            {
                dir = strchr(tab2[hor][j], 'd');    ///dir récupère le nombre de d dans chaque chaine de caractère de la ligne sur laquelle est le pion
                mont = strchr(tab2[hor][j], 'M');/// mont récupère le nombre de montagnes
                if (dir != NULL)
                {
                    force+=1;
                }
                if (mont != NULL)
                {
                    force+=0.9;
                }
            }
            if (force>=1)                     /// Si un ou plusieurs d ont été identifiés et / ou des montagnes alors on ne peut pas bouger le pion
            {
                printf("Le pion ne peut pas pousser");
            }
        }
     
        if (orientation = 'd')   ///Si le pion est orienté vers la droite
        {
     
            for (j=ver; j<5; j++)           ///Alors on récupère les direction des tous les pions qui sont entre lui et le bord du plateau
            {
                dir = strchr(tab2[hor][j], 'd');    ///dir récupère le nombre de d dans chaque chaine de caractère de la ligne sur laquelle est le pion
                mont = strchr(tab2[hor][j], 'M');/// mont récupère le nombre de montagnes
                if (dir != NULL)
                {
                    force = force + 1;
                }
                if (mont != NULL)
                {
                    force = force + 0.9;
                }
            }
            if (force>=1)                     /// Si un ou plusieurs d ont été identifiés et / ou des montagnes alors on ne peut pas bouger le pion
            {
                printf("Le pion ne peut pas pousser");
            }
        }
        if (orientation = 'h')   ///Si le pion est orienté vers le haut
        {
     
            for (j=hor; j>0; j--)           ///Alors on récupère les direction des tous les pions qui sont entre lui et le bord du plateau
            {
                dir = strchr(tab2[j][ver], 'd');    ///dir récupère le nombre de d dans chaque chaine de caractère de la ligne sur laquelle est le pion
                mont = strchr(tab2[j][ver], 'M');/// mont récupère le nombre de montagnes
                if (dir != NULL)
                {
                    force+=1;
                }
                if (mont != NULL)
                {
                    force+=0.9;
                }
            }
            if (force>=1)                     /// Si un ou plusieurs d ont été identifiés et / ou des montagnes alors on ne peut pas bouger le pion
            {
                printf("Le pion ne peut pas pousser");
            }
        }
        if (orientation = 'b')   ///Si le pion est orienté vers le bas
        {
     
            for (j=hor; j<5; j++)           ///Alors on récupère les direction des tous les pions qui sont entre lui et le bord du plateau
            {
                dir = strchr(tab2[j][ver], 'd');    ///dir récupère le nombre de d dans chaque chaine de caractère de la ligne sur laquelle est le pion
                mont = strchr(tab2[j][ver], 'M');/// mont récupère le nombre de montagnes
                if (dir != NULL)
                {
                    force+=1;
                }
                if (mont != NULL)
                {
                    force+=0.9;
                }
            }
            if (force>=1)                     /// Si un ou plusieurs d ont été identifiés et / ou des montagnes alors on ne peut pas bouger le pion
            {
                printf("Le pion ne peut pas pousser");
            }
        }
    }
    Si t'as besoin de tout le code dis moi mais c'est autour de 700 lignes ^^

  10. #30
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Par défaut
    Ok alors j'ai bossé un peu et voilà un autre test, qui ne marche pas mais je sens que je suis pas loin du but :
    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
     
    void poussee (char tab1[5][5],char tab2[5][5],char tabE[5],char tabR[5],char pion)
    {
     
        int j, ver, force = 0, nbrhor;  /// Avec j la colonne, i la ligne
        char orientation, hor; /// Je trouve pas comment on peut la passer d'un ssprgm à un autre
        char *dir = NULL;
        char *mont = NULL;
     
        printf("Veuillez entrer les coordonnees du pion que vous souhaitez deplacer\n");
         do
        {
            scanf("%c %d",&hor,&ver);
            switch(hor)
            {
            case 'A' :
                nbrhor=0;
                break;
     
            case 'B' :
                nbrhor=1;
                break;
     
            case 'C' :
                nbrhor=2;
                break;
     
            case 'D' :
                nbrhor=3;
                break;
     
            case 'E' :
                nbrhor=4;
                break;
     
            default:
                break;
            }
        }
        while(tab1[nbrhor][ver]==pion);
     
     
        if (tab2[nbrhor][ver] = 'g')   ///Si le pion est orienté vers la gauche
        {
     
            for (j=ver; j>=0 ; j--)           ///Alors on récupère les direction des tous les pions qui sont entre lui et le bord du plateau
            {
                if ((tab2[nbrhor][j]) == 'd') {         /// Si la case contient un pion orienté vers la droite
     
                    force = force + 1;
                }
                if ((tab2[nbrhor][j]) == 'M') {        ///si la case contient une Montagne
     
                    force = force + 0.9;
                }
            }
            if (force>=1)                     /// Si un ou plusieurs d ont été identifiés et / ou des montagnes alors on ne peut pas bouger le pion
            {
                printf("Le pion ne peut pas pousser");
            }
        }
    }

  11. #31
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 12 841
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Un_débutant Voir le message
    Ok alors j'ai bossé un peu et voilà un autre test, qui ne marche pas mais je sens que je suis pas loin du but :
    Mouais. Et quelle est ta question alors ?

    Accessoirement tu n'intègres toujours pas le MVC. Une fonction qui gère si un déplacement est possible (ou, la même en plus complexe, qui calcule par exemple quelle poussée il faudrait pour bouger ce qui se trouve devant) ne doit pas afficher "Pas possible". Elle doit renvoyer une valeur comme 0/1 ou bien 0...n (n étant la force nécessaire). Et c'est l'appelant qui, lui, exploite cette valeur.
    Je comprends dans ces conditions que ton code fasse 700 lignes. Il doit y avoir des masses de trucs redondants quoi !!!

    Citation Envoyé par Un_débutant Voir le message
    /// Je trouve pas comment on peut la passer d'un ssprgm à un autre
    Variable locale à la fonction. Tu peux la passer à une sous-fonction mais dès que tu quitte poussee() pour remonter vers l'appelant tout ce qui s'y trouve est perdu.
    Si tu dois faire remonter cette valeur à l'appelant, tu n'as que 2 solutions
    Solution 1: tu la retourne et l'appelant la récupère sous la forme x=poussee(). Mais comme cette fonction est sensée (enfin selon moi) retourner la force nécessaire au mouvement, tu ne peux pas utiliser cette solution
    Solution 2: l'appelant la définit et passe son adresse à poussee() (comme pour scanf()). La fonction ayant l'adresse de la variable de l'appelant peut alors la modifier comme elle le souhaite

    Accessoirement tes paramètres commencent à être bien nombreux (tab1, tab2, tabE, tabR, pion). T'es sûr d'avoir besoin de tout ça ? D'autant plus que "tabE" et "tabR" ne sont pas utilisés. Sinon pour simplifier tu peux toujours encapsuler tes paramètres de jeu dans une structure.

    Citation Envoyé par Un_débutant Voir le message
    dir = strchr(tab2[hor][j], 'd'); ///dir récupère le nombre de d dans chaque chaine de caractère de la ligne sur laquelle est le pion
    Non. dir récupère la première position de la chaine qui contient un 'd'. Ce n'est pas tout à fait la même chose...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #32
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Par défaut
    Bonsoir,

    En ce qui concerne le MVC, j'ai à peu près intégré qui servait à quoi mais je n'ai pas le temps de recommencer tout le code... Alors oui il y a quelques parties du code qui reviennent plusieurs fois mais je dois faire avec car si je dis à mes potes qu'on recommence tout, il vont en faire une gueule ...

    Pour ce qui concerne la variable en paramètre, petite erreur de ma part car le commentaire était destiné à mes potes au passage ^^. En fait la variable qui garde en mémoire la direction est dans un autre sous programme et je pense que j'en ai besoin pour faire le sous programme de poussée (A mon avis trop compliqué d'en récréer une qui va devoir reprendre les directions de tous les pions juste pour la poussée). Du coup tu peux me confirmer qu'il faut bien mettre cette variable (celle pour la direction) dans le main puis la faire passer en paramètre pour chacun des sous programmes ? (Parce qu'on l'utilise quand on pose une pièce car on doit choisir la direction de la pièce posée et on l'utilise aussi quand le joueur choisit de changer de direction).
    tabE et tabR ne sont pas utilisés pour le moment mais il faut que mon sous programme calcule les forces pour "valider" le déplacement et que dans le cas où une pièce sorte, elle soit replacée dans la réserve de pions du joueur (d'où les 2 tableaux, mais j'en suis pas encore là ^^).

    Pour la fonction strchr j'avoue que ma compréhension de cette fonction reste partielle et son utilité aussi ^^. Du coup existe-t-il une fonction qui peut me retourner le nombre de directions opposées à celle du pion qui pousse ? (ou sinon j'utilise un compteur comme 'force' que j'ai mis dans mon 2ème exemple ?)

    Merci encore pour ton aide

  13. #33
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 12 841
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Un_débutant Voir le message
    Pour ce qui concerne la variable en paramètre, petite erreur de ma part car le commentaire était destiné à mes potes au passage ^^.
    Non. Il est destiné à tous ceux qui lisent ton code pour comprendre comment il a été conçu.

    Citation Envoyé par Un_débutant Voir le message
    Du coup tu peux me confirmer qu'il faut bien mettre cette variable (celle pour la direction) dans le main
    Si le main en a besoin, oui. C'est généralement toujours le premier à avoir besoin d'un truc qui doit le définir.

    Citation Envoyé par Un_débutant Voir le message
    puis la faire passer en paramètre pour chacun des sous programmes ?
    A chacune des fonctions qui en aura besoin, oui.

    Citation Envoyé par Un_débutant Voir le message
    (Parce qu'on l'utilise quand on pose une pièce car on doit choisir la direction de la pièce posée et on l'utilise aussi quand le joueur choisit de changer de direction).
    tabE et tabR ne sont pas utilisés pour le moment mais il faut que mon sous programme calcule les forces pour "valider" le déplacement et que dans le cas où une pièce sorte, elle soit replacée dans la réserve de pions du joueur (d'où les 2 tableaux, mais j'en suis pas encore là ^^).
    D'où ma remarque sur le nombre de paramètres grandissants qui seraient plus facile de gérer s'ils étaient encapsulés dans une structure.

    Citation Envoyé par Un_débutant Voir le message
    Pour la fonction strchr j'avoue que ma compréhension de cette fonction reste partielle et son utilité aussi ^^.
    Utilité: chercher la première position d'une lettre dans une chaine. Utilisation de façon générale: indiquer si une lettre particulière se trouve ou pas dans une chaine. Mais c'est vrai qu'elle est assez légère comme fonction et qu'une simple boucle peut la remplacer facilement.

    Citation Envoyé par Un_débutant Voir le message
    Du coup existe-t-il une fonction qui peut me retourner le nombre de directions opposées à celle du pion qui pousse ?
    Oui bien sûr. La fonction nbrDirectionOpposeePionQuiPousse. Une fonction développée par la communauté juste pour toi.

    Tu vois bien que ce n'est pas possible. Les fonctions offertes ne font que des choses "générales" (ou "communes"). Et c'est à toi de les associer pour produire des trucs complexes ou spécifiques.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #34
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Par défaut
    Salut ! Je suis en train de voir pour passer l'orientation en paramètre dans tous les sous programmes. Peux tu me dire si ce code s’exécute correctement, le cas contraire me dire quoi corriger ?
    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
     
     
        if (tab2[nbrhor][ver] = 'g')   ///Si le pion est orienté vers la gauche
        {
     
            for (j=ver; j>=0 ; j--)           ///Alors on récupère les direction des tous les pions qui sont entre lui et le bord du plateau
            {
                if ((tab2[nbrhor][j]) == 'd') {
     
                    force = force + 1;
                }
                if ((tab2[nbrhor][j]) == 'M') {
     
                    force = force + 0.9;
                }
            }
            if (force>=1)                     /// Cas où la poussée est impossible
            {
                printf("Le pion ne peut pas pousser");       ///C'est juste pour voir si ce que je fais marche, je le changerai après
            }
            if (force < 1) {                ///Cas où elle l'est
     
                printf("Le pion peut pousser");         ///C'est juste pour voir si ce que je fais marche, je le changerai après
     
     
            }
        }
    Merci d'avance

  15. #35
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 12 841
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Un_débutant Voir le message
    Peux tu me dire si ce code s’exécute correctement,
    Tu me prends pour un compilateur ?
    A priori il n'y a pas d'erreur de syntaxe. Et il ne s'exécutera correctement chez-moi que si j'ai au-moins toute la fonction avec détail des paramètres.

    Ceci dit je ne connais pas les règles donc je ne peux pas juger de la validité du code. Par exemple pourquoi une montagne vaut 0.9 si la limite c'est 1. J'en déduis donc qu'un pion face à une montagne peut pousser mais face à deux il ne peut pas. Donc déjà la valeur devrait être 0.5 et non 0.9. Les valeurs des pièces ce n'est pas du hasard, ça doit être réfléchi. Aux échecs, la dame vaut 10 pions, pas 9 ni 8. Et la tour vaut 5 pions, pas 4 ni 6. Ainsi celui qui sacrifie deux tours pour prendre une dame sait que quantitativement il ne gagne rien (ensuite la qualité c'est autre chose).

    Citation Envoyé par Un_débutant Voir le message
    le cas contraire me dire quoi corriger ?
    Peut-être remplacer tes deux premiers "if" par un switch/case plus adapté à ces circonstances. Et remplacer le dernier "if" idiot par un "else"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  16. #36
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Par défaut
    Salut !

    Non je ne te prends pas pour un compilateur, j'essaye juste de comprendre et je te demande de l'aide mais j'ai dû mal m'exprimer désolé..

    Alors, la limite est à 1 car un pion face à un autre pion avec une direction opposée ne peut pas pousser ( tous les pions ont une force de poussée de 1). Les montagnes n'ont pas de force de poussée mais plutôt une résistance (ce qui revient plus au moins au même) . Elle vaut 0.9, c'est les règles, je ne eux pas les changer.

    J'ai fait le changement du dernier "if" mais je vois pas comment faire un switch avec un tableau 2D, parce que je n'ai jamais vu un "switch" prendre plus d'une variable ^^.
    Après quelques tests je me suis rendu compte que ça coinçait au niveau du "switch". En fait j'ai rajouté un "printf" avant et un après le "while" du "do while" et seulement le 1 s'affiche à l'écran. Mais le truc bizarre c'est que je peux pas entrer de nouvelles coordonnées (Comme si la boucle ne se répétait 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
    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
     
    void poussee (char tab1[5][5],char tab2[5][5],char tabE[5],char tabR[5],char pion)
    {
     
        int j, ver, nbrhor, force;
        char orientation, hor;
     
        force = 0;
     
        printf("Veuillez entrer les coordonnees du pion que vous souhaitez deplacer\n");
         do
        {
            scanf("%c %d",&hor,&ver);
     
            switch(hor)                    ///transformation de la lettre de la ligne en chiffre
            {
            case 'A' :
                nbrhor=0;
                break;
     
            case 'B' :
                nbrhor=1;
                break;
     
            case 'C' :
                nbrhor=2;
                break;
     
            case 'D' :
                nbrhor=3;
                break;
     
            case 'E' :
                nbrhor=4;
                break;
     
            default:
                break;
            }
            ver=ver-1;
            printf("ici");
        }
        while(tab1[nbrhor][ver]==pion);
     
            printf("ici");
     
     
        if (tab2[nbrhor][ver]='g')   ///Si le pion est orienté vers la gauche(tab2 enregistre les directions)
        {
     
            for (j=ver;j>=0;j--)           ///Alors on récupère les directions des tous les pions qui sont entre lui et le bord du plateau
            {
                if ((tab2[nbrhor][j]) == 'd') {         ///Si une des "cases" contient un pion avec une direction opposée
     
                    force = force + 1;
                }
                if ((tab2[nbrhor][j]) == 'M') {         ///S'il y a une montagne
     
                    force = force + 0.9;
                }
            }
     
            if (force>=1)                     /// Cas où la poussée est impossible
            {
                printf("Le pion ne peut pas pousser");       ///C'est juste pour voir si ce que je fais marche, je le changerai après
            }
            else
            {                ///Cas où elle l'est
                printf("Le pion peut pousser") ;    ///C'est juste pour voir si ce que je fais marche, je le changerai après
            }
        }
    }

  17. #37
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 12 841
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Un_débutant Voir le message
    Alors, la limite est à 1 car un pion face à un autre pion avec une direction opposée ne peut pas pousser ( tous les pions ont une force de poussée de 1). Les montagnes n'ont pas de force de poussée mais plutôt une résistance (ce qui revient plus au moins au même) . Elle vaut 0.9, c'est les règles, je ne eux pas les changer.
    Ok. si la règle dit "0.9" pas de souci. Je pensais que ça venait de ta façon personnelle d'interpréter la résistance mais si celle-ci est bien mentionnée de cette façon pas de souci.

    Citation Envoyé par Un_débutant Voir le message
    J'ai fait le changement du dernier "if" mais je vois pas comment faire un switch avec un tableau 2D, parce que je n'ai jamais vu un "switch" prendre plus d'une variable ^^.
    Ben justement, cet ensemble d'instruction
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ((tab2[nbrhor][j]) == 'd') {
    	force = force + 1;
    }
    if ((tab2[nbrhor][j]) == 'M') {
    	force = force + 0.9;
    }
    ne teste qu'une seule variable tab2[nbrhor][j] !!!
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    switch (tab2[nbrhor][j]) {
    	case 'd':
    		force = force + 1;
    		break;
    	case 'm':
    		force = force + 0.9;
    		break;
    }

    Citation Envoyé par Un_débutant Voir le message
    Après quelques tests je me suis rendu compte que ça coinçait au niveau du "switch". En fait j'ai rajouté un "printf" avant et un après le "while" du "do while" et seulement le 1 s'affiche à l'écran. Mais le truc bizarre c'est que je peux pas entrer de nouvelles coordonnées (Comme si la boucle ne se répétait pas).
    Déjà
    1. mets des messages différents dans tes affichages de debug pour être certain de bien voir la bonne ligne s'exécuter
    2. rajoute systématiquement un '\n' en fin de chaine pour que l'affichage écran se fasse réellement au moment où l'instruction est exécutée (printf() travaille en mode "buffer" et sans '\n' le buffer peut ne pas être renvoyé à l'écran au même moment)

    Maintenant regarde bien ta condition. Tu demandes à répéter la saisie tant que les coordonnées sont celles d'un pion. Donc si tu entres des coordonnées qui ne sont pas celles d'un pion ben effectivement ta boucle ne se répète pas.
    Et sinon ben afficher "hor" et "ver" juste après la saisie serait un plus pour comprendre ce qui se passe tu ne crois pas ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  18. #38
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Par défaut
    Bonsoir,

    Alors déjà merci parce que là tu m'as filé un gros coup de pousse J'ai fait ce que tu m'as conseillé et en fait c'est au niveau de la saisie que ça déconne... Par exemple quand je rentre A 3 et que je l'imprime juste après, j'ai des valeurs du style 138673058 (On dirait une adresse non ?).En plus, seulement le "int" s'affiche (colonne) mais pas le "char" (ligne). J'ai mis un autre "printf" entre la fin su "switch" et du "do while" et les deux "int" (nbrhor --> char converti en int et le colonne) s'affichent avec des valeurs similaires à celles d'avant J'ai beau changer le moment de la saisie, rien n'y fat c'est toujours la même chose... T'as une idée ?

    Merci d'avance !

  19. #39
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 12 841
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Un_débutant Voir le message
    T'as une idée ?
    Sans code non. Ou plutôt j'en ai plein mais sans code je peux pas les vérifier. Pour moi, la plus probable est que t'affiches "&hor" au lieu de "hor".

    A titre d'exemple, ceci chez-moi fonctionne
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include<stdio.h>
    #include<stdlib.h>
     
    int main() {
    	char hor;
    	int ver;
    	scanf("%c %d", &hor, &ver);
    	printf("hor=[%c]\n", hor);
    	printf("ver=[%d]\n", ver);
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  20. #40
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Par défaut
    Bonsoir, voilà tout le code si tu veux mais il marche (pas cette version :p). C'était un problème d'initialisation de variable en début de sous programme, du grand art... L'essentiel c'est qu'il marche, maintenant j'essaye de faire les blindages et je bloque sur celui là :
    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
     
    void poussee (char tab1[5][5],char tab2[5][5],char tabE[5],char tabR[5],char pion, int action)
    {
     
        int j, ver, nbrhor, force;
        char orientation, hor;
     
        force = 0;
        nbrhor = 0;
        ver = 0;
        hor = NULL;
     
        printf("Veuillez entrer les coordonnees du pion que vous souhaitez deplacer\n");
        do
        {
     
            scanf("%c %d",&hor,&ver);
            switch(hor)
            {
            case 'A' :
                nbrhor=0;
                break;
     
            case 'B' :
                nbrhor=1;
                break;
     
            case 'C' :
                nbrhor=2;
                break;
     
            case 'D' :
                nbrhor=3;
                break;
     
            case 'E' :
                nbrhor=4;
                break;
     
            default:
                break;
            }
            ver=ver-1;
     
        }
        while(tab1[nbrhor][ver]!=pion);
     
        if(tab2[nbrhor][ver-1]!=' ')
        {
            if (tab2[nbrhor][ver]=='g')   ///Si le pion est orienté vers la gauche(tab2 enregistre les directions)
            {
     
                for (j=ver; j>=0; j--)         ///Alors on récupère les directions des tous les pions qui sont entre lui et le bord du plateau
                {
                    switch(tab2[nbrhor][j])
                    {
                    case 'd':
                        force = force + 1;
                        break;
                    case 'M':
                        force = force + 0.9;
                        break;
                    case  'g':
                        force = force - 1;
                    default:
                        break;
                    }
                }
     
                if (force>=1)                     /// Cas où la poussée est impossible
                {
                    printf("Le pion ne peut pas pousser\n");        ///C'est juste pour voir si ce que je fais marche, je le changerai après
                    choisiraction(tab1,tab2,tabE,tabR,action,pion);
                }
                else                                               ///Cas où elle l'est
                {
                    for (j=ver; j>=0; j--){                             ///j'essaye d'automatiser la changement de place des pions, peu importe le nombre qu'ils sont
                            do{
                                tab1[nbrhor][ver-j]=tab1[nbrhor][ver-j+1];
                                tab2[nbrhor][ver-j]=tab2[nbrhor][ver-j+1];
                                printf("Boucle infinie\n");
                            }
                            while((tab1[nbrhor][j]!=' ') && (tab2[nbrhor][j]!=' '));       ///ça ne fonctionne donc ça ne doit pas être les bonnes conditions mais je vois pas laquelle ce serait ...
                    tab2[nbrhor][ver]=' ';
                    tab1[nbrhor][ver]=' ';
                    }
     
                    board(tab1,tab2,tabE,tabR,pion);
                }
            }
        }
        else
        {
            printf("Il n'y a pas de pions autour de vous\n");
            choisiraction(tab1,tab2,tabE,tabR,action,pion);
        }
    }
    En fait je voudrais que le pion que le changement de coordonnées des pions poussés s'arrête lorsqu'une case est vide. En gros un pion en A5 pousse un pion en A4 ne pousse pas aussi le pion en A2 (sachant que A3 est vide).

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