java实现随机动态的小球

 

package my.test.window;

 

import java.awt.Frame;

import java.awt.Graphics;

import java.awt.event.*;

import java.awt.*;

 

public class ShowWidow extends Frame {

 

    private static final int GAME_WIDTH = 800;

    private static final int GAME_HEIGHT = 600;

   

    int x,y, vx, vy;

    int bounce = -1;

   

    public ShowWidow(){

       init();

       x= 20;

       y = 20;

      

       vx = 20;

       vy = 20;

    }

   

   

    private void init() {

       lauchFrame();

    }

   

    private void lauchFrame(){

       this.setSize(GAME_WIDTH, GAME_HEIGHT);

       this.setTitle("随机运动小球");

       this.addWindowListener(new WindowAdapter(){         

           public void windowClosing(WindowEvent e){

              System.exit(0);

           }

       });

       this.setResizable(false);

       this.setBackground(Color.GREEN);

       this.setVisible(true);

       new Thread(new PaintThread()).start();

    }

   

    class PaintThread implements Runnable{

 

       @Override

       public void run() {

           while(true){

              repaint();

              try {

                  Thread.sleep(50);

              } catch (InterruptedException e) {

                  e.printStackTrace();

              }            

           }

       }

      

      

    }

   

    public void paint(Graphics g) {

       g.setColor(Color.RED);

       g.fillOval(x, y, 20, 20);

       x += vx;

       y += vy;

       if(x<=0){

           x = 0;

           vx *= bounce;

       }else if(x + 20 > GAME_WIDTH){

           x = GAME_WIDTH - 20;

           vx *= bounce;

       }

      

       if(y <= 0){

           y = 0;

           vy *= bounce;

       }else if(y+20 >= GAME_HEIGHT){

           y = GAME_HEIGHT - 20;

           vy *= bounce;

       }

    }

 

 

    public static void main(String[] args){

       ShowWidow showwindow = new ShowWidow();

    }

}

上面是一个完整的小示例,实现了小球的移动,碰到边界后会朝相反的方向移动,主要是用到了vx和vy向量,值得研究。

 

游戏中用到的一些知识点:

我们可以求两点之间的夹角,然后设置速度,再使用三角学计算出vx和vy,然后让物体移动。

 

 

好的,关于Java撞墙随机变色,你可以使用Java Swing或JavaFX来实现一个简单的GUI,然后在界面上绘制一个小球和墙壁,当小球碰到墙壁时,可以随机生成一个颜色来改变小球的颜色。具体实现可以参考以下步骤: 1. 创建一个Java Swing或JavaFX的窗口,可以使用JFrame或JavaFX的Stage类来实现。 2. 在窗口上绘制一个小球和墙壁。可以使用Java 2D Graphics API 或JavaFX的Canvas类来进行绘制。 3. 实现小球的运动逻辑,可以使用定时器(Timer)或JavaFX的AnimationTimer类来定时更新小球的位置和速度。同时,可以判断小球是否碰到了墙壁,如果碰到了,则随机生成一个颜色来改变小球的颜色。 4. 实现随机生成颜色的逻辑,可以使用Java的Random类来生成随机数,然后将随机数转换成RGB颜色值。 关于Unity制作发射小球撞墙游戏,可以参考以下步骤: 1. 创建一个3D场景,可以使用Unity的Scene视图来进行场景编辑。 2. 在场景中创建一个发射器和一个小球,可以使用Unity的GameObject来创建对象。 3. 实现小球的运动逻辑,可以使用Unity的刚体(Rigidbody)组件来控制小球的运动,同时可以使用碰撞器(Collider)来检测小球是否碰到了墙壁。 4. 实现发射器的控制逻辑,可以使用Unity的输入(Input)系统来监听玩家的输入,然后控制发射器发射小球。 5. 实现随机变色的逻辑,可以在小球碰到墙壁时,随机生成一个颜色,并将颜色应用到小球的材质(Material)上。 以上是两种不同的实现方法,希望对你有所帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值