2017-05-21 4 views
0

私は、ボンバーマン用のゲームボードを2D配列で処理しようとしています。 (最終版は、色やビットマップと各ブロックタイプの性質を持つことになりますし、プレイヤーが持っている歩行スペースを定義します。)処理:2次元配列で描かれた四角形をさまざまな色でどのように色付けできますか?

私は11行と11列で構成され、このゲームボードを持っていると思いますゲームの各ブロックタイプごとに異なる色の四角形を表示します。 (Jは固体ブロックされ、私はあなたは配列に表示されますよう、破壊可能なブロックされて歩行空間とKある)

私はすでに配列/ボードを描画するために管理してきましたが、今私はそれを正しく色付けする必要があります。

1つのブロックタイプを特定の方法で色付けしようとしましたが、ボード全体が着色されました。

これが今の私のコードです:

//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); 


    } 
    } 
} 

そして、これが私の結果である:

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

答えて

0

あなたがiを保存することは意味のトンがありません、j、およびkの変数をスケッチの先頭に追加し、それらをループ変数として使用します。それらのifのステートメントで正確に何を比較していますか? debuggingあなたのプログラムの習慣に入るようにして、それが何をしているのかを正確に理解してください。

しかし、基本的には、実際には2つの異なる変数セットを使用する必要があります。より意味のあるものに名前を付ける必要があります。このような何か:

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

は、その後、あなたのforループで、あなたは別の変数を使用したいと思う、それは再び、より説明的な名前を持っている:

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

は最後に、あなたのif文は、細胞かどうかを確認する必要があります特定のタイプです。セルが1であるかどうかを

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

これを最初にチェックし、それがループ変数であるiを、等しいかどうかをチェックします。あなたの現在のif文が意味のトンをしないことに注意してください。

また、適切な字下げと中括弧{}を約if文、文節をforとする習慣を覚えてください。上記の2つの別々の文が必要だと思っていますが、中括弧がないので、それは動作していません。ここでも、デバッガでこれをステップ実行する(あるいは単にprintln()文を追加すると、このようなものの多くを把握に役立つだろう

+0

申し訳ありませんが、イムのnoobは – Unarmed

+0

が、短い質問など:。。 なぜこれが動作しませんか?(field [i] [j] == j){ fill(0,200、0、200); if(field [i] [j] == k){ fill(200,0,0);} else 0);} ' - これは、すべて** k **の赤と** j **の青を着色するようにプログラムに指示すると思います。 – Unarmed

+0

@Unarmedいつ 'k 'の値を設定しますか? –

関連する問題