本文實例講述了Java基於swing實現的彈珠遊戲程式碼。分享給大家供大家參考。
主要功能代碼如下:
複製代碼代碼如下:
package Game;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.ButtonGroup;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JRadioButtonMenuItem;
/**
* 遊戲介面類
*
* @author Administrator
*
*/
public class Game extends javax.swing.JFrame {
private static final long serialVersionUID = 1L;
private static Game UI;
private Graphics g;
private Listener ml;
public javax.swing.JLabel text_field;
public javax.swing.JProgressBar pBar;
private String command;
public ArrayList<MyThread> list = new ArrayList<MyThread>();
private javax.swing.JToggleButton button;
public static void main(String args[]) {
UI = new Game();
UI.initUI();
}
/**
* 初始化窗體的方法
*/
public void initUI() {
// 設定標題
this.setTitle("是高手就堅持10s");
// 設定大小
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 = new javax.swing.JLabel();
javax.swing.JLabel lable = new javax.swing.JLabel("時間:");
// 設定文字標籤前景顏色
lable.setForeground(java.awt.Color.red);
text_field.setForeground(java.awt.Color.red);
// 建立進度條對象
pBar = new javax.swing.JProgressBar(0, 330);
// 建立按鈕對象
button = new javax.swing.JToggleButton();
button.setMargin(new Insets(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) {
String com = e.getActionCommand();
if (com.equals("暫停")) {
button.setMargin(new Insets(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(new Insets(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(button);
this.add(lable);
this.add(pBar);
this.add(text_field);
// 的到選單條
JMenuBar bar = creatMenuBar();
// 為表單設定選單條
this.setJMenuBar(bar);
// 設定窗體的可見性
this.setVisible(true);
}
/**
* 建立選單條的方法
*
* @return
*/
public JMenuBar creatMenuBar() {
// 建立選單列對象
JMenuBar bar = new JMenuBar();
// 建立選單對象
JMenu menu_menu = new JMenu("選單");
JMenu difficulty_menu = 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("關於");
// 建立單選選項
JRadioButtonMenuItem easy_item = new JRadioButtonMenuItem(
"簡單");
JRadioButtonMenuItem middle_item = new JRadioButtonMenuItem(
"中");
JRadioButtonMenuItem hard_item = new JRadioButtonMenuItem(
"困難");
// 建立一個按鈕群組
ButtonGroup group = new ButtonGroup();
// 將單選按鈕加入按鈕群組中
group.add(easy_item);
group.add(middle_item);
group.add(hard_item);
// 將單選按鈕加入到選單中
difficulty_menu.add(easy_item);
difficulty_menu.add(middle_item);
difficulty_menu.add(hard_item);
// 透過匿名內部類別來建立動作監聽器
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
command = e.getActionCommand();
// 如果選擇開始,則建立線程對象
if (command.equals("開始") && list.size() == 0) {
creatBall(20, 1);
}
// 如果選擇退出按鈕,則退出程式
if (command.equals("退出")) {
System.exit(0);
}
// 如果選擇簡單按鈕
if (command.equals("簡單") && list.size() == 0) {
creatBall(20, 1);
}
// 如果選擇中按鈕
if (command.equals("中") && list.size() == 0) {
creatBall(50, 2);
}
if (command.equals("困難") && list.size() == 0) {
creatBall(40, 2);
}
if (command.equals("遊戲說明")) {
JOptionPane.showMessageDialog(null,
"移動滑鼠,用擋板接球,如果接不住,就算輸了…/n遊戲可以選擇難度,包括簡單、中等、困難");
}
if (command.equals("關於")) {
JOptionPane
.showMessageDialog(null,
"這是一個用Java編寫的小遊戲…/n製作人:沈冠軍/n時間:2010年8月/n版權所有,翻版必究!");
}
}
};
// 新增動作監聽器
star_item.addActionListener(listener);
exit_item.addActionListener(listener);
easy_item.addActionListener(listener);
middle_item.addActionListener(listener);
hard_item.addActionListener(listener);
help_item.addActionListener(listener);
about_item.addActionListener(listener);
// 將選單選項物件加入到選單物件上
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(difficulty_menu);
bar.add(help_menu);
// 傳回選單列對象
return bar;
}
/**
* 建立線程物件的方法
*
* @param speed
* :速度
*
*/
public void creatBall(int speed, int num) {
Random ran = new Random();
if (ml == null) {
g = UI.getGraphics();
ml = new Listener(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, speed);
list.add(th);
th.start();
}
}
/**
* 得到命令的方法
*/
public String getCommand() {
return command;
}
}
複製代碼代碼如下:
package Game;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/**
* 滑鼠監聽器的類
*
* @author Administrator
*
*/
public class Listener extends MouseAdapter {
private Graphics g;
private int x = 5, y = 620;
private int width = 100, height = 10;
public Listener(Graphics g) {
this.g = g;
}
public void mouseMoved(MouseEvent e) {
// 設定畫布物件顏色
synchronized (this.g) {
g.setColor(Color.black);
g.fillRect(x, y, width, height);
x = e.getX();
g.setColor(java.awt.Color.green);
g.fillRect(x, y, width, height);
}
}
/**
* 得到x的方法
*
* @return:x
*/
public int getX() {
return x;
}
}
運行效果如下圖所示:
希望本文所述對大家的Java程式設計有幫助。