代码问题有点多 应该是刚开始学吧 要加油了
其实我想说我也是[尴尬!]
容我先吐槽一下:
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) {} //异常处理
}
}