If/else if [Résolu/Fermé]

Signaler
-
 Grafiteur -
Bonjour,

je vous explique rapidement, je fais une map pour un jeu mais j'ai un petit probléme de génération de motif

en gros je veux ce motif comme ça :
V = vide

VVVVVVVVVVVV...
VVVVVVVVVVVV...
VVVV##VVVV##...
VVVVVVVVVVVV...
VVVVVVVVVVVV...
V##VVVV##VVV...
VVVVVVVVVVVV...
VVVVVVVVVVVV...
VVVV##VVVV##...
VVVVVVVVVVVV...
VVVVVVVVVVVV...
V##VVVV##VVV...
....


Alors qu'avec ce code :
        for(int l = 1; l < board.length-1; l++) {
            for(int c = 1; c < board[0].length-1; c++) {
                if ( l%6==0 && (c%6==1 || c%6==2)) {
                    board[l][c] ='#';
                }
                else if ( l%3==0 && ((c+1)%6==0 || (c+1)%6==5)){
                    board[l][c] = '#';
                }
            }
        }

Les deux boucle if sont bonnes, elles me font ce qui est attendu mais
je vu que si n%6 = 0 alors n%3 = 0
MAIS
normalement un simple else if devrait débloquer cette situation ? non ?
je tourne en rond depuis 1h, après promis je vais me coucher...
actuelle j'ai ça :

VVVVVVVVVVVV...
VVVVVVVVVVVV...
VVVV##VVVV##...
VVVVVVVVVVVV...
VVVVVVVVVVVV...
V##V##V##V##...
VVVVVVVVVVVV...
VVVVVVVVVVVV...
VVVV##VVVV##...
VVVVVVVVVVVV...
VVVVVVVVVVVV...
V##V##V##V##...
....




2 réponses

        boolean paire = false;
        for(int l = 1; l < board.length-1; l++) {
            for(int c = 1; c < board[0].length-1; c++) {
                if ( l%6==0 && (c%6==1 || c%6==2)) {
                    board[l][c] = '#';
                    paire = true;
                }
                if ( l%3==0 && ((c+1)%6==0 || (c+1)%6==5) && !paire){
                    board[l][c] = '#';
                }
                paire = false;
            }
        }

bloqué par 6 lignes de code, LE REVE TOTAL
je précise que même cela me donne le même mauvais résultat
        for(int l = 1; l < board.length-1; l++) {
            for(int c = 1; c < board[0].length-1; c++) {

                if ( l%6==0){
                    if (c%6==1 || c%6==2){
                        board[l][c] = new Mur_Indestructible(l, c, this);
                    }
                } else if ( l%3==0 ){
                    if ((c+1)%6==0 || (c+1)%6==5){
                        board[l][c] = new Mur_Indestructible(l, c, this);
                    }
                }
            }
        }


Problème résolu, des fois c'est plus long, mais au moins ça fonctionne !!!
Messages postés
16121
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
30 novembre 2020
2 739
Bonjour,

Si tu fais un else, il s'applique sur l'ensemble de la condition, pas juste sur la partie l%6 à moins de la décomposer :

if (l % 6 == 0) {
    if (c % 6 == 1 || c % 6 == 2)
        board[l][c] = '#';
} else if (l % 3 == 0) {
    if (c % 6 == 4 || c % 6 == 5)
        board[l][c] = '#';
}

Remarque : tu peux aussi faire tout ça en une seule condition :

if ((l % 6 == 0 && (c % 6 == 1 || c % 6 == 2))
        || (l % 6 != 0 && l % 3 == 0 && (c % 6 == 4 || c % 6 == 5)))
     board[l][c] = '#';
oui effectivement, j'aurais dû faire un graphe de contrôle