この記事の例では、スイングに基づいて Java で実装されたピンボール ゲーム コードについて説明します。皆さんの参考に共有してください。
主な機能コードは以下のとおりです。
次のようにコードをコピーします。
パッケージゲーム;
java.awt.Graphicsをインポートします。
java.awt.Insetsをインポートします。
インポートjava.awt.event.ActionEvent;
インポート java.awt.event.ActionListener;
java.util.ArrayListをインポートします。
java.util.Randomをインポートします。
インポート javax.swing.ButtonGroup;
javax.swing.JMenuをインポートします。
インポート javax.swing.JMenuBar;
javax.swing.JMenuItemをインポートします。
インポート javax.swing.JOptionPane;
import javax.swing.JRadioButtonMenuItem;
/**
* ゲームインターフェイスクラス
*
* @author 管理者
*
*/
public class Game extends javax.swing.JFrame {
プライベート静的最終ロングシリアルバージョンUID = 1L;
プライベート静的ゲーム UI。
プライベートグラフィックス g;
プライベートリスナーml;
public javax.swing.JLabel テキストフィールド;
public javax.swing.JProgressBar pBar;
プライベート文字列コマンド。
public ArrayList<MyThread> list = new ArrayList<MyThread>();
プライベート javax.swing.JToggleButton ボタン;
public static void main(String args[]) {
UI = 新しいゲーム();
UI.initUI();
}
/**
* フォームを初期化するメソッド
*/
public void initUI() {
// タイトルを設定する
this.setTitle("達人なら10秒粘れ");
// サイズを設定する
this.setSize(610, 635);
// シャットダウンを設定してプログラムを終了します
this.setDefaultCloseOperation(3);
//フォームを開いたときに画面中央に表示するように設定
this.setLocationRelativeTo(null);
//フォームのフローレイアウトマネージャーを設定
this.setLayout(new java.awt.FlowLayout());
//フォームの背景色を設定します
this.getContentPane().setBackground(java.awt.Color.black);
//テキストラベルオブジェクトを作成
text_field = 新しい javax.swing.JLabel();
javax.swing.JLabel ラベル = 新しい javax.swing.JLabel("Time:");
//テキストラベルの前景色を設定します
lable.setForeground(java.awt.Color.red);
text_field.setForeground(java.awt.Color.red);
//プログレスバーオブジェクトを作成する
pBar = 新しい javax.swing.JProgressBar(0, 330);
//ボタンオブジェクトを作成
ボタン = 新しい javax.swing.JToggleButton();
button.setMargin(新しいインセット(0, 0, 0, 0));
button.setIcon(new javax.swing.ImageIcon("images/Pause.gif"));
button.setActionCommand("一時停止");
// 匿名の内部クラスを通じてアクション リスナーを作成します
java.awt.event.ActionListener button_listener = new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
文字列com = e.getActionCommand();
if (com.equals("一時停止")) {
button.setMargin(新しいインセット(0, 0, 0, 0));
button.setIcon(new javax.swing.ImageIcon("images/start.gif"));
button.setActionCommand("続行");
for (int i = 0; i < list.size(); i++) {
list.get(i).PauseThread();
}
}
if (com.equals("続行")) {
button.setMargin(新しいインセット(0, 0, 0, 0));
button.setIcon(new javax.swing.ImageIcon("images/Pause.gif"));
button.setActionCommand("一時停止");
for (int i = 0; i < list.size(); i++) {
list.get(i).ContinueThread();
}
}
}
};
button.addActionListener(button_listener);
this.add(ボタン);
this.add(ラベル);
this.add(pBar);
this.add(テキストフィールド);
// メニューバーに移動します
JMenuBar bar = creatMenuBar();
//フォームのメニューバーを設定します
this.setJMenuBar(バー);
// フォームの表示/非表示を設定します
this.setVisible(true);
}
/**
※メニューバーの作成方法
*
* @戻る
*/
public JMenuBar creatMenuBar() {
//メニューバーオブジェクトを作成
JMenuBar bar = new JMenuBar();
//メニューオブジェクトを作成する
JMenu menu_menu = new JMenu("メニュー");
JMenu 難易度_メニュー = new JMenu("難易度");
JMenu help_menu = new JMenu("ヘルプ");
//メニューオプションオブジェクトを作成
JMenuItem star_item = new JMenuItem("開始");
JMenuItem exit_item = new JMenuItem("終了");
JMenuItem help_item = new JMenuItem("ゲームの説明");
JMenuItem about_item = new JMenuItem("about");
// 無線オプションを作成する
JRadioButtonMenuItem easy_item = new JRadioButtonMenuItem(
"単純");
JRadioButtonMenuItem middle_item = new JRadioButtonMenuItem(
"中くらい");
JRadioButtonMenuItemhard_item = new JRadioButtonMenuItem(
"困難");
//ボタングループを作成する
ButtonGroup グループ = new ButtonGroup();
// ラジオボタンをボタングループに追加します
group.add(easy_item);
group.add(middle_item);
group.add(hard_item);
// ラジオボタンをメニューに追加します
難易度_メニュー.add(easy_item);
難易度_メニュー.add(middle_item);
難易度_メニュー.add(hard_item);
// 匿名の内部クラスを通じてアクション リスナーを作成します
ActionListener リスナー = new ActionListener() {
public void actionPerformed(ActionEvent e) {
コマンド = e.getActionCommand();
// start が選択された場合、スレッド オブジェクトを作成します
if (command.equals("start") && list.size() == 0) {
creatBall(20, 1);
}
// 終了ボタンが選択された場合はプログラムを終了します
if (command.equals("終了")) {
System.exit(0);
}
// シンプルボタンが選択されている場合
if (command.equals("simple") && list.size() == 0) {
creatBall(20, 1);
}
// 中ボタンが選択されている場合
if (command.equals("medium") && list.size() == 0) {
creatBall(50, 2);
}
if (command.equals("difficulty") && list.size() == 0) {
creatBall(40, 2);
}
if (command.equals("ゲーム説明")) {
JOptionPane.showMessageDialog(null,
"マウスを動かし、バッフルを使ってボールをキャッチします。ボールをキャッチできなければ負けです.../nゲームは、簡単、中程度、難しいなどの難易度を選択できます。");
}
if (command.equals("about")) {
Jオプションペイン
.showMessageDialog(null,
"これは Java で書かれた小さなゲームです.../nプロデューサー: Shen Guanjun/nTime: 2010 年 8 月/n著作権、いかなる複製も調査されます!");
}
}
};
//アクションリスナーを追加
star_item.addActionListener(リスナー);
exit_item.addActionListener(リスナー);
easy_item.addActionListener(リスナー);
middle_item.addActionListener(リスナー);
Hard_item.addActionListener(リスナー);
help_item.addActionListener(リスナー);
about_item.addActionListener(リスナー);
// メニュー オプション オブジェクトをメニュー オブジェクトに追加します
menu_menu.add(star_item);
menu_menu.add(exit_item);
help_menu.add(help_item);
help_menu.add(about_item);
//メニューオブジェクトをメニューバーに追加します
bar.add(menu_menu);
bar.add(難易度_メニュー);
bar.add(ヘルプ_メニュー);
// メニューバーオブジェクトを返す
リターンバー。
}
/**
* スレッドオブジェクトを作成するメソッド
*
* @param速度
* :スピード
*
*/
public void creatBall(int 速度, int num) {
ランダム ran = new Random();
if (ml == null) {
g = UI.getGraphics();
ml = 新しいリスナー(g);
UI.addMouseListener(ml);
UI.addMouseMotionListener(ml);
}
for (int i = 0; i < num; i++) {
int x = ran.nextInt(600) + 10;
int y = ran.nextInt(300) + 100;
MyThread th = new MyThread(g, ml, UI, x, y, 速度);
list.add(th);
th.start();
}
}
/**
※コマンドの取得方法
*/
public String getCommand() {
コマンドを返す。
}
}
次のようにコードをコピーします。
パッケージゲーム;
java.awt.Colorをインポートします。
java.awt.Graphicsをインポートします。
インポート java.awt.event.MouseAdapter;
インポート java.awt.event.MouseEvent;
/**
* マウスリスナーのクラス
*
* @author 管理者
*
*/
public class Listener extends MouseAdapter {
プライベートグラフィックス g;
プライベート int x = 5、y = 620;
プライベート int 幅 = 100、高さ = 10;
public Listener(グラフィックス g) {
this.g = g;
}
public void MouseMoved(MouseEvent e) {
//キャンバスオブジェクトの色を設定する
同期済み (this.g) {
g.setColor(Color.black);
g.fillRect(x, y, 幅, 高さ);
x = e.getX();
g.setColor(java.awt.Color.green);
g.fillRect(x, y, 幅, 高さ);
}
}
/**
* xを取得する方法
*
* @return:x
*/
public int getX() {
x を返します。
}
}
ランニング効果は次の図に示されています。
この記事が皆さんの Java プログラミングに役立つことを願っています。