| 情報学部 | 菅沼ホーム | Java 目次 | 基礎技術目次 | 索引 |

ー Test.java ー
001 import java.awt.*;
002 import java.awt.event.*;
003 import javax.swing.*;
004
005 public class Test {
006 public static void main (String[] args)
007 {
008 Win win = new Win("背景(マップ)1");
009 }
010 }
011
012 class Win extends JFrame
013 {
014 /******************/
015 /* コンストラクタ */
016 /******************/
017 Win(String name)
018 {
019 // JFrameクラスのコンストラクタ(Windowのタイトルを引き渡す)
020 super(name);
021 // Windowの大きさ
022 setSize(440, 370); // +40, +70
023 // 画像の読み込み
024 Image im[] = new Image [2]; // 画像ファイル
025 im[0] = getToolkit().getImage("obj1.jpg"); // イメージの読み込み
026 im[1] = getToolkit().getImage("obj2.jpg"); // イメージの読み込み
027 // ContentPane の取得と MainPanel の追加
028 Dimension d = getSize(); // Windowの大きさ
029 d.width -= 40;
030 d.height -= 70;
031 MainPanel pn = new MainPanel(d, im); // MainPanel オブジェクトの生成
032 getContentPane().add(pn); // MainPanel オブジェクトを ContentPane に追加
033 // ウィンドウを表示
034 setVisible(true);
035 // イベントアダプタ
036 addWindowListener(new WinEnd());
037 }
038
039 /******************************/
040 /* 上,左,下,右の余白の設定 */
041 /******************************/
042 public Insets getInsets()
043 {
044 return new Insets(50, 20, 20, 20);
045 }
046
047 /************/
048 /* 終了処理 */
049 /************/
050 class WinEnd extends WindowAdapter
051 {
052 public void windowClosing(WindowEvent e) {
053 System.exit(0);
054 }
055 }
056 }
057
058 class MainPanel extends JPanel implements Runnable
059 {
060 Thread td;
061 Map mp; // 背景(マップ)
062 Dimension size;
063 Image im[];
064 boolean state = true;
065 // コンストラクタ
066 public MainPanel(Dimension d, Image im1[])
067 {
068 size = d;
069 im = im1;
070 // レイアウトマネージャの停止
071 setLayout(null);
072 // 背景色の設定
073 setBackground(Color.white);
074 // 背景の生成
075 mp = new Map();
076 // スレッドの生成
077 td = new Thread(this);
078 td.start();
079 }
080 // スレッドの実行
081 public void run()
082 {
083 while (state) {
084 try {
085 td.sleep(30);
086 }
087 catch (InterruptedException e) {}
088 mp.x += (int)mp.v_x;
089 repaint();
090 }
091 }
092 // 描画
093 public void paintComponent(Graphics g)
094 {
095 super.paintComponent(g); // 親クラスの描画
096 // 背景の描画
097 for (int i1 = 0; i1 < mp.col; i1++) {
098 int x = mp.x + mp.width * i1;
099 if (x + mp.width >= 0 && x <= size.width) {
100 for (int i2 = 0; i2 < mp.row; i2++) {
101 if (mp.map[i2][i1] > 0) {
102 int y = i2 * mp.height;
103 g.drawImage(im[mp.map[i2][i1]-1], x, y, this);
104 }
105 }
106 }
107 }
108 }
109 }
ー Map.java ー
01 public class Map
02 {
03 int map[][] = {
04 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
05 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
06 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
07 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
08 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
09 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
10 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
11 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
12 {1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2},
13 {1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2},
14 {1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2},
15 {1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2}};
16 int row = 12; // ブロックの行数
17 int col = 26; // ブロックの列数
18 int x; // 背景の位置
19 double v_x = -2; // 背景の水平方向移動速度
20 int width = 25; // ブロックの幅
21 int height = 25; // ブロックの高さ
22 // コンストラクタ
23 public Map()
24 {
25 x = 0;
26 }
27 }
int x[][] = new int [2][3];
int x[][] = new int [2][]; x[0] = new int [3]; // 以下,繰り返し文を使用可能 x[1] = new int [3];
int x[][] = {{1, 2, 3}, {4, 5, 6}}; // 内側の括弧が各行に相当
int x1[] = {1, 2, 3};
int x2[] = {4, 5, 6};
int x[][] = {x1, x2};
001 import java.awt.*;
002 import java.awt.event.*;
003 import javax.swing.*;
004
005 public class Test {
006 public static void main (String[] args)
007 {
008 Win win = new Win("背景(マップ)2");
009 }
010 }
011
012 class Win extends JFrame
013 {
014 /******************/
015 /* コンストラクタ */
016 /******************/
017 Win(String name)
018 {
019 // JFrameクラスのコンストラクタ(Windowのタイトルを引き渡す)
020 super(name);
021 // Windowの大きさ
022 setSize(440, 370); // +40, +70
023 // 画像の読み込み
024 Image im[] = new Image [2]; // 画像ファイル
025 im[0] = getToolkit().getImage("obj1.jpg"); // イメージの読み込み
026 im[1] = getToolkit().getImage("obj2.jpg"); // イメージの読み込み
027 // ContentPane の取得と MainPanel の追加
028 Dimension d = getSize(); // Windowの大きさ
029 d.width -= 40;
030 d.height -= 70;
031 MainPanel pn = new MainPanel(d, im); // MainPanel オブジェクトの生成
032 getContentPane().add(pn); // MainPanel オブジェクトを ContentPane に追加
033 // ウィンドウを表示
034 setVisible(true);
035 // イベントアダプタ
036 addWindowListener(new WinEnd());
037 }
038
039 /******************************/
040 /* 上,左,下,右の余白の設定 */
041 /******************************/
042 public Insets getInsets()
043 {
044 return new Insets(50, 20, 20, 20);
045 }
046
047 /************/
048 /* 終了処理 */
049 /************/
050 class WinEnd extends WindowAdapter
051 {
052 public void windowClosing(WindowEvent e) {
053 System.exit(0);
054 }
055 }
056 }
057
058 class MainPanel extends JPanel implements Runnable
059 {
060 Thread td;
061 Map mp[] = new Map[2]; // 背景(マップ)
062 Dimension size;
063 Image im[];
064 boolean state = true;
065 int dsp[] = {1, 0};
066 // コンストラクタ
067 public MainPanel(Dimension d, Image im1[])
068 {
069 size = d;
070 im = im1;
071 // レイアウトマネージャの停止
072 setLayout(null);
073 // 背景色の設定
074 setBackground(Color.white);
075 // 背景の生成
076 mp[0] = new Map(0);
077 mp[1] = new Map(d.width);
078 // スレッドの生成
079 td = new Thread(this);
080 td.start();
081 }
082 // スレッドの実行
083 public void run()
084 {
085 while (state) {
086 try {
087 td.sleep(30);
088 }
089 catch (InterruptedException e) {}
090 for (int i1 = 0; i1 < 2; i1++) {
091 int k = (i1 + 1) % 2;
092 if (dsp[i1] > 0) {
093 mp[i1].x += (int)mp[i1].v_x;
094 if (mp[i1].x + mp[i1].width * mp[i1].col <= size.width) {
095 mp[k].x = mp[i1].x + mp[i1].width * mp[i1].col;
096 dsp[k] = 1;
097 }
098 else if (mp[i1].x + mp[i1].width * mp[i1].col <= 0)
099 dsp[i1] = 0;
100 }
101 }
102 repaint();
103 }
104 }
105 // 描画
106 public void paintComponent(Graphics g)
107 {
108 super.paintComponent(g); // 親クラスの描画
109 // 背景の描画
110 for (int i0 = 0; i0 < 2; i0 ++) {
111 if (dsp[i0] > 0) {
112 for (int i1 = 0; i1 < mp[i0].col; i1++) {
113 int x = mp[i0].x + mp[i0].width * i1;
114 if (x + mp[i0].width >= 0 && x <= size.width) {
115 for (int i2 = 0; i2 < mp[i0].row; i2++) {
116 if (mp[i0].map[i2][i1] > 0) {
117 int y = i2 * mp[i0].height;
118 g.drawImage(im[mp[i0].map[i2][i1]-1], x, y, this);
119 }
120 }
121 }
122 }
123 }
124 }
125 }
126 }
ー Map.java ー
01 public class Map
02 {
03 int map[][] = {
04 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
05 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
06 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
07 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
08 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
09 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
10 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
11 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
12 {1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2},
13 {1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2},
14 {1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2},
15 {1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2}};
16 int row = 12; // ブロックの行数
17 int col = 26; // ブロックの列数
18 int x; // 背景の位置
19 double v_x = -2; // 背景の水平方向移動速度
20 int width = 25; // ブロックの幅
21 int height = 25; // ブロックの高さ
22 // コンストラクタ
23 public Map(int x)
24 {
25 this.x = x;
26 }
27 }
| 情報学部 | 菅沼ホーム | Java 目次 | 基礎技術目次 | 索引 |