Boucle for qui n'est pas prise en compte / jeu d'echecs

Résolu/Fermé
Louis - Modifié le 24 mai 2022 à 09:17
 Louis - 24 mai 2022 à 09:16
Bonsoir,
J'essaye de coder un jeu d'echecs en C et je rencontre un probleme.

avec plateau le plateau d'echecs de taille variable
verification_pion fonctionne bien mais pas verification_fou, meme si les boucle if fonctionnent bien, les boucle for qui suivent ne sont tout simplement pas prises en compte... Elles servent a verifier qu'il n'y a pas de pieces sur le trajet du fou (qui se deplace en diagonale de tous les côtés).

Merci de votre aide !

le code :


void deplacement(int l_depart, int c_depart, int l_arrivee, int c_arrivee, int * *plateau) {
    plateau[l_arrivee][c_arrivee] = plateau[l_depart][c_depart];
    plateau[l_depart][c_depart] = 0;
}

int verification_pion(int l_depart, int c_depart, int l_arrivee, int c_arrivee, int * *plateau) {
    if (l_depart - l_arrivee == 1 && c_arrivee - c_depart == 0) {
        if (plateau[l_arrivee][c_arrivee] != 0) {
            return 2; // probleme quand une piece est sur la case
        } else {
            return 1; // tout va bien

        }
    }
    if (l_depart - l_arrivee == 2 && c_arrivee - c_depart == 0 ){

    }
    else {
        if (l_arrivee == l_depart + 1 || c_arrivee == c_depart + 1 || c_arrivee == c_depart - 1 && plateau[l_arrivee][c_arrivee] != 0) {
            if (plateau[l_arrivee][c_arrivee] < 0 ) {

                return 1; // tout va bien
            } else {
                return 4; // probleme de deplacement
            }
        }
    }
    return 4; //probleme de déplacement

}

int verification_fou(int l_depart, int c_depart, int l_arrivee, int c_arrivee, int * *plateau) {

    if ((c_arrivee - c_depart) != (l_arrivee - l_depart) && -(l_arrivee - l_depart) != (c_arrivee - c_depart)) {
        return 3;

    }
    if (c_arrivee - c_depart > 0 && l_arrivee - l_depart > 0) {
        printf("\n cas 1");
        for (int z = 0; z == (l_arrivee - l_depart); z++) {
            if (plateau[l_depart + z][c_depart + z] == 0) {

                return 5;

            }
        }
        
            }

    if (c_arrivee - c_depart > 0 && l_arrivee - l_depart < 0) {
        printf("\n cas 2");
        for (int i = 1; i == l_arrivee - l_depart; i++) {
            if (plateau[l_depart + i][c_depart - i] != 0) {
                return 5;
            }
        }
        return 1;
    }

    if (c_arrivee - c_depart < 0 && l_arrivee - l_depart < 0) {
        printf("\n cas 3");
        for (int i = 0; i == l_depart - l_arrivee; i++) {
            if (plateau[l_depart - i][c_depart - i] != 0) {
                return 5;
            }
        }
        return 1;
    }

    if (c_arrivee - c_depart < 0 && l_arrivee - l_depart > 0) {
        printf("\n cas 4");
        for (int i = 1; i == l_depart - l_arrivee; i = i + 1) {
            if (plateau[l_depart - i][c_depart + i] != 0) {
                return 5;
            }
        }
        return 1;
    }
    return 0;
}

void initialisation_coup(int * *plateau){

    int l_depart, c_depart, l_arrivee, c_arrivee;
    printf("Quelle piece voulez vous bouger ? (ligne colonne) ");
    scanf("%d %d", &l_depart, &c_depart);
    printf("Ou voulez vous la deplacer ? (ligne colonne) ");
    scanf("%d %d", &l_arrivee, &c_arrivee);
    printf("donc on part de %d %d a %d %d", l_depart, c_depart, l_arrivee, c_arrivee);
    printf("%d",*&plateau[l_depart][c_depart]);

    switch(*&plateau[l_depart][c_depart]){
        case 1 :
            switch(verification_pion(l_depart, c_depart, l_arrivee, c_arrivee, *&plateau)) {
                case 1 :
                    deplacement(l_depart, c_depart, l_arrivee, c_arrivee, *&plateau);
                    break;
                case 2 :
                    printf("une piece est deja sur la case\n");
                    break;
                case 4 :
                    printf("probleme de deplacement\n");
                    break;
                default :
                    printf("erreur\n");
            }
            break;
        case 3 :
            switch(verification_fou(l_depart, c_depart, l_arrivee, c_arrivee, *&plateau)) {
                case 1 :
                    deplacement(l_depart, c_depart, l_arrivee, c_arrivee, *&plateau);
                    break;
                case 2 :
                    printf("une piece est deja sur la case fou\n");
                    break;
                case 5 :
                    printf("prob\n");
                    break;
                case 3 :
                    printf("deplacement impossible\n");
                    break;
                case 0 :
                    printf("erreur 1");
                    break;
                default :
                    printf("erreur 2\n");
            }
            break;
        default :
            deplacement(l_depart, c_depart, l_arrivee, c_arrivee, *&plateau);
    }
}


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.


Merci d'y penser dans tes prochains messages.

Configuration: Windows / Chrome 101.0.4951.67
A voir également:

2 réponses

yg_be Messages postés 22751 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 mai 2024 1 477
24 mai 2022 à 09:09
bonjour,
As-tu envisagé, avant et dans les boucles, de faire printf() avec les valeurs des variables importantes?
Cela ne t'aiderait-il pas à progresser dans la compréhension du comportement du code que tu as écrit?
0
yg_be Messages postés 22751 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 mai 2024 1 477
24 mai 2022 à 09:15
as-tu testé les quatre cas de déplacement du fou?
0
Louis > yg_be Messages postés 22751 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 mai 2024
24 mai 2022 à 09:16
j'ai résolu le probleme !
merci quand même !
0
yg_be Messages postés 22751 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 mai 2024 1 477
24 mai 2022 à 09:15
Merci d'utiliser les balises de code quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0