用java实现跳动的小球示例代码

实现效果为一个小球接触左右侧时,会反向的运动。

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.paint.Color;
import javafx.scene.shape.Ellipse;
import javafx.stage.Stage;

import java.util.Timer;
import java.util.TimerTask;

public class BallMove extends Application {
  //x记录小球的横坐标,默认值为初始位置
  static int x = 200;
  //e为小球
  static Ellipse e = new Ellipse();
  //temp记录小球的移动情况:当temp为left时,左移;temp为right时,右移
  static String temp = "left";
  //创建计时器
  static Timer t = new Timer();
  //创建记录器,当多次点击过“确定”按钮后,只有第一次点击有效
  static boolean record = true;
  public static void main(String[] args) {
    launch(args);
  }

  public void start(Stage s) {
    //创建Group面板
    Group root = new Group();
    //创建场景
    Scene scene = new Scene(root, 400, 250, Color.WHITE);
    //创建按钮
    Button start = new Button("开始");
    Button stop = new Button("停止");
    //创造一个小球
    e.setCenterX(x);
    e.setCenterY(90);
    e.setRadiusX(50);
    e.setRadiusY(50);
    e.setFill(Color.RED);
    //放置开始按钮
    start.setLayoutX(100);
    start.setLayoutY(180);
    //放置停止按钮
    stop.setLayoutX(250);
    stop.setLayoutY(180);
    //为开始按钮添加事件
    start.setOnAction(new EventHandler<ActionEvent>() {
      public void handle(ActionEvent event) {
        System.out.println("开始按钮被触发");
        if(record==true) {
          t = new Timer();
          t.schedule(new TimerTask() {
            public void run() {
              e.setFill( Color.rgb((int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255)));
              //小球的半径为50,场景的宽度为400,那么小球横坐标达到50或者350时,转向移动
              if (x < 50) { temp = "right"; }
              if (x > 350) { temp = "left"; }
              if (temp.equals("left")) { e.setCenterX(x -= 5);
              } else { e.setCenterX(x += 5); }
            }
          }, 0, 25);
        }
        //“开始"按钮被点击且事件被触发,record=false;
        record=false;
      }
    });
    //为停止按钮添加事件
    stop.setOnAction(new EventHandler<ActionEvent>() {
      public void handle(ActionEvent event) {
        System.out.println("停止按钮被触发");
        record = true;
        t.cancel();
      }
    });

    root.getChildren().add(e);
    root.getChildren().add(start);
    root.getChildren().add(stop);
    s.setTitle("移动小球");
    s.setScene(scene);
    s.show();
  }
}

我还做了一个升级版,扩展到上下左右一起移动,代码如下

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.paint.Color;
import javafx.scene.shape.Ellipse;
import javafx.scene.shape.Line;
import javafx.stage.Stage;

import java.util.Timer;
import java.util.TimerTask;

public class BallMove2 extends Application {
  //x记录小球的横坐标,默认值为初始位置
  static int x = 200;
  //y记录小球的纵坐标,默认值为初始位置
  static int y = 90;
  //distance_x记录小球每次横向移动的距离,取1到4之间的随机数
  static double distance_x = Math.random()*4+1;
  //distance_y记录小球每次纵向移动的距离,由于每次移动的距离为5,由distance_x可求出distance_y
  static double distance_y = Math.sqrt(25-distance_x*distance_x);
  //e为小球
  static Ellipse e = new Ellipse();
  //temp1记录小球的横向移动情况:当temp为left时,左移;temp为right时,右移
  static String temp1 = "left";
  //temp2记录小球的纵向移动情况:当temp为up时,上移;temp为down时,下移
  static String temp2 = "down";
  //创建计时器
  static Timer t = new Timer();
  //创建记录器,当多次点击过“确定”按钮后,只有第一次点击有效
  static boolean record_start = true;
  static boolean record_stop = false;

  public static void main(String[] args) {
    launch(args);
  }

