If/else if

Résolu
Grafiteur -  
 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

  1. Grafiteur
     
            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
    0
    1. Grafiteur
       
      je précise que même cela me donne le même mauvais résultat
      0
    2. Grafiteur
       
              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 !!!
      0
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    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] = '#';
    0
    1. Grafiteur
       
      oui effectivement, j'aurais dû faire un graphe de contrôle
      0