情報学部 | 菅沼ホーム | Java 目次 | 索引 |
[クラス修飾子] クラス識別子(クラス名) { クラス本体(変数やメソッドの定義) }
01 /*****************************/ 02 /* ゲーム枠の作成(全体構造)*/ 03 /* coded by Y.Suganuma */ 04 /*****************************/ 05 import java.io.*; 06 import java.awt.*; 07 import java.awt.event.*; 08 import javax.swing.*; 09 import main.*; 10 11 public class Game { 12 public static void main (String[] args) 13 { 14 Win win = new Win("全体構造"); 15 } 16 } 17 18 class Win extends JFrame 19 { 20 /******************/ 21 /* コンストラクタ */ 22 /******************/ 23 Win(String name) 24 { 25 // JFrameクラスのコンストラクタ(Windowのタイトルを引き渡す) 26 super(name); 27 // Windowの大きさ 28 setSize(460, 390); // +left+right+20, +top+bottom+20 29 // Insets ins = getInsets(); 30 // System.out.println(ins.top + " " + ins.left + " " + ins.bottom + " " + ins.right); 31 // MainPanel の大きさを決定 32 Dimension size = getSize(); 33 size.width -= 60; // パネルの横幅 34 size.height -= 90; // パネルの高さ 35 // ContentPain を取得し,設定 36 Container CP = getContentPane(); // ContentPane を取得 37 CP.setLayout(null); // レイアウトマネージャを停止 38 CP.setBackground(new Color(220, 255, 220)); // 背景色 39 // MainPanel を追加し,設定 40 MainPanel pn = new MainPanel(size); // MainPanel オブジェクトの生成 41 CP.add(pn); // MainPanel オブジェクトを ContentPane に追加 42 pn.setSize(size.width, size.height); 43 pn.setLocation(10, 10); 44 // ウィンドウを表示 45 setVisible(true); 46 // イベントリスナ 47 addWindowListener(new WinEnd()); 48 } 49 50 /******************************/ 51 /* 上,左,下,右の余白の設定 */ 52 /******************************/ 53 public Insets getInsets() 54 { 55 return new Insets(50, 20, 20, 20); 56 } 57 58 /************/ 59 /* 終了処理 */ 60 /************/ 61 class WinEnd extends WindowAdapter 62 { 63 public void windowClosing(WindowEvent e) { 64 System.exit(0); 65 } 66 } 67 }
size.width = size.width - 60; size.height = size.height - 90;
01 package main; 02 03 import java.io.*; 04 import java.awt.*; 05 import java.awt.event.*; 06 import javax.swing.*; 07 import start.*; 08 import game.*; 09 import clear.*; 10 import over.*; 11 12 public class MainPanel extends JPanel implements Runnable 13 { 14 Dimension size; // パネルの大きさ 15 boolean in_game = true; // ゲーム実行中はtrue 16 public int state = 0; // ゲーム状態(0:表紙,1:ゲーム,2:クリア,3:オーバー,4:終了) 17 public int level = 1; // ゲームレベル 18 int old_state = 0; // 直前のゲーム状態 19 StartPanel sp; 20 GamePanel gp; 21 GameClearPanel gcp; 22 GameOverPanel gop; 23 Thread td; 24 // コンストラクタ 25 public MainPanel(Dimension size1) 26 { 27 size = size1; 28 // グリッドレイアウト 29 setLayout(new GridLayout(1, 1, 0, 0)); 30 // ゲームパネルの生成 31 sp = new StartPanel(size, this); // スタート(タイトル) 32 add(sp); 33 // スレッドの生成 34 td = new Thread(this); 35 td.start(); 36 } 37 // ゲームの状態を変更 38 public void run() 39 { 40 while (in_game) { 41 try { 42 td.sleep(100); // 100 ms 毎の実施 43 } 44 catch (InterruptedException e) {} 45 if (state != old_state) { 46 // 前のパネルの削除 47 if (old_state == 0) 48 remove(sp); 49 else if (old_state == 1) 50 remove(gp); 51 else if (old_state == 2) 52 remove(gcp); 53 else 54 remove(gop); 55 // 新しいパネルの追加 56 if (state == 4) // ゲーム終了 57 in_game = false; 58 else { 59 if (state == 0) { // StartPanel 60 sp = new StartPanel(size, this); 61 this.add(sp); 62 sp.repaint(); 63 } 64 else if (state == 1) { // GamePanel 65 gp = new GamePanel(size, this); 66 add(gp); 67 } 68 else if (state == 2) { // GameClearPanel 69 gcp = new GameClearPanel(size, this); 70 add(gcp); 71 } 72 else { // GameOverPanel 73 gop = new GameOverPanel(size, this); 74 add(gop); 75 } 76 validate(); 77 old_state = state; 78 } 79 } 80 } 81 } 82 }
while (論理式) { 文(複数の文も可) }
do { 文(複数の文も可) } while (論理式) ;
for (式1; 式2; 式3) { 文(複数の文も可) }
式1; while (式2) { 文(複数の文も可) 式3; }
for (; in_game; ) {
if (論理式) { 文1(複数の文も可) } else { 文2(複数の文も可) } ・・・・・・
> より大きい a > b 式 a の値が式 b の値より大きいとき真 < より小さい a < b 式 a の値が式 b の値より小さいとき真 >= 以上 a >= b 式 a の値が式 b の値以上のとき真 <= 以下 a <= b 式 a の値が式 b の値以下のとき真
== 等しい a == b 式 a の値と式 b の値が等しいとき真 != 等しくない a != b 式 a の値と式 b の値が等しくないとき真
|| 論理和 x || y 式 x が真か,または,式 y が真のとき真 && 論理積 x && y 式 x が真で,かつ,式 y が真のとき真 ! 否定 ! x 式 x が偽のとき真
if (old_state == 0) remove(sp); else { if (old_state == 1) remove(gp); else { if (old_state == 2) remove(gcp); else remove(gop); } }
001 package start; 002 003 import java.io.*; 004 import java.awt.*; 005 import java.awt.event.*; 006 import javax.swing.*; 007 import main.*; 008 009 public class StartPanel extends JPanel implements ActionListener, KeyListener 010 //public class StartPanel extends JPanel implements ActionListener 011 { 012 boolean in_game = true; 013 Dimension size; // パネルの大きさ 014 MainPanel mp; 015 JButton bt; 016 // コンストラクタ 017 public StartPanel(Dimension size1, MainPanel mp1) 018 { 019 size = size1; 020 mp = mp1; 021 setSize(size.width, size.height); 022 // レイアウトマネージャの停止 023 setLayout(null); 024 // 背景色の設定 025 setBackground(Color.white); 026 // ボタンの配置 027 Font f = new Font("SansSerif", Font.BOLD, 20); 028 FontMetrics fm = getFontMetrics(f); 029 String str = "遊び方"; 030 int w = fm.stringWidth(str) + 40; 031 int h = fm.getHeight() + 10; 032 bt = new JButton(str); 033 bt.setFont(f); 034 bt.addActionListener(this); 035 bt.setSize(w, h); 036 bt.setLocation(size.width/2-w/2, 5); 037 add(bt); 038 // キーリスナの追加 039 addKeyListener(this); 040 // addKeyListener(new Key()); 041 } 042 // 描画 043 public void paintComponent(Graphics g) 044 { 045 super.paintComponent(g); // 親クラスの描画 046 FontMetrics fm; 047 Font f; 048 String str1, str = "Game Title"; 049 int w, h; 050 051 f = new Font("Serif", Font.BOLD, 25); 052 fm = g.getFontMetrics(f); 053 str1 = str + " (Serif)"; 054 w = fm.stringWidth(str1); 055 h = fm.getHeight() + 60; 056 g.setFont(f); 057 g.drawString(str1, size.width/2-w/2, h); 058 059 f = new Font("SansSerif", Font.BOLD, 25); 060 fm = g.getFontMetrics(f); 061 str1 = str + " (SansSerif)"; 062 w = fm.stringWidth(str1); 063 h = h + fm.getHeight() + 5; 064 g.setFont(f); 065 g.drawString(str1, size.width/2-w/2, h); 066 067 f = new Font("Dialog", Font.BOLD, 25); 068 fm = g.getFontMetrics(f); 069 str1 = str + " (Dialog)"; 070 w = fm.stringWidth(str1); 071 h = h + fm.getHeight() + 5; 072 g.setFont(f); 073 g.drawString(str1, size.width/2-w/2, h); 074 075 f = new Font("DialogInput", Font.BOLD, 25); 076 fm = g.getFontMetrics(f); 077 str1 = str + " (DialogInput)"; 078 w = fm.stringWidth(str1); 079 h = h + fm.getHeight() + 5; 080 g.setFont(f); 081 g.drawString(str1, size.width/2-w/2, h); 082 083 f = new Font("Serif", Font.PLAIN, 20); 084 fm = g.getFontMetrics(f); 085 str1 = "ゲーム開始:「 s 」キー"; 086 w = fm.stringWidth(str1); 087 h = size.height - fm.getHeight() - 10; 088 g.setFont(f); 089 g.drawString(str1, size.width/2-w/2, h); 090 // この Component が入力フォーカスを取得することを要求 091 requestFocusInWindow(); 092 } 093 // ボタンがクリックされたときの処理 094 public void actionPerformed(ActionEvent e) 095 { 096 if (e.getSource() == bt) { 097 Method db = new Method(); 098 db.setVisible(true); 099 requestFocusInWindow(); 100 } 101 } 102 // キーが押されたときの処理(イベントリスナ) 103 public void keyPressed(KeyEvent ke) 104 { 105 if (ke.getKeyCode() == 83) // 「s」キー 106 mp.state = 1; 107 } 108 public void keyReleased(KeyEvent ke) {} 109 public void keyTyped(KeyEvent ke) {} 110 // キーが押されたときの処理(イベントアダプタ) 111 /* 112 class Key extends KeyAdapter { 113 public void keyPressed(KeyEvent ke) 114 { 115 if (ke.getKeyCode() == 83) // 「s」キー 116 mp.state = 1; 117 } 118 } 119 */ 120 } 121 122 /******************/ 123 /* ゲームの遊び方 */ 124 /******************/ 125 class Method extends JDialog 126 { 127 // コンストラクタ 128 Method() 129 { 130 setTitle("ゲームの遊び方"); 131 // ContetPain 132 Container cp = getContentPane(); 133 cp.setLayout(new FlowLayout(FlowLayout.CENTER)); 134 cp.setBackground(new Color(220, 255, 220)); // 背景色 135 Font f = new Font("MS 明朝", Font.PLAIN, 20); 136 setSize(550, 160); 137 // TextArea の追加 138 JTextArea ta = new JTextArea(5, 50); 139 ta.setFont(f); 140 ta.setEditable(false); 141 ta.setLineWrap(true); 142 ta.setText("遊び方\n"); 143 ta.append(" 遊び方(その1)\n"); 144 ta.append(" 遊び方(その2)\n"); 145 ta.append(" 遊び方(その3)\n"); 146 ta.append(" 遊び方(その4)\n"); 147 ta.append(" 遊び方(その5)\n"); 148 JScrollPane scroll = new JScrollPane(ta); 149 cp.add(scroll); 150 // Window を閉じるため 151 addWindowListener(new WinEnd()); 152 } 153 // 終了処理 154 class WinEnd extends WindowAdapter 155 { 156 public void windowClosing(WindowEvent e) { 157 setVisible(false); 158 } 159 } 160 }
001 package game; 002 003 import java.awt.*; 004 import java.awt.event.*; 005 import javax.swing.*; 006 import java.util.Random; 007 import main.*; 008 009 public class GamePanel extends JPanel implements ActionListener, Runnable 010 { 011 Dimension size; // パネルの大きさ 012 MainPanel mp; 013 JButton bt1, bt2; 014 Image b_image; 015 Random rand; 016 Thread td; 017 boolean in_game = true; 018 int x[], y[]; // 円の位置 019 // コンストラクタ 020 public GamePanel(Dimension size1, MainPanel mp1) 021 { 022 size = size1; 023 mp = mp1; 024 // レイアウトマネージャの停止 025 setLayout(null); 026 // 画像の読み込み 027 if (mp.level == 1) 028 b_image = getToolkit().getImage("image/game1.jpg"); 029 else if (mp.level == 2) 030 b_image = getToolkit().getImage("image/game2.jpg"); 031 else 032 b_image = getToolkit().getImage("image/game3.jpg"); 033 // ボタンの配置 034 Font f = new Font("SansSerif", Font.BOLD, 20); 035 FontMetrics fm = getFontMetrics(f); 036 String str1 = "ゲームクリア"; 037 int w1 = fm.stringWidth(str1) + 40; 038 int h1 = fm.getHeight() + 10; 039 bt1 = new JButton(str1); 040 bt1.setFont(f); 041 bt1.addActionListener(this); // アクションリスナ 042 bt1.setSize(w1, h1); 043 044 String str2 = "ゲームオーバー"; 045 int w2 = fm.stringWidth(str2) + 40; 046 int h2 = fm.getHeight() + 10; 047 bt2 = new JButton(str2); 048 bt2.setFont(f); 049 bt2.addActionListener(this); // アクションリスナ 050 bt2.setSize(w2, h2); 051 052 int w = size.width / 2 - (w1 + w2 + 5) / 2; 053 bt1.setLocation(w, size.height-h1-20); 054 add(bt1); 055 bt2.setLocation(w+w1+5, size.height-h1-20); 056 add(bt2); 057 // ランダム変数の初期化,初期位置の決定 058 rand = new Random(); 059 x = new int [3]; 060 y = new int [3]; 061 for (int i1 = 0; i1 < 3; i1++) { 062 x[i1] = rand.nextInt(size.width - 40); 063 y[i1] = rand.nextInt(size.height - 40); 064 } 065 // スレッドの生成 066 td = new Thread(this); 067 td.start(); 068 } 069 // スレッドの実行 070 public void run() 071 { 072 while (in_game) { 073 try { 074 if (mp.level == 1) 075 td.sleep(500); 076 else if (mp.level == 2) 077 td.sleep(100); 078 else 079 td.sleep(20); 080 } 081 catch (InterruptedException e) {} 082 for (int i1 = 0; i1 < 3; i1++) { 083 x[i1] = rand.nextInt(size.width - 40); 084 y[i1] = rand.nextInt(size.height - 40); 085 } 086 repaint(); 087 } 088 } 089 // 描画 090 public void paintComponent(Graphics g) 091 { 092 super.paintComponent(g); // 親クラスの描画 093 g.drawImage(b_image, 0, 0, this); 094 for (int i1 = 0; i1 < 3; i1++) { 095 if (i1 == 0) 096 g.setColor(Color.red); 097 else if (i1 == 1) 098 g.setColor(Color.green); 099 else 100 g.setColor(Color.gray); 101 g.fillOval(x[i1], y[i1], 40, 40); 102 } 103 } 104 // ボタンがクリックされたときの処理 105 public void actionPerformed(ActionEvent e) 106 { 107 in_game = false; 108 if (e.getSource() == bt1) // ゲームクリア 109 mp.state = 2; 110 else // ゲームオーバー 111 mp.state = 3; 112 } 113 }
int x1, x2, x3; int y1, y2, y3;
型 変数名[] = new 型 [ n ]; int 変数名[] = { 1, 2, 3, ・・・ }; // 初期設定したい場合(型が int の場合)
i1 += 1; i1 = i1 + 1;
01 package clear; 02 03 import java.awt.*; 04 import java.awt.event.*; 05 import javax.swing.*; 06 import main.*; 07 08 public class GameClearPanel extends JPanel implements ActionListener 09 { 10 Dimension size; // パネルの大きさ 11 MainPanel mp; 12 JButton bt1, bt2; 13 // コンストラクタ 14 public GameClearPanel(Dimension size1, MainPanel mp1) 15 { 16 size = size1; 17 mp = mp1; 18 // レイアウトマネージャの停止 19 setLayout(null); 20 // 背景色の設定 21 setBackground(Color.white); 22 // ボタンの配置 23 Font f = new Font("SansSerif", Font.BOLD, 20); 24 FontMetrics fm = getFontMetrics(f); 25 String str1 = "ゲーム終了"; 26 int w1 = fm.stringWidth(str1) + 40; 27 int h1 = fm.getHeight() + 10; 28 bt1 = new JButton(str1); 29 bt1.setFont(f); 30 bt1.addActionListener(this); // アクションリスナ 31 bt1.setSize(w1, h1); 32 bt1.setLocation(size.width/2-w1-5, size.height-h1-20); 33 add(bt1); 34 35 String str2; 36 if (mp.level == 3) 37 str2 = "最初から再開"; 38 else 39 str2 = "次のレベル"; 40 int w2 = fm.stringWidth(str2) + 40; 41 int h2 = fm.getHeight() + 10; 42 bt2 = new JButton(str2); 43 bt2.setFont(f); 44 bt2.addActionListener(this); // アクションリスナ 45 bt2.setSize(w2, h2); 46 bt2.setLocation(size.width/2+5, size.height-h2-20); 47 add(bt2); 48 } 49 // 描画 50 public void paintComponent(Graphics g) 51 { 52 super.paintComponent(g); // 親クラスの描画 53 Font f = new Font("SansSerif", Font.BOLD, 40); 54 FontMetrics fm = g.getFontMetrics(f); 55 String str = "Game Clear!"; 56 int w = fm.stringWidth(str); 57 g.setFont(f); 58 g.drawString(str, size.width/2-w/2, size.height/2); 59 } 60 // ボタンがクリックされたときの処理 61 public void actionPerformed(ActionEvent e) 62 { 63 if (e.getSource() == bt1) { 64 mp.state = 4; 65 bt1.setEnabled(false); 66 bt2.setEnabled(false); 67 } 68 else { 69 mp.level++; 70 if (mp.level > 3) { // 最初からゲーム再開 71 mp.state = 0; 72 mp.level = 1; 73 } 74 else // レベルアップ 75 mp.state = 1; 76 } 77 } 78 }
01 package over; 02 03 import java.awt.*; 04 import java.awt.event.*; 05 import javax.swing.*; 06 import main.*; 07 08 public class GameOverPanel extends JPanel implements ActionListener 09 { 10 Dimension size; // パネルの大きさ 11 MainPanel mp; 12 JButton bt1, bt2, bt3; 13 // コンストラクタ 14 public GameOverPanel(Dimension size1, MainPanel mp1) 15 { 16 size = size1; 17 mp = mp1; 18 // レイアウトマネージャの停止 19 setLayout(null); 20 // 背景色の設定 21 setBackground(Color.white); 22 // ボタンの配置 23 Font f = new Font("SansSerif", Font.BOLD, 10); 24 FontMetrics fm = getFontMetrics(f); 25 String str1 = "終了"; 26 int w1 = fm.stringWidth(str1) + 40; 27 int h1 = fm.getHeight() + 10; 28 bt1 = new JButton(str1); 29 bt1.setFont(f); 30 bt1.addActionListener(this); // アクションリスナ 31 bt1.setSize(w1, h1); 32 33 String str2 = "現在のレベルで再開"; 34 int w2 = fm.stringWidth(str2) + 40; 35 int h2 = fm.getHeight() + 10; 36 bt2 = new JButton(str2); 37 bt2.setFont(f); 38 bt2.addActionListener(this); // アクションリスナ 39 bt2.setSize(w2, h2); 40 41 String str3 = "最初から再開"; 42 int w3 = fm.stringWidth(str3) + 40; 43 int h3 = fm.getHeight() + 10; 44 bt3 = new JButton(str3); 45 bt3.setFont(f); 46 bt3.addActionListener(this); // アクションリスナ 47 bt3.setSize(w3, h3); 48 49 int w = size.width / 2 - (w1 + w2 + w3 + 10) / 2; 50 bt1.setLocation(w, size.height-h1-20); 51 add(bt1); 52 w += (w1 + 5); 53 bt2.setLocation(w, size.height-h1-20); 54 add(bt2); 55 w += (w2 + 5); 56 bt3.setLocation(w, size.height-h1-20); 57 add(bt3); 58 59 } 60 // 描画 61 public void paintComponent(Graphics g) 62 { 63 super.paintComponent(g); // 親クラスの描画 64 Font f = new Font("SansSerif", Font.BOLD, 40); 65 FontMetrics fm = g.getFontMetrics(f); 66 String str = "Game Over!"; 67 int w = fm.stringWidth(str); 68 g.setFont(f); 69 g.drawString(str, size.width/2-w/2, size.height/2); 70 } 71 // ボタンがクリックされたときの処理 72 public void actionPerformed(ActionEvent e) 73 { 74 if (e.getSource() == bt1) { // ゲーム終了 75 mp.state = 4; 76 bt1.setEnabled(false); 77 bt2.setEnabled(false); 78 bt3.setEnabled(false); 79 } 80 else if (e.getSource() == bt2) // 現在のレベルでゲーム再開 81 mp.state = 1; 82 else { // 最初からゲーム再開 83 mp.state = 0; 84 mp.level = 1; 85 } 86 } 87 }
情報学部 | 菅沼ホーム | Java 目次 | 索引 |