  public void start(Stage s) {
    /*System.out.println(distance_x+"***"+distance_y);*/

    //创建Grooup面板
    Group root = new Group();
    //创建场景
    Scene scene = new Scene(root, 400, 250, Color.WHITE);
    //创建按钮
    Button start = new Button("开始");
    Button stop = new Button("停止");
    //创建一条分割线,分割小球和按钮
    Line l = new Line();
    //放置线条
    l.setStartX(0);
    l.setStartY(160);
    l.setEndY(160);
    l.setEndX(400);
    //放置小球
    e.setCenterX(x);
    e.setCenterY(y);
    e.setRadiusX(20);
    e.setRadiusY(20);
    e.setFill(Color.RED);
    //放置开始按钮
    start.setLayoutX(100);
    start.setLayoutY(190);
    //放置停止按钮
    stop.setLayoutX(250);
    stop.setLayoutY(190);

    //为开始按钮添加事件
    start.setOnAction(event -> {
        /*创建一个小球随机角度移动的思路:
        假设小球每次移动的距离为5,当横坐标或者纵坐标其中一个确定时,另外可以根据三角函数求出
        现在可以用随机函数,令横坐标为1到4之间随机的数字,那么横坐标也可以由此求出
       如何验证每次角度不同?
        当点击“停止”按钮之后,再次点击“停止”按钮即可重置小球位置和移动的角度
      * */
      if(record_start) {
        t = new Timer();
        t.schedule(new TimerTask() {
          public void run() {
            //随机取颜色,just have a fun
            //e.setFill( Color.rgb((int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255)));
            //小球的半径为20,场景的宽度为400,那么小球横坐标达到20或者380时,转向移动
            if (x < 20) { temp1 = "right"; }
            if (x > 380) { temp1 = "left"; }
            //小球的半径为20,场景的高度为160,那么小球纵坐标达到20或者140时,转向移动
            if (y < 20) { temp2 = "up";}
            if (y > 140) { temp2 = "down"; }
            if (temp1.equals("left")) { e.setCenterX(x -= distance_x);
            } else { e.setCenterX(x += distance_x); }
            if (temp2.equals("down")) { e.setCenterY(y -= distance_y);
            } else { e.setCenterY(y += distance_y); }
          }
        }, 0, 20);
      }
      //“开始"按钮被点击且事件被触发,record=false;
      record_start = false;
      record_stop = false;
    });

    //为停止按钮添加事件
    stop.setOnAction(event -> {
      /*System.out.println("停止按钮被触发");*/
      //当第二次点击"停止"时,小球重置
      if(record_stop){
        //重置横向和纵向移动的距离
        distance_x = Math.random()*4+1;
        distance_y = Math.sqrt(25-distance_x*distance_x);
        //重置小球的位置
        e.setCenterX(x = 200);
        e.setCenterY(y = 90);
        record_stop = false;
      }
      record_stop = true;
      record_start = true;
      t.cancel();
    });

    root.getChildren().addAll(start,stop,l,e);
    s.setTitle("弹跳小球");
    s.setScene(scene);
    s.show();
  }
}

以上代码设置了个彩蛋,不知道你能不能找到!

总结

