【JAVA】重力反弹,反弹高次一次比一次低

news2024/9/24 7:20:58

本来是想实现泡泡屏保(javascript实现漂亮的气泡碰撞效果(Chrome浏览器下更佳) 下载-脚本之家)的,还未实现 

import javax.swing.*;
import java.awt.*;
import java.util.LinkedList;
import java.util.Random;

class Bubble
{
    public static Image image;
    public int x;
    public int y;
    public int displayWidth;
    public int displayHeight;
    public int gravity;

    public double bounce;

    public Bubble(String image, int x, int y, int displayWidth, int displayHeight) {
        this.image = Toolkit.getDefaultToolkit().getImage("src//" + image);
        this.x = x;
        this.y = y;
        this.displayWidth = displayWidth;
        this.displayHeight = displayHeight;
        gravity = 1;

        bounce = 0.9;

    }

    public void move()
    {
    }

    @Override
    public String toString() {
        return "Bubble{" +
                "x=" + x +
                ", y=" + y +
                ", displayWidth=" + displayWidth +
                ", displayHeight=" + displayHeight +
                '}';
    }
}

public class MainFrame extends JFrame implements Runnable {
    Graphics graphics;
    Image image;

    int x;
    int y;
    private final int windowWidth;//画板的宽度
    private final int windowHeight;//画板的高度
    private LinkedList<Bubble> bubbleLinkedList;

    private double ballsnum= 5;   // 小球数目
    private double spring= 0.8;   // 弹力加速度
    private double bounce= -0.95; // 反弹
    private double gravity= 0.1;  // 重力

    {
        setLayout(null);
        windowWidth = 629;
        windowHeight = 990;
        setSize(windowWidth, windowHeight);
        setLocationRelativeTo(null);
        setVisible(true);
        graphics = getContentPane().getGraphics();
    }

    MainFrame()
    {
        bubbleLinkedList = new LinkedList<>();
        for (int i = 0; i < 1; i++) {

            Integer x = new Random().nextInt(windowWidth / 10);
            Integer y = new Random().nextInt(windowHeight / 20);
            bubbleLinkedList.add(new Bubble("background.jpg", x, y, 20, 20));
        }
    }

    @Override
    public void run() {
        while (true)
        {
            for (Bubble b: bubbleLinkedList) {
                graphics.drawImage(b.image, b.x, b.y, b.displayWidth, b.displayHeight, this);
                BulletHit();
                b.move();
            }

            y+=10;
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }

    public void move(Bubble bubble)
    {
        gravity += 2;
        bubble.x += 2;
        bubble.y += gravity;
        System.out.println(bubble.x + ": " + bubble.y + ": " + bubble.displayHeight + ": " + windowHeight);
        if (bubble.y + bubble.displayHeight > windowHeight)
        {
            bubble.y = windowHeight  - bubble.displayHeight;
            gravity *= -0.8;
        }
    }

    public void BulletHit()
    {
        for (Bubble bubble0: bubbleLinkedList)
        {
            for (Bubble bubble1: bubbleLinkedList)
            {
                if (!bubble0.equals(bubble1))
                {
                    double x = Math.abs(bubble0.x - bubble1.x);
                    double x0 = bubble0.x - bubble1.x;
                    double y = Math.abs(bubble0.y - bubble1.y);
                    double y0 = bubble0.y - bubble1.y;
                    double dist = Math.sqrt(x * x + y * y);
                    if (dist <= bubble0.displayWidth)
                    {
                        double angle = Math.atan2(y0, x0);
                        double tx = bubble0.x + Math.cos(angle) * dist;
                        double ty = bubble0.y + Math.sin(angle) * dist;
                        double ax = (tx - bubble1.x) * spring;
                        double ay = (ty - bubble1.y) * spring;

                        bubble0.x -= ax;
                        bubble0.y -= ay;
                        bubble1.x -= ax;
                        bubble1.y -= ay;
                    }
                }
            }
        }

        for (Bubble bubble0: bubbleLinkedList)
        {
            move(bubble0);
        }
    }

    public static void main(String[] args) {
        MainFrame mainFrame = new MainFrame();
        new Thread(mainFrame).start();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1324657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zoho Mail:1600万企业用户的信赖之选

Zoho Mail和Workplace在线办公套件一起&#xff0c;已经成长为一个集邮箱、即时通讯、生产力工具于一身的非常全面的强大平台。经过数十年持续深入的研发投入&#xff0c;我们的产品可以很好地服务大型企业。 这是Zoho创始人斯瑞达•温布在Zoho Mail15周年之际发布的感想。 过去…

C语言——内存函数的使用与模拟实现

大家好&#xff0c;我是残念&#xff0c;希望在你看完之后&#xff0c;能对你有所帮助&#xff0c;有什么不足请指正&#xff01;共同学习交流 本文由&#xff1a;残念ing 原创CSDN首发&#xff0c;如需要转载请通知 个人主页&#xff1a;残念ing-CSDN博客&#xff0c;欢迎各位…

Linux:控制用户的密码—(有效期下次登录必须修改密码)

设置密码有效期 办法1 chage -M 天数 用户名 passwd -x 天数 用户名 可以看到a1 设置了10天 a2 100天 a3没有被设置就是99999 办法2 编辑/etc/login.defs vim /etc/login.defs 设置今后添加用户时的默认密码有效期&#xff0c;也就是新建的用户密码有效期 修改里面的 PASS_…

九.数据处理之增删改

数据处理之增删改 1.插入数据1.1实际问题1.2方式1&#xff1a;VALUES的方式添加1.3方式2&#xff1a;将查询结果插入到表中 2.更新数据3.删除数据4.MySQL8新特性&#xff1a;计算列5.综合案例 1.插入数据 1.1实际问题 解决方式&#xff1a;使用INSERT语句向表中插入数据 1.2方…

LEFT JOIN

通過中間表説明 biz_email_sent table1 biz_email table2 biz_email_sent_address 中間表 LEFT JOIN 是 JOIN 左邊的記錄(biz_email_sent id52)全部查出&#xff0c;比如52 的記錄全部查出。 即使中間表se.sa_email_id 在 table2中找不到&#xff0c…

打破枯燥工作日,用Python统计键盘和鼠标点击次数,钉钉告诉你今天摸鱼了多少次!

1 前言 是否曾想过&#xff0c;在一天的工作中&#xff0c;你到底点击了键盘多少次&#xff0c;或者鼠标点击了多少下&#xff1f; 是否好奇每天工作的时候&#xff0c;自己究竟有多努力&#xff1f; 本文将带你使用 Python&#xff0c;利用 pynput 监听键盘和鼠标事件&…

mysql原理--连接的原理

1.连接简介 1.1.连接的本质 为了故事的顺利发展&#xff0c;我们先建立两个简单的表并给它们填充一点数据&#xff1a; mysql> CREATE TABLE t1 (m1 int, n1 char(1)); mysql> CREATE TABLE t2 (m2 int, n2 char(1)); mysql> INSERT INTO t1 VALUES(1, a), (2, b), (…

2023年12月20日雄县采样

刚去的时候&#xff0c;找不着冬小麦地&#xff0c;因为积雪太厚了&#xff0c;小麦都被埋住了。 翻了几波地失败了几个点&#xff0c;也渐渐得出经验了&#xff0c;像下图这种有田垄的大块连成片农田&#xff0c;“高标准”农田。一定是种植小麦的。 刨开土能看到小麦就和挖到…

图片曝光修正方法(直方图均衡和CNN)

图像过曝或曝光不足时需要曝光处理&#xff0c; 这里以曝光不足举例。 直方图均衡法&#xff1a; 通过RGB通道的直方图均衡达到处理曝光不足的效果。 代码&#xff1a; underexpose cv2.imread("exposure_test.jpg") #underexpose cv2.cvtColor(underexpose, cv2…

软件设计模式:UML类图

文章目录 前言一、&#x1f4d6;设计模式概述1.软件设计模式的产生背景2.软件设计模式3.设计模式分类 二、&#x1f4e3;UML图1.类图概述2.类的表示法3.类与类之间的关系关联关系&#xff08;1&#xff09;单向关联&#xff08;2&#xff09;双向关联&#xff08;3&#xff09;…

VM安装Sonoma【笔记】

VMware Workstation安装MacOS Sonoma 1、配置虚拟机&#xff0c;根据系统性能调整参数&#xff1b; 2、先不焦急启动虚拟机&#xff0c;打开虚拟机存储目录&#xff0c;以文本方式打开.vmx文件&#xff08;这里以Sonoma.vmx为例&#xff09;&#xff1b; 这里只针对Inter CP…

异步编程Promise

文章目录 前言一、关于 Promise 的理解与使用1.相关知识补充区别实例对象和函数对象同步回调异步回调Js中的错误&#xff08;error&#xff09;和错误处理 2.promise是什么 二、Promise 原理三、Promise 封装 Ajax四、async 与 await总结 前言 在项目中&#xff0c;promise的使…

阿赵UE学习笔记——2、新建项目和项目设置

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。继续来学习虚幻引擎的使用。这次介绍一下新建项目和项目设置。 一、新建项目 通过桌面快捷方式&#xff0c;或者EPIC Games Loader&#xff0c;启动虚幻引擎。 启动完成后&#xff0c;会打开项目管理的界面&#xff0c;可以看…

HarmonyOS ArkTS 中DatePicker先择时间 路由跳转并传值到其它页

效果 代码 代码里有TextTimerController 这一种例用方法较怪&#xff0c;Text ,Button Datepicker 的使用。 import router from ohos.router’则是引入路由模块。 import router from ohos.router Entry Component struct TextnewClock {textTimerController: TextTimerContr…

【开源项目】基于STM32的服装仓库环境监测系统设计与实现

该系统结合了多种物联网的技术如WiFi技术、嵌入式技术等&#xff0c;通过温湿度传感器和火焰传感器实时采集仓库的温度、空气湿度和仓库明火情况。系统能够自动判断并处理异常情况&#xff0c;当温湿度超过阈值时风扇模块开始工作进行通风&#xff0c;当有明火时抽水泵模块开始…

计算机msvcp120.dll文件丢失怎么办?亲测有效的五个方法分享

最近&#xff0c;我在使用电脑的过程中遇到了一个非常棘手的问题&#xff0c;那就是msvcp120.dll文件丢失。这个错误通常会导致某些应用程序无法正常运行。经过一番努力和尝试&#xff0c;我终于找到了解决这个问题的方法&#xff0c;&#xff0c;小编将介绍五个常用的解决方法…

自定义 spring-boot组件自动注入starter

1&#xff1a;创建maven项目 2&#xff1a;pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocati…

ITIL® 4 Foundation​,12月23日即将开课~想了解点击查看

ITIL 4 Foundation即将开课~ 想报名的必须提前预约啦 &#x1f447;&#x1f447;&#x1f447; 培训地点&#xff1a; 远程直播&#xff1a;线上平台学习 开课时间&#xff1a; 周末班&#xff1a;12月23日、24日&#xff1b; 什么是ITIL&#xff1f; 信息技术基础架构…

28 在Vue3中监听对象属性

概述 更多的时候&#xff0c;我们可能想要监听的是对象中的某个属性。 比如&#xff0c;我们提交用户的登录表单&#xff0c;有username&#xff0c;password和re_password的三个属性&#xff0c;我们监听re_password这个属性&#xff0c;一旦发生改变&#xff0c;我们就要判…

网络基础介绍

1.网线制作 1.1 网线制作需要的工具 网线 网线钳 水晶头 测试仪 ​编辑 1.2 网线的标准 1.3 网线的做法 2.集线器&交换机&路由器的介绍 3.OSI七层模型 4.路由器的设置 4.1 常见的路由器设置地址 4.2 常见的路由器账号密码 4.3 登录路由器 设置访客网…