用java模拟两球的随机运动及碰撞

前面已经实现了一个球在一个窗口中随机运动,下面将在前面的基础上实现两个球的随机运动及碰撞,此次的代码中用到的算法参考了Twinsen写的<向量几何在游戏编程中的使用>一文中关于两球碰撞时的算法.程序仍旧有两个类,一个Ball类,一个BallCanvas类,Ball类与前面相同,而BallCanvas类作了修改,修改后的代码如下:
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;


public class BallCanvas extends Canvas implements Runnable {
 
 private int ballRadius = 40;   //球的半径
 
 private int ballAX,ballAY;        //当前A,B球的位置
 private int ballBX,ballBY;
 
 private double ballAXMoveLength= 7;     //A,B球当前速度在X,Y轴上的分速度
 private double ballAYMoveLength = 9;    //为了减少计算中数据丢失,用double型而不用int型
 private double ballBXMoveLength = 6;    // 
 private double ballBYMoveLength = 5;     //如果用int型两球最终将停止运动
 
 private Random r;
 private boolean move = true;       //标志球是否移动
 private int screenWidth, screenHeight;        //屏幕宽及高
 
 private int ballARX, ballARY;  //A球圆心位置
 private int ballBRX, ballBRY;   //B球圆心位置
 
 
 public BallCanvas(int screenWidth, int screenHeight){
  
  r = new Random();
  
  ballAX = r.nextInt(screenWidth - 2*ballRadius);     //随机初始化A球的初始位置
  ballAY = r.nextInt(screenHeight - 2*ballRadius);
  
  do{        //随机初始化B球的初始位置,且确定A球跟B球不发生碰撞
   ballBX = r.nextInt(screenWidth - 2*ballRadius);    
   ballBY = r.nextInt(screenHeight - 2*ballRadius);
  }while((int)Ma

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值