java小球反弹_JAVA窗体中2个小球怎样能互不干涉反弹移动?

代码问题有点多 应该是刚开始学吧 要加油了

其实我想说我也是[尴尬!]

容我先吐槽一下:

1.首先代码的排版需要好看一点;至少不至于让别人看的头疼;

毕竟像我这样又无聊又好心的人不多了[笑哭]

2.写窗口的时候可以增加一下关闭窗口事件[详见代码注释];

3.你最关心的

/******************************

为什么两个球会同时改变方向 :

简单来说你的函数通过x,y 控制a球位置    通过i j控制b球位置 通过att控制球的方向

但是你只有一个att 所以共用一个att的两个球肯定会同时改变方向

最少你需要定义两个att才可以;lg: att1=0;att2=0;

不过java是面向对象的编程 你写的跟C语言似的,嗯~~~不太好[斜眼笑]

对你的程序稍改:

*******************************/

import java.awt.Color;

import java.awt.Container;

import java.awt.Graphics;

import javax.swing.*;

public class Rebound{

public static void main(String args[]) {

JFrame frame=new JFrame();

MyRebound mr=new MyRebound();

frame.setSize(800, 800);        //设置窗口大小

frame.setResizable(false);        //设置窗口大小不可更改

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    //点击[X]关闭窗口结束程序

mr.setBounds(0, 0, 800, 800);    //设置JPanel起始位置与大小

Container con=frame.getContentPane();    //取得窗口内容面板

con.add(mr);                            //将JPanel添加到窗口的内容面板

frame.setVisible(true);                    //显示窗口 一般最后面

}

}

class Oval implements Runnable{

public int x;        //假装我是私有属性 我有get set方法

public int y;        //假装我是私有属性 我有get set方法

public int att;        //假装我是私有属性 我有get set方法

public Oval(){

x=(int)(Math.random()*800);

y=(int)(Math.random()*800);

att=0;

}

public void run(){

while(true) {

//定义飞行姿态

if(att==0) {

x++;

y++;

}

if(att==1) {

x--;

y++;

}

if(att==2) {

x--;

y--;

}

if(att==3) {

x++;

y--;

}

//改变飞行姿态

if(x>750) {

if (att==0) {

att=1;

}else {

att=2;

}

}

if(y>750) {

if(att==1) {

att=2;

}else {

att=3;

}

}

if(x<0) {

if(att==2    ) {

att=3;

}else {

att=0;

}

}

if(y<0) {

if(att==3) {

att=0;

}else {

att=1;

}

}

//    异常处理

try {

Thread.sleep(5);   //线程休眠5毫秒

}catch(Exception e) {

}

}

}

}

class MyRebound extends JPanel{

Oval o1=new Oval();

Oval o2=new Oval();

Thread thread1=new Thread(o1);

Thread thread2=new Thread(o2);

public MyRebound(){

thread1.start();

thread2.start();

}

public void paint(Graphics g) {

super.paint(g);                //调用父类paint方法

g.fillOval(o1.x, o1.y, 50, 50);

g.setColor(Color.yellow);

g.fillOval(o2.x, o2.y, 50, 50);

try {

Thread.sleep(5);        //线程休眠5毫秒

repaint();                //重绘

}catch(Exception e) {}  //异常处理

}

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值