welcome: please sign in

2009-12-06 01:40:06時点のリビジョン28

メッセージを消す
location: 盤の表現

盤の表現

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

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

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

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

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

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

後の課題でbanの内容をこのように初期化します。


データの初期化

インスタンス変数の初期化はどこで行うべきでしょうか。

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

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

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


盤を表示する

配列 ban の内容にしたがって画像を指定の位置に表示するプログラムを作ります。

画像ファイルは game0.png を使います。 ダウンロードしてプログラムと同じ場所に保存しなさい。

33,34行目の ??? の部分に正しい式を記述しなさい。

   1 import javax.swing.*;
   2 import java.awt.*;
   3 
   4 public class Game12 extends JPanel
   5 {
   6         int haba;
   7         int yoko, tate;
   8         String fname;
   9         Image img;
  10         int[][] ban;
  11         
  12         public static void main(String[] args)
  13         {
  14                 JFrame f;
  15                 Container cp;
  16                 Game12 p;
  17                 
  18                 f = new JFrame();
  19                 f.setTitle("15game");
  20                 f.setVisible(true);
  21                 f.setSize(500, 500);
  22                 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  23                 cp = f.getContentPane();
  24                 p = new Game12();
  25                 p.haba = 100;
  26                 p.yoko = 4;
  27                 p.tate = 4;
  28                 p.fname = "test.jpg";
  29                 p.shokika();
  30                 cp.add(p);
  31         }
  32         
  33         void shokika()
  34         {
  35                 int x, y;
  36                 
  37                 ImageIcon ii = new ImageIcon(fname);
  38                 img = ii.getImage();
  39                 ban = new int[yoko][tate];
  40                 初期化
  41         }
  42         
  43         public void paintComponent(Graphics g)
  44         {
  45                 int dx, dy, sx, sy;
  46                 
  47                 for(dy = 0; dy < tate; dy++)
  48                         for(dx = 0; dx < yoko; dx++)
  49                         {
  50                                 sx = 計算式;
  51                                 sy = 計算式;
  52                                 g.drawImage(img,
  53                                         dx*haba, dy*haba, (dx+1)*haba, (dy+1)*haba,
  54                                         sx*haba, sy*haba, (sx+1)*haba, (sy+1)*haba,
  55                                         this);
  56                         }
  57         }
  58 }