2017-05-21 4 views
0

J'essaie de faire un tableau de jeu pour bomberman dans le traitement avec un tableau 2D. (La version finale aura des couleurs ou des bitmaps et les propriétés de chaque type de bloc et définir l'espace de marche que le joueur a.)Traitement: Comment colorier les carrés dessinés par ma matrice 2D dans différentes couleurs?

Je veux que ce plateau de jeu qui se compose de 11 lignes et 11 colonnes d'avoir carrés de couleurs différentes pour chaque type de bloc dans le jeu. (j étant un bloc solide, i étant l'espace de marche et k étant un bloc cassables, comme vous le verrez dans le tableau)

Je l'ai déjà réussi à dessiner le tableau/bord, mais maintenant je dois le colorier correctement.

J'ai essayé de colorer un type de bloc d'une certaine manière, mais il a simplement coloré la totalité de la carte.

C'est mon code pour l'instant:

//Amnt of Columns & Rows 
int cols = 11; 
int rows = 11; 

//Block types 
int i; 
int j; 
int k; 


void setup() { 
    size(440, 440); 


//Game Board 
    int [][] field = { 
    {j, j, j, j, j, j, j, j, j, j, j}, 
    {j, i, i, i, i, k, i, i, i, i, j}, 
    {j, i, j, i, j, i, j, i, j, k, j}, 
    {j, k, k, i, i, i, i, i, i, i, j}, 
    {j, i, j, i, j, k, j, i, j, i, j}, 
    {j, i, i, i, i, k, i, i, i, i, j}, 
    {j, k, j, k, j, i, j, k, j, i, j}, 
    {j, i, k, i, i, i, i, i, i, i, j}, 
    {j, i, j, i, j, k, j, i, j, i, j}, 
    {j, i, i, i, i, k, i, i, i, k, j}, 
    {j, j, j, j, j, j, j, j, j, j, j} }; 


    // Draw Board 
    for (i = 0; i < cols; i+=1) { 
    for (j = 0; j < rows; j+=1) { 

     if(field[i][j]==1) 

     if(field[i][j]==i){ 
     fill(0);} 

     if(field[i][j]==k){ 
     fill(200,0,0);} else 
     if(field[i][j]==j){ 
     fill(0,200,0);} 

     rect(i * 40, j * 40, 40, 40); 


    } 
    } 
} 

Et ceci est mon résultat:

As you can see it's all red (and not only the k blocks)

Répondre

0

Il ne fait pas une tonne de sens pour vous de stocker le i , j et k en haut de votre esquisse, puis utilisez-les comme variables de boucle. Que comparez-vous exactement dans ces déclarations if? S'il vous plaît prenez l'habitude de votre programme afin que vous compreniez exactement ce qu'il fait. Mais fondamentalement, vous devriez vraiment utiliser deux ensembles de variables différents, et vous devriez les nommer quelque chose de plus significatif. quelque chose comme ceci:

int spaceType = 0; 
int blockType = 1; 
int bombType = 2; 

ensuite dans vos for boucles, vous voulez utiliser différentes variables, qui ont encore des noms plus descriptifs:

for (int cellX = 0; cellY < cols; cellX++) { 
    for (int cellY = 0; cellY < rows; cellY++) { 

Enfin, vos if déclarations doivent vérifier si la cellule est un type particulier. Notez que vos déclarations if actuelles ne font pas une tonne de sens:

if(field[i][j]==1) 
    if(field[i][j]==i){ 
    fill(0); 
    } 

Cette première vérifie si la cellule est 1, et vérifie ensuite si elle est égale à i, qui est une variable de boucle.

Aussi, s'il vous plaît prenez l'habitude d'utiliser l'indentation appropriée et accolades {} autour de chaque if déclaration et for boucle. Je suppose que vous vouliez deux instructions if ci-dessus, mais comme il n'y a pas de parenthèses, ce n'est pas comme ça que ça fonctionne. Encore une fois, pas à pas à travers ce avec un débogueur (ou même simplement l'ajout println() déclarations pourraient vous aider à comprendre beaucoup de ce genre de choses

+0

désolé, Im un noob – Unarmed

+0

mais comme une question plus courte:.. Pourquoi ça marche pas?: 'if (champ [i] [j] == k) { remplir (200,0,0);} sinon si (champ [i] [j] == j) { remplir (0,200, 0);} ' - Je pense que cela indique au programme de colorer tout le rouge de ** k ** et le bleu de ** j **. – Unarmed

+0

@Unarmed Quand avez-vous déjà défini la valeur de 'k'? –