Java基于swing实现的弹球游戏代码

本文实例讲述了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程序设计有所帮助。

(0)

相关推荐

  • Java实力弹弹球实现代码

    先看看效果图: 直接上代码了. 微调按钮加画布画几个圆,再实现监听... package cn.hncu.threadDemo.thread2; import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEven

  • java实现简单的弹球游戏

    弹球游戏实现原理: 隔一定时间(小于1秒)重新绘制图像,因为Graphics类是一个抽象类,创建子类的时候需要把所有涉及的方法都得重写,所以这里使用的是创建Canvas的子类,只需要重写它的paint()方法来实现.这里我们用了键盘监听事件.Timer类等. 游戏说明: 该弹球游戏中的小球会随着时间增加速度且速度最多是横向速度和垂直速度为10.当小球的y坐标(垂直坐标)大于球拍的y坐标(垂直坐标)即判断游戏结束.控制台显示的是小球的x方向的速度和y方向的速度. import java.awt.*

  • 解析Java中的定时器及使用定时器制作弹弹球游戏的示例

    在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现.下面LZ就其原理.实例以及Timer缺陷三个方面来解析java Timer定时器. 一.简介       在java中一个完整定时任务需要由Timer.TimerTask两个类来配合完成. API中是这样定义他们的,Timer:一种工具,线程用其安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行.由TimerTask:Timer 安排为一次执行或重复执行的任务.

  • Java基于swing实现的弹球游戏代码

    本文实例讲述了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;

  • java基于swing实现的五子棋游戏代码

    本文实例讲述了java基于swing实现的五子棋游戏代码.分享给大家供大家参考. 主要功能代码如下: 复制代码 代码如下: import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Main extends JFrame implements ActionListener{         private static final long serialVersionUID = 1L;      

  • Java基于Swing实现的打猎射击游戏代码

    本文实例讲述了Java基于Swing实现的打猎射击游戏代码.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: package Game; import java.awt.Graphics; import java.awt.Image; import javax.swing.JPanel; public class BackgroundPanel extends JPanel {         private static final long serialVersionUID

  • java基于swing实现的连连看代码

    本文实例讲述了java基于swing实现连连看代码.分享给大家供大家参考. 主要功能代码如下: 复制代码 代码如下: package llkan; import javax.swing.*; import java.awt.*; import java.awt.event.*; /**  * 连连看游戏  * @author Administrator  *2014年10月17日  */ public class MainGame implements ActionListener {     

  • java实现的简单猜数字游戏代码

    本文实例讲述了java实现的简单猜数字游戏代码.分享给大家供大家参考. 具体代码如下: 复制代码 代码如下: import java.util.InputMismatchException; import java.util.Scanner; public class Main {         public static void main(String[] args) {                 // 产生一个随机数                 int number = (in

  • java基于poi导出excel透视表代码实例

    这篇文章主要介绍了java基于poi导出excel透视表代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从前,我是一个前端程序猿,怀着对打通任(前)督(后)二(开)脉(发)的梦想转了后端,自学两礼拜java+spring全家桶,直接上项目实战.最近接到一需求:将业务数据导出一张透视表. 需求开发完成已近有一段时间了,甲方的大爷大妈,爷爷奶奶们也都用的很开心,我也很开心,于是就心想咱学了也不能白学,所以写下这篇随笔. 先看下用easypo

  • 基于curses库实现弹球游戏

    在网上找到,某人在基于Linux终端,用curses库实现的弹球游戏.本人曾经也做过五子棋游戏,分在其它文章中分享. /* * 基于curses库弹球游戏,编译gcc xxx.c -lcurses */ #include <curses.h> #include <sys/time.h> #include <signal.h> #define RIGHT COLS-1 /*球所能到达的当前屏幕最大水平范围*/ #define BOTTOM LINES-1 /*球所能到达的

  • 基于jquery的地址栏射击游戏代码

    演示地址:http://demo.jb51.net/js/2011/hunt/index.htm玩法向下看 请看地址栏上的字母 O! 你使用O来向 a射击. 使用键盘上的 左箭头 和 右箭头 移动字母O. 当O移动到 a 上时,按 空格键射击! 游戏会定时30秒时间,按ESC键重新开始. 注:请使用系统自带的IE浏览器来打开本链接. 你使用O来向 a射击. 使用键盘上的 左箭头 和 右箭头 移动字母O. 当O移动到 a 上时,按 空格键射击! // // 核心代码: 复制代码 代码如下: (fu

  • 基于JavaScript实现猜数字游戏代码实例

    环境 vscode 1.46 Microsoft Edge 83 示例 以下内容为了解和熟悉 JavaScript,不需要理解,能够复制粘贴并正确运行即可. 新建网页模板 在 vscode 中新建一个 index.html 文件,然后输入以下内容. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>猜数字游戏</title> <style&

  • Java基于接口实现模拟动物声音代码实例

    (1)编写接口Animal (Animal.java) public interface Animal{ public abstract void cry(); public abstract String getAnimalName(); } (2)编写模拟类Simulator (Simulator.java) public class Simulator { public void playSound(Animal animal) { System.out.print("正在播放模拟&quo

随机推荐