サイズ: 3428
コメント:
|
サイズ: 3425
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 6: | 行 6: |
多次元配列を使う場合には、何番目の添え字が何に対応するかをしっかり理解しておくこと。 | 多次元配列を使う場合には、何番目の添え字が何に対応するかをしっかり考えておくこと。 |
盤の表現
整数型の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になります。
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[i][j]で上からi番目、左からj番目にどのピースがあるかを表します。
- i,jは0から数えます。
ban[2][1] = 3 は図の位置に3番のピースがあることを表します。
3
盤を表示する
配列 ban の内容にしたがって画像を指定の位置に表示するプログラムを作ります。
メインメソッドとコンストラクタは前回までと同様に記述しなさい。
読み込む画像ファイルは game0.png を使いなさい。
33,34行目の ??? の部分に正しい式を記述しなさい。
1 import javax.swing.*;
2 import java.awt.*;
3 import java.awt.event.*;
4
5 public class Game12 extends JPanel implements MouseListener
6 {
7 static final int pSize = 100;
8 static final int nx = 4;
9 static final int ny = 4;
10
11 Image img;
12 int mx = 0;
13 int my = 0;
14 int[][] ban= {{0,1,2,3}, {4,5,6,7}, {8,9,10,11}, {12,13,14,15}};
15
16 public static void main(String[] args)
17 {
18 ...
19 }
20
21 Game12()
22 {
23 ...
24 }
25
26 public void paintComponent(Graphics g)
27 {
28 int i, j, x, y;
29
30 for(i = 0; i < ny; i++)
31 for(j = 0; j < nx; j++)
32 {
33 x = ??? ;
34 y = ??? ;
35 g.drawImage(img,
36 i*pSize, j*pSize, (i+1)*pSize, (j+1)*pSize,
37 x*pSize, y*pSize, (x+1)*pSize, (y+1)*pSize,
38 this);
39 }
40 g.setColor(Color.orange);
41 g.drawRect(mx, my, pSize, pSize);
42 }
43
44 public void mousePressed(MouseEvent e)
45 {
46 mx = e.getX();
47 my = e.getY();
48 repaint();
49 }
50
51 public void mouseEntered(MouseEvent e) { }
52 public void mouseExited(MouseEvent e) { }
53 public void mouseReleased(MouseEvent e) { }
54 public void mouseClicked(MouseEvent e) { }
55 }
ここまでの実行例を示します。