サイズ: 3385
コメント:
|
サイズ: 3133
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 1: | 行 1: |
#acl All: | |
行 20: | 行 19: |
. 次の図と値が同じです。0と書いてあるピースの値は0。 | |
行 22: | 行 22: |
16個のピースが図のとおりの位置にある場合、配列の内容は次のようになります。 | 16個のピースが図のとおりの位置にある場合、配列の各要素の値は次のようになります。 |
行 36: | 行 36: |
後の課題でbanの内容をこのように初期化します。 | |
行 38: | 行 37: |
== データの初期化 == | == 配列の初期化 == |
行 40: | 行 39: |
インスタンス変数の初期化はどこで行うべきでしょうか。 | 配列banはインスタンス変数として作成し初期化します。 初期化はどこで行うべきでしょうか。 |
行 48: | 行 49: |
いずれの方法をとるかは、つぎのことを考慮して決めます。 | いずれの方法をとるかは、次のことを考慮して決めます。 |
行 54: | 行 55: |
今回は、初期化を行うメソッドを別に用意しその中で行うことにします。 初期化を行うメソッドはshokika()とし、コンストラクタから呼び出します。 |
|
行 58: | 行 64: |
メインメソッドとコンストラクタは前回までと同様に記述しなさい。 | ---- === 演習 === |
行 60: | 行 67: |
読み込む画像ファイルは [[attachment:game0.png]] を使いなさい。 | (1)38行目 banの要素を ||0||1||2||3|| ||4||5||6||7|| ||8||9||10||11|| ||12||13||14||15|| に初期化するための文を書きなさい。何行かになります。 |
行 62: | 行 75: |
33,34行目の ??? の部分に正しい式を記述しなさい。 {{{#!java import javax.swing.*; import java.awt.*; public class Game12 extends JPanel { int haba; int yoko, tate; String fname; Image img; int[][] ban; public static void main(String[] args) { ... Game12 p; ... p = new Game12(); p.haba = 100; p.yoko = 4; p.tate = 4; p.fname = "game0.png"; p.shokika(); ... } void shokika() { int x, y; ImageIcon ii = new ImageIcon(fname); img = ii.getImage(); ban = new int[yoko][tate]; 初期化 } public void paintComponent(Graphics g) { int dx, dy, sx, sy; for(dy = 0; dy < tate; dy++) for(dx = 0; dx < yoko; dx++) { sx = 計算式; sy = 計算式; g.drawImage(img, dx*haba, dy*haba, (dx+1)*haba, (dy+1)*haba, sx*haba, sy*haba, (sx+1)*haba, (sy+1)*haba, this); } } } }}} |
(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です。 |
盤の表現
整数型の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。
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はインスタンス変数として作成し初期化します。
初期化はどこで行うべきでしょうか。
次の方法が考えられます。
- コンストラクタ内で行う。
- 初期化を行うメソッドを別に用意し、その中で行う。
- 呼び出し側で行う。
いずれの方法をとるかは、次のことを考慮して決めます。
- インスタンス作成時に値が決まっているか
- インスタンス使用中に値は変わるか
- 初期化に手間がかかるか
- 別途値を指定することがあるか
今回は、初期化を行うメソッドを別に用意しその中で行うことにします。 初期化を行うメソッドはshokika()とし、コンストラクタから呼び出します。
盤を表示する
配列 ban の内容にしたがって画像を指定の位置に表示するプログラムを作ります。
演習
(1)38行目
- banの要素を に初期化するための文を書きなさい。何行かになります。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(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です。