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