情報学部 | 菅沼ホーム | 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 目次 | 基礎技術目次 | 索引 |