2017-09-11 4 views
1

2d画面でボートを使ってゲームを作成しようとしていて、画面から外れてしまうとラップするようにしたい。サイドスクロールゲームのようにラップする方法

public static void placeBoat (char [][] boat,int x, int y){ 
    for(int row = 0; row < boat.length; row++){ 
     if(row==x){ 
      for(int column = 0; column < boat[row].length; column++){ 
       if(column==y){boat [x][y] = '>'; 
       boat [x][y-1] = '='; 
       boat [x][y-2] = '|'; 
       boat [x][y-3] = '|'; 
       boat [x][y-4] = '='; 
       boat [x][y-5] = '<'; 
       } 
      } 
     } 
    } 


} 

だから例として、これは私がこれらの座標を取得するときに何が起こるかであり、これはそれが左に船の前部がプリントされ、その後、船の残りの部分が印刷された参照座標prints.Theものですそれの。

1,18, 
6,19, 
2,6, 
5,8, 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~<=||=>~~~~~~~~~~~~~ 
~<=||=>~~~~~~~~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
~~~<=||=>~~~~~~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~<=||=>~~~~~~~~~~~~ 

座標の一つが5少ないしyの値として持っている場合は、これを行う方法を把握しようとしているが、私が午前問題その後、船の他の部分が画面から外れになるので、それは私がyが4の場合のようにoutofbounds例外を取得すると、4-5になり、範囲外の例外が発生します。 if(y < 5)を実行し、それについて別個の陳述を行うつもりでしたが、yが4,3,2,1および0の場合にはそれを行わなければなりませんでした。ありがとう!

+1

ボート全体またはその個々の文字は何ですか? –

+0

ボート全体ではなく個性的なキャラクターなので、ボートのコードが0,1の場合、最初の行は次のようになります。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~ =範囲外になった部分だけが折り返します –

+0

次に座標をインクリメントした後にモジュロを使用します。見てみましょう:https://codereview.stackexchange.com/questions/58063/screen-wraparound –

答えて

0

ボート部品を左に折り返す場合は、部品を配置する前にyの位置を計算する必要があり、ループは適切ではありません。

一般に、一度に1つのボートしか配置していないので、グリッドをループする必要はありません。

全体の方法は、xyの値に基づいてボートの位置を計算し、グリッドを直接修正することで置き換えることができます。

public static void placeBoat(char [][] boat, int x, int y){ 
    // the first part is at y 
    boat [x][y] = '>'; 

    // size is 5 because there 5 more parts to the boat 
    int[] nextYs = new int[5]; 

    for (int j = 0; j < nextYs.length; j++) { 
     // next y is at y - 1 
     int nextY = y - 1; 

     // next y is to the left 
     if (nextY >= 0) { 
      // set y to - 1 
      y = y - 1; 
     // next Y is to the right 
     } else { 
      // next y and y itself should be set to the last column 
      nextY = y = boat[x].length - 1; 
     } 

     nextYs[j] = nextY; 
    } 

    // print the other parts     
    boat [x][nextYs[0]] = '='; 
    boat [x][nextYs[1]] = '|'; 
    boat [x][nextYs[2]] = '|'; 
    boat [x][nextYs[3]] = '='; 
    boat [x][nextYs[4]] = '<'; 
} 
+1

ありがとう! –

関連する問題