到此这篇关于用java实现跳动的小球示例代码的文章就介绍到这了,更多相关java 跳动的小球内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 用Java实现小球碰壁反弹的简单实例(算法十分简单)

    核心代码如下: if(addX){ x+=3; }else{ x-=3; } if(addY){ y+=6; }else{ y-=6; } if(x<=0||x>=(width-50)){ addX=!addX; } if(y<=0||y>=(height-50)){ addY=!addY; } 根据x和y递增的值,来决定角度. 以上这篇用Java实现小球碰壁反弹的简单实例(算法十分简单)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • java桌球小游戏 小球任意角度碰撞

    本文实例为大家分享了java桌球小游戏的具体代码,供大家参考,具体内容如下 import javax.swing.*; import java.awt.*; public class BallGame extends JFrame { /** *继承swing里面的窗口类 */ //加载图片 Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.jpg.png");/*得到系统默认的工具包*/ Image desk

  • java实现会反弹的小球示例

    Java实现简单的球的弹射,碰到墙壁就反弹一下,代码如下  复制代码 代码如下: package tsct; import java.awt.Color;import java.awt.Graphics;import java.awt.Image;import java.awt.event.WindowStateListener;import java.io.File;import java.io.IOException; import javax.imageio.ImageIO;import

  • 用java实现跳动的小球示例代码

    实现效果为一个小球接触左右侧时,会反向的运动. import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.paint.Colo

  • Java连接postgresql数据库的示例代码

    本文介绍了Java连接postgresql数据库的示例代码,分享给大家,具体如下: 1.下载驱动jar 下载地址:https://jdbc.postgresql.org/download.html 2.导入jar包 新建lib文件夹,将下载的jar驱动包拖到文件夹中. 将jar驱动包添加到Libraries 3.程序代码如下:HelloWorld.java package test; import java.sql.Connection; import java.sql.DriverManage

  • java 生成文字图片的示例代码

    本文主要介绍了java 生成文字图片的示例代码,分享给大家,具体如下: import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO;

  • Java动态规划之编辑距离问题示例代码

    动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划. 动态规划实际上是一类题目的总称,并不是指某个固定的算法.动态规划的意义就是通过采用递推(或者分而治之)的策略,通过解决大问题的子问题从而解决整体的做法.动态规划的核心思想是巧妙的将问题拆分成多个子问题,通过计算子问题而得到整体问题的解.而子问题又可以拆分成更多的子问题,从而用类似递推迭代的方法解决要求的问题.问题描述: 对于序列S和T,

  • Java的静态类型检查示例代码详解

    关于静态类型检查和动态类型检查的解释: 静态类型检查:基于程序的源代码来验证类型安全的过程: 动态类型检查:在程序运行期间验证类型安全的过程: Java使用静态类型检查在编译期间分析程序,确保没有类型错误.基本的思想是不要让类型错误在运行期间发生. 在各色各样的编程语言中,总共存在着两个类型检查机制:静态类型检查和动态类型检查. 静态类型检查是指通过对应用程序的源码进行分析,在编译期间就保证程序的类型安全. 动态类型检查是在程序的运行过程中,验证程序的类型安全.在Java中,编译期间使用静态类型

  • Java随机生成身份证完整示例代码

    身份证算法实现 1.号码的结构 公民身份号码是特征组合码, 由十七位数字本体码和一位校验码组成. 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码  三位数字顺序码和一位数字校验码. 2.地址码(前六位数) 表示编码对象常住户口所在县(市.旗.区)的行政区划代码,按GB/T2260的规定执行. 3.出生日期码(第七位至十四位) 表示编码对象出生的年.月.日,按GB/T7408的规定执行,年.月.日代码之间不用分隔符. 4.顺序码(第十五位至十七位) 表示在同一地址码所标识的区域范围内,

  • java实现基因序列比较的示例代码

    设计算法,计算两给定基因序列的相似程度. 人类基因由4种核苷酸,分别用字母ACTG表示.要求编写一个程序,按以下规则比较两个基因序列并确定它们的相似程度.即给出两个基因序列AGTGATG和GTTAG,它们有多相似呢?测量两个基因相似度的一种方法称为对齐.使用对齐方法可以在基因的适当位置加入空格,让两个基因的长度相等,然后根据基因的分值矩阵计算分数. 看了很多代码基本上都是用c++或者c写的,但是习惯性写java就用java实现一下 基本的思路就是,和背包问题差不多,实现还是模仿填表的形式去实现的

  • 在Java中操作Zookeeper的示例代码详解

    依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.6.0</version> </dependency> 连接到zkServer //连接字符串,zkServer的ip.port,如果是集群逗号分隔 String connectStr = "192.

  • Java 静态数据初始化的示例代码

    无论创建多少个对象,静态数据都只占用一份存储区域.static关键字不能应用于局部变量,因此它只能作用于域.如果一个域是静态的基本类型域,且也没有对它进行初始化,那么它就会获得基本类型的标准初始值:如果它是一个对象引用,那么它的默认初始值就是null class Bowl { public Bowl(int marker) { System.out.println("Bowl(" + marker + ")"); } void f1(int marker) { Sy

  • Java 设置Excel条件格式示例代码(高亮条件值、应用单元格值/公式/数据条等类型)

    概述 在Excel中,应用条件格式功能可以在很大程度上改进表格的设计和可读性,用户可以指定单个或者多个单元格区域应用一种或者多种条件格式.本篇文章,将通过Java程序示例介绍条件格式的设置方法,设置条件格式时,因不同设置需要,本文分别从以下示例要点来介绍: 示例1: 1. 应用条件格式用于高亮重复.唯一数值 2. 应用条件格式用于高亮峰值(最高值.最低值) 3. 应用条件格式用于高亮低于或高于平均值的数值 示例2: 1. 应用单元格值类型的条件格式 2. 应用公式类型的条件格式 3. 应用数据条

随机推荐