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

本来是想实现泡泡屏保(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();
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

统计个数并调用--函数设计与实现

#定义函数 count(s) ,统计字符串中小写字母、大写字母、数字的个数&#xff0c;并以字典为结果返回给调用函数。 # (1)判断字符类型 def count(s):#创建字典&#xff0c;用于保存变量dictionary {数字: 0, 小写字母: 0, 大写字母: 0, 其他字符: 0}for c in s:if c.isdigit():d…

EXCEL VLOOKUP函数

参考资料 Excel&#xff1a;史上最全的VLOOKUP应用教程VLOOKUP函数最全面最详细的讲解大全&#xff0c;涵盖17个重要和常见用法&#xff01; 目录 零. 前提条件一. 单条件查找1.1 顺向查找1.2 逆向查找 二. 多条件查找2.1 顺向查找2.2 逆向查找 三. 根据条件查询等级四. 交差查…

IDEA中如何创建各种类型的java工程

如果你的工程下面的module没有互相依赖&#xff0c;就相当于是一个小的项目&#xff0c;idea版本不同&#xff0c;细节可能不同 1、普通的Java 工程 在工程上&#xff0c;右键- New - Module&#xff0c;如下&#xff1a; 指明Java工程的名称及使用的JDK版本&#xff1a; 创建…

Hive入门+部署

看黑马视频做的笔记 目录 概念 1.基本概述 2.基础架构 总架构 部署 1.安装MySQL 2.配置Hadoop 3.下载解压Hive 4.下载MySQL Driver包 注意&#xff01; 5.配置Hive 6.初始化元数据库 7.启动Hive&#xff08;使用Hadoop用户&#xff09; 实例 查看HDFS上表中存…

Redis内存策略

1.Redis中Key的过期策略 问题1&#xff1a;Redis是如何知道一个key是否过期呢&#xff1f; Redis会利用两个字典分别记录key-value对&#xff08;dict&#xff09;以及key-ttl对&#xff08;expires&#xff09;。 1.1 立即删除 在设置键的过期时间时&#xff0c;会创建一个回…

JVM垃圾收集器三色标记算法

垃圾收集算法 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法&#xff0c;这种算法没有什么新的思想&#xff0c;只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代&#xff0c;这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。 比…

RK3568平台 PWM Backlight控制背光亮度

一.PWM基本概念 以单片机为例&#xff0c;我们知道&#xff0c;单片机的IO口输出的是数字信号&#xff0c;IO口只能输出高电平和低电平。 假设高电平为5V 低电平则为0V 那么我们要输出不同的模拟电压&#xff0c;就要用到PWM&#xff0c;通过改变IO口输出的方波的占空比从而获…

【小沐学Unity3d】3ds Max 减面工具汇总

文章目录 1、简介2、“优化”修改器3、“专业优化”修改器4、“多分辨率”修改器5、Polygon Cruncher5.1 工具简介5.2 下载安装5.3 使用测试 6、Simplyon6.1 工具简介6.2 下载安装6.3 使用测试 7、FAQ7.1 在3dmax里面显示点数和面数 结语 1、简介 有几个 3ds Max 修改器可帮助您…

C#上位机与欧姆龙PLC的通信03----创建项目工程

1、创建仿真PLC 这是一款CP1H-X40DR-A的PLC&#xff0c;呆会后面创建工程的时候需要与这个类型的PLC类型一致&#xff0c;否则程序下载不到PLC上。 2、创建虚拟串口 首先安装&#xff0c;这个用来创建虚拟串口来模拟真实的串口&#xff0c;也就是上位机上有那种COM口&#xf…

map|动态规划|单调栈|LeetCode975:奇偶跳

作者推荐 【贪心算法】【中位贪心】.执行操作使频率分数最大 涉及知识点 单调栈 动态规划 map 题目 给定一个整数数组 A&#xff0c;你可以从某一起始索引出发&#xff0c;跳跃一定次数。在你跳跃的过程中&#xff0c;第 1、3、5… 次跳跃称为奇数跳跃&#xff0c;而第 2、…

文件传输软件SecureFX mac支持多种协议

SecureFX mac是一款文件传输客户端&#xff0c;可在 Mac 操作系统上使用。它由 VanDyke Software 公司开发&#xff0c;旨在为用户提供安全、可靠、高效的文件传输服务。 SecureFX 支持多种协议&#xff0c;包括 SFTP、SCP、FTP、FTP over SSL/TLS 和 HTTP/S。它使用强大的加密…

Android 13 - Media框架(24)- OMXNodeInstance(一)

为了了解 ACodec 是如何与 OpenMAX 组件进行 buffer 流转的&#xff0c;我们有必要先来学习 OMXNodeInstance&#xff0c;在前面的章节中&#xff0c;我们已经了解了 media.codec 进程包含的内容&#xff0c;以及 OpenMAX 框架中的一些内容。这一节我们将来学习 OMXNode 与 med…

泛微OA C# 调用 WebAPI功能实现

泛微OA C# 调用 WebAPI功能实现 OA 在线文档地址1. 创建流程字段参数 mainData 简单说明字段表明细表2. 接口封装2.1 接口初始化2.2 接口注册2.3 获取Token2.4 拼装 Headers2.5 常用工作流方法2.5.1 创建2.5.2 删除2.5.3 撤回2.5.4 退回3. 接口调用OA 在线文档地址 Token认证 …

Qt前端技术:2.QSS

border-style&#xff1a;后边是两个参数的话第一个参数改变上下的style 第二个参数改变左右的style 如果后边是三个参数的话第一个参数改变上边的style第二个参数改变左右的style&#xff0c;第三个参数改变的下边的style 如果后边是四个参数的话对应的顺序为上&#xff0c;右…

ros2机器人常规控制流程

The joint_state_publisher reads the robot_description parameter from the parameter server, finds all of the non-fixed joints and publishes a JointState message with all those joints defined.也就是说如果我们不需要控制机器人运动&#xff0c;只需要一个节点就可…

HarmonyOS概述

HarmonyOS概述 HarmonyOS系统架构 内核层—系统服务层—框架层—应用层 内核层&#xff1a; 内核子系统: HarmonyOS采用多内核设计&#xff0c;支持针对不同资源受限设备 &#xff0c;选用适合的OS内核&#xff0c;为上层提供基础操作系统能力。驱动子系统: 硬件驱动框架(H…

AI百模大战:引领行业变革与开启人才黄金时代

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux学习 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 技术进步&#xff1a;AI的飞速发展 1. 深度学习的多领域应用 2. 自然语言处理的语境理解提升 3. 计算机视觉的实时处理能力提高 4…

清风数学建模学习笔记-斯皮尔曼相关系数

内容&#xff1a;斯皮尔曼相关系数 一.原理&#xff1a; 二.算法&#xff1a; 1.MATLAB: 2.SPSS&#xff1a; 分析-相关-双变量相关-勾选标注显著性相关性 3. 相关性系数的选择&#xff1a;

【vCenter Converter】安装 VMware vCenter Converter Standalone

目录 3.2 开始安装 (具体步骤) 关联博文参考资料 3.2 开始安装 (具体步骤) 点击安装程序后&#xff0c;进入安装导向。 终端用户协议。 接受终端用户协议。 指定安装位置。 指定安装类型&#xff0c;默认本地安装即可。 加入VMware用户体验计划。 准备安装。 安装中。 安装完成…

Open5GSUeRANSim2:对安装在同一个VM上的OPEN5GS和UERANSIM进行配置和抓取wireshark报文

参考链接&#xff1a; Configuring SCTP & NGAP with UERANSIM and Open5GS on a Single VM for the Open5GS & UERANSIM Series https://www.youtube.com/watch?vINgEX5L5fkE&listPLZqpS76PykwIoqMdUt6noAor7eJw83bbp&index5 Configuring RRC with UERANSI…