welcome: please sign in
location: "盤の表現"の差分
46と47のリビジョン間の差分
2012-01-11 03:58:53時点のリビジョン46
サイズ: 2985
編集者: masahiko
コメント:
2012-01-11 05:18:01時点のリビジョン47
サイズ: 3269
編集者: masahiko
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 58: 行 58:
----
=== プログラム ===
プログラムの一部を示します。
 {{{
行 59: 行 63:
public class Game5 extends JPanel implements MouseListener

{

 Image img;

 int cx, cy;

 int[][] ban;

 

 Game5()

 {

  ImageIcon ii = new ImageIcon("game0.png");

  img = ii.getImage();

  addMouseListener(this);

  ban = new int[4][4];

  shokika();

 }



 void shokika()

 {

  ban[0][0] = 0;

  ban[1][0] = 2;

  ban[2][0] = 3;

  ban[3][0] = 4;

  ban[0][1] = 5;

  ban[1][1] = 6;

  ...

  ...

  ban[2][3] = 14;

  ban[3][3] = 15;

 }
 ...
 ...
}
 }}}
行 62: 行 125:

(1)38行目
 
banの要素を
配列banの要素の値
行 69: 行 130:
 に初期化するための文を書きなさい。何行かになります。

(2)48,49行目
 . ban[dx][dy]の値からsxとsyを求める式を書きなさい。
 . ban[dx][dy]が0のときはsxは0,syは0です。
 . ban[dx][dy]が1のときはsxは1,syは0です。
 . ban[dx][dy]が2のときはsxは2,syは0です。
 . ban[dx][dy]が4のときはsxは0,syは1です。
 . ban[dx][dy]が9のときはsxは1,syは2です。
に初期化するために、
上の例では16個の代入文を使っていますが、
for文を使って簡潔に書き直しなさい。

盤の表現

整数型の2次元配列 ban で盤面の状態を表すことにします。

  • 多次元配列を使う場合には、何番目の添え字が何に対応するかをしっかり考えておくこと。

ban[x][y]で左からx番目、上からy番目を表すとすると、盤の大きさが4×4の場合 配列と位置の対応はこのようになります。

  • ban[0][0]

    ban[1][0]

    ban[2][0]

    ban[3][0]

    ban[0][1]

    ban[1][1]

    ban[2][1]

    ban[3][1]

    ban[0][2]

    ban[1][2]

    ban[2][2]

    ban[3][2]

    ban[0][3]

    ban[1][3]

    ban[2][3]

    ban[3][3]

この配列の要素の値で、各位置にどのピースが置かれているかを表します。

各ピースに番号をつけ、これを値として使うことにします。

  • 番号は左上から0,1,2,...と図の順につけます。
  • 右下が最後で15になります。
  • 次の図と値が同じです。0と書いてあるピースの値は0。
  • game0s.png

16個のピースが図のとおりの位置にある場合、配列の各要素の値は次のようになります。

  • 0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

値と配列を対応させた表を示します。

  • ban[0][0]は0

    ban[1][0]は1

    ban[2][0]は2

    ban[3][0]は3

    ban[0][1]は4

    ban[1][1]は5

    ban[2][1]は6

    ban[3][1]は7

    ban[0][2]は8

    ban[1][2]は9

    ban[2][2]は10

    ban[3][2]は11

    ban[0][3]は12

    ban[1][3]は13

    ban[2][3]は14

    ban[3][3]は15


配列の初期化

配列banはインスタンス変数として作成し初期化します。

初期化はどこで行うべきでしょうか。

次の方法が考えられます。

  1. コンストラクタ内で行う。
  2. 初期化を行うメソッドを別に用意し、その中で行う。
  3. 呼び出し側で行う。

いずれの方法をとるかは、次のことを考慮して決めます。

  • インスタンス作成時に値が決まっているか
  • インスタンス使用中に値は変わるか
  • 初期化に手間がかかるか
  • 別途値を指定することがあるか

今回は、初期化を行うメソッドを別に用意しその中で行うことにします。 初期化を行うメソッドはshokika()とし、コンストラクタから呼び出します。


プログラム

プログラムの一部を示します。

  • public class Game5 extends JPanel implements MouseListener
    
    {
    
            Image img;
    
            int cx, cy;
    
            int[][] ban;
    
            
    
            Game5()
    
            {
    
                    ImageIcon ii = new ImageIcon("game0.png");
    
                    img = ii.getImage();
    
                    addMouseListener(this);
    
                    ban = new int[4][4];
    
                    shokika();
    
            }
    
    
    
            void shokika()
    
            {
    
                    ban[0][0] = 0;
    
                    ban[1][0] = 2;
    
                    ban[2][0] = 3;
    
                    ban[3][0] = 4;
    
                    ban[0][1] = 5;
    
                    ban[1][1] = 6;
    
                    ...
    
                    ...
    
                    ban[2][3] = 14;
    
                    ban[3][3] = 15;
    
            }
            ...
            ...
    }


演習

配列banの要素の値を

  • 0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

に初期化するために、 上の例では16個の代入文を使っていますが、 for文を使って簡潔に書き直しなさい。

盤の表現 (最終更新日時 2012-01-12 05:52:44 更新者 masahiko)