`

Ball程序

    博客分类:
  • java
阅读更多

 

import java.awt.BorderLayout;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
//import com.myemap.ui.Face;
 
public class BallFrame{
     JButton jbStart;
     JButton jbStop;
     JFrame jf;
     BallPanel bp;

     public BallFrame(){
         jf = new JFrame("Ball Game");
         jf.setLayout(new BorderLayout());

         bp = new BallPanel();

         Panel buttonPanel = new Panel();
         jbStart = new JButton("开始");
         jbStop = new JButton("停止");
         buttonPanel.add(jbStart);
         buttonPanel.add(jbStop);
 
         jf.add(buttonPanel,BorderLayout.SOUTH);
         jf.add(bp,BorderLayout.CENTER);
         this.actionHandler();
         this.showMi();
    }

    private void showMi(){
        jf.setSize(400,300);
        //jf.pack();
        Toolkit tool = Toolkit.getDefaultToolkit();
        double x =tool.getScreenSize().getWidth();
        double y =tool.getScreenSize().getHeight();
        jf.setLocation((int)(x-jf.getWidth())/2,(int)(y-jf.getHeight())/2);

        jf.setVisible(true);
        jf.setResizable(false);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private void actionHandler(){
        jbStart.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                System.out.println("start pressed");
                /*1.创建小球
                  2.创建小球线程
                  3.加入小球*/
                Ball ball = new Ball();
                new BallThread(ball,bp.getBounds()).start();
                bp.addBall(ball);
            }
        });

        jbStop.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {
                System.out.println("stop pressed");
                System.exit(0);
            }
        });
    }

    public static void main(String[] args) {
        //Face.setFace();
        new BallFrame();
    }
}

 

 

import java.awt.Color;
  import java.awt.Rectangle;
  import java.awt.Shape;
  import java.awt.geom.Ellipse2D;
  import java.util.Random;

 public class Ball {
     private double x,y;                    //初始点坐标
     public static final int X_SIZE=20;     //矩形宽度
     public static final int Y_SIZE=20;     //矩形长度
     private int xMoveDis=10;               //x移动距离 步长
     private int yMoveDis=10;               //y移动距离 步长
     private Ellipse2D shape;
 
     private Color color;
     private static Random random;
 
     static {
         random = new Random();
     }

     public Ball(){
         color = new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256));
         xMoveDis = 5+random.nextInt(5)-2;
         yMoveDis = 5+random.nextInt(5)-2;
     }

     public Shape getShape() {          //返回小球形状的方法
         if(shape == null){
             shape= new Ellipse2D.Double(x, y , X_SIZE,Y_SIZE);
         }else{
             shape.setFrame(x, y , X_SIZE,Y_SIZE);
         }
         return shape;
     }
 
     public void move(Rectangle rect){
         x+=xMoveDis;
         y+=yMoveDis;
         //判断边界
         if(x < rect.getMinX()){
             x = rect.getMinX();
             xMoveDis = -xMoveDis;
         }else if((x+X_SIZE)>rect.getMaxX()){
             x = rect.getMaxX()-X_SIZE;
             xMoveDis = -xMoveDis;
         }
         if(y < rect.getMinY()){
             y = rect.getMinY();
             yMoveDis = -yMoveDis;
         }else if((y+Y_SIZE)>rect.getMaxY()){
             y = rect.getMaxY()-Y_SIZE;
             yMoveDis = -yMoveDis;
         }
     }
 
     public Color getColor() {
         return color;
     }
 
     public void setColor(Color color) {
         this.color = color;
     }
 }
 
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JPanel;

public class BallPanel extends JPanel{            //负责画小球
    private List<Ball> balls;

    public BallPanel(){
        balls = new ArrayList<Ball>();
        startPanitThread();
    }

    public void addBall(Ball ball){
            balls.add(ball);
    }

    //每隔50ms重绘一次
    private void startPanitThread(){
        new Thread(){
            @Override
            public void run() {
                while(true)
                {
                    repaint();    //重画
                    try {
                        Thread.sleep(50);       //50ms重绘一次
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                 }
            }
        }.start();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 =(Graphics2D)g;
        for(Ball ball: balls){
            g2.setColor(ball.getColor());
            g2.fill(ball.getShape());    //绘画小球
        }
    }

}
 
import java.awt.Rectangle;
import java.util.List;

public class BallThread extends Thread{           //只负责移动
    private Ball ball;
    private Rectangle rect;
    public BallThread(Ball ball,Rectangle rect){
        this.ball = ball;
        this.rect=rect;
    }

    @Override
    public void run(){
        int count = 0;
        while(count<10000)
        {
            ball.move(rect);
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            count++;
        }
    }
}
  

1)框架类  界面、开始按钮(创建小球、开启线程)、暂停按钮的监听(退出系统)

2)面板类  保存小球的列表、每隔50ms绘画小球、绘画小球

3)小球类  小球自身的设定,小球的移动。

4)线程类  调用小球的移动。

所谓的线程,就是为了并发执行。线程是客户端调用。

分享到:
评论

相关推荐

    crystal-ball-模拟基础教程

    crystal-ball-模拟基础教程, 有案例。适合新手看。 在读完本资源后,你应该能够: ...6. 利用Crystal Ball程序辨识出符合历史数据的连续分配。 7. 利用Crystal Ball的特色来产生一些帮助决策的决策表和趋势图。

    8ball-rust:Rust用Rust编写的Magic 8 Ball程序

    用Rust编写的Magic 8 Ball程序 :pool_8_ball: 嘿,GitHub! 这是我与Rust的第一个项目 :crab: ! 到目前为止,我一直爱着这种语言,迫不及待地想继续前进,经历这一惊人的旅程! 如果您对我有任何反馈或建议,我很...

    java_ball.rar_java ba_lava ball

    Java_Ball程序是一个基于Java编程语言的简单游戏项目,它实现了小球的碰撞效果。这个程序的核心在于两个关键类:一个是用于图形绘制的类,另一个是处理小球运动和碰撞逻辑的类。在这个项目中,开发者运用了Java的...

    magic8Ball:您拥有魔术8球

    这是Magic8Ball程序的开始,尽管尚无法使用。 通过以下方式进行更改: 通过将字符串存储在问题变量中来向Magic8Ball询问问题 您的8个球至少要添加五个答案,才能提供给String []答案。 请记住将每个格式设置为字符...

    crystalball-64bit安装包

    这是Crystal Ball的主要安装程序,适用于64位操作系统。双击此文件将启动安装流程,用户需要按照提示逐步操作,包括接受许可协议、选择安装路径、配置启动选项等。安装过程中需确保系统满足必要的硬件和软件需求,如...

    flash作品之ball游戏

    同时,使用Flash的内置调试器或者浏览器的开发者工具,可以帮助找出并修复程序中的错误。 通过学习和模仿这个ball游戏,你可以深入了解Flash的各个核心特性,包括ActionScript编程、图形设计、事件处理和物理模拟。...

    crystall ball

    3. **dotnetfx.exe**:这是一个.NET Framework的安装程序。由于ManagedFlexLM.dll的提及,我们知道 Crystal Ball可能依赖.NET Framework运行,因此这个文件可能是为了确保系统具备运行所需环境。 4. **NDP1.1sp1-KB...

    CrystalBall 11.1.2.2 64 bit+ key

    在提供的压缩文件中,"setup.exe"是安装程序,用于在用户的计算机上部署Crystal Ball;"README.htm"通常包含软件的安装指南和注意事项;"License Key Request Process.html"是许可证密钥请求过程的详细步骤,用户...

    原创游戏 《Climbing Ball》

    压缩包中的"climbing.exe"文件很可能是游戏的可执行程序,玩家下载后可以直接运行体验游戏。需要注意的是,为了确保安全,下载任何未知来源的exe文件前,都应进行病毒扫描,以避免潜在的安全风险。 总的来说,...

    CrystalBall-11124.400-64bit-不错,是最新,官方版.zip

    2. **crystalballsetup-x64.exe**:这是64位系统的Crystal Ball安装程序,用户可以通过运行这个文件来安装软件,享受其带来的所有功能。 3. **README.htm**:这是一个常见的文件,通常包含软件的使用说明、注意事项...

    matlab开发-Magic8Ball

    “Magic 8 Ball”程序的主要功能是根据用户的输入生成预设的一系列回答之一,通常这些回答包括“是”、“否”、“可能”等不确定或幽默的回复。以下是你可能会在`magic8ball.m`文件中看到的代码结构和知识点: 1. *...

    RN8302B-电表芯片程序.zip_RN8302 SPI通讯_RN8302B_RN8302B的编写库函数_balln3t_rn

    "balln3t_rn8302b"可能是开发人员或团队的名称,他们可能已经为RN8302B芯片开发了一套特定的库函数或应用程序。这个名称下的程序可能包含了RN8302B的SPI通信示例代码、配置文件、驱动程序等,对于学习和参考RN8302B...

    ball as3.0

    2. 主程序类:设置舞台,创建Ball实例,添加ENTER_FRAME事件监听器,以及更新和检查碰撞。 3. 可能还有其他辅助类或函数,如用于碰撞检测的函数。 五、实际应用 这样的示例项目对于学习AS3.0的物理模拟和游戏开发...

    Crystal Ball 甲骨文水晶球下载

    Crystal Ball-11130.000-64bit是该软件的一个64位版本,通常包含安装程序、用户手册、帮助文档以及必要的库文件。在下载和安装时,确保你的操作系统支持64位应用程序,并遵循安装指南进行操作。安装完成后,用户...

    Ball&beam模糊PID控制仿真研究

    球杆系统(Ball&beam)设备是学习和研究控制理论的重要平台之一,许多学者在控制理论中的研究都通过球杆系统进行验证,这是因为自身具有一些很重要的性质,例如非线性特性、开环不稳定性等,这类复杂控制对象难以用...

    CrystalBall-11124.400 64bit

    1. `crystalballsetup-x64.exe` 是 Crystal Ball 的安装程序,用于在64位操作系统上安装该软件。双击运行此文件,将引导用户完成安装步骤,包括接受许可协议、选择安装路径等。 2. `README.htm` 文件通常包含了关于...

    CrystalBall-11124.400-32bit.zip

    首先,核心组件"crystalballsetup.exe"是Crystal Ball的安装程序,用户可以通过运行此文件在32位版本的Excel上安装该插件。安装过程简单便捷,只需按照向导指示操作即可,使Excel瞬间具备高级的建模和模拟能力。 ...

    Ball - J2ME消球小游戏

    《Ball - J2ME消球小游戏》是一款基于Java 2 Micro Edition (J2ME)平台开发的休闲益智游戏。J2ME是Java技术的一个重要分支,主要用于移动设备和嵌入式系统的应用开发,如手机、智能手表和电视等。这款小游戏通过简单...

    ball.rar_ball beam

    "Ball Beam System"是一个独特的工程领域中的概念,它涉及到力学、控制理论以及计算机编程等多个方面的知识。这个系统通常被用于研究动态平衡、控制系统设计以及机械结构的稳定性等问题。在这个程序中,我们可能看到...

    ball_moving

    在IT行业中,游戏开发是一项非常有趣的任务,尤其对于初学者来说,通过编写简单的游戏程序可以深入理解编程原理和逻辑控制。本项目名为"ball_moving",它是一个使用C语言编写的迷你小球游戏,旨在实现小球的移动、...

Global site tag (gtag.js) - Google Analytics