额。。。。啥都不说好吧,直接上代码
public class zhuye implements MouseListener {
Threadsleep thread = new Threadsleep();
Listener listen=new Listener();
int x, y;
public void initUI() {
JFrame lgjf = new JFrame();
lgjf.setSize(900, 900);
lgjf.setLocationRelativeTo(null);
lgjf.getContentPane().setBackground(Color.white);
lgjf.setLayout(new FlowLayout());
lgjf.setDefaultCloseOperation(3);
lgjf.setVisible(true);
Graphics g = lgjf.getGraphics();
thread.g = g;
listen.g=thread.h;
thread.start();
for(int i=0;i<10;i++){
Ball b = new Ball();
b.x = (int) (Math.random() * 800);
b.y = (int) (Math.random() * 800);
b.j = (int) (Math.random() * 4);
thread.list.add(b);
}
lgjf.addMouseListener(this);
lgjf.addKeyListener(listen);
System.out.println("bansadasndas;d;n");
}
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public static void main(String[] args) {
new zhuye().initUI();
}
}
public class Threadsleep extends Thread {
ArrayList<Ball> list = new ArrayList<Ball>();
BufferedImage sd = new BufferedImage(900, 900, BufferedImage.TYPE_INT_ARGB);
Graphics h = sd.getGraphics();
int x, y;
Graphics g;
private double t;
private int radius = 50;
int j = 0;
int n = 1;
int l = 0;// 用于判断碰撞是否已经进行过了
Run chase = new Run();
// public Threadsleep(Graphics g){
// this.g=g;
// }
public void run() {
h.setColor(Color.red);
h.fillOval(100, 100, radius, radius);
while (true) {
for (int i = 0; i < list.size(); i++) {
Ball ball = list.get(i);
for (int j = 0; j < list.size(); j++) {
Ball ball_1 = list.get(j);
if (Math.sqrt(Math.pow((ball.y - ball_1.y), 2) + Math.pow((ball.x - ball_1.x), 2)) <= 50
&& ball.j != ball_1.j && ball.times == 0 && ball_1.times == 0) {
n = ball.j;
ball.j = ball_1.j;
ball_1.j = n;
ball.times = 1;
ball_1.times = 1;
} else if (ball.j == ball_1.j && ball.x != ball_1.x && ball.y != ball_1.y
&& Math.sqrt(Math.pow((ball.y - ball_1.y), 2) + Math.pow((ball.x - ball_1.x), 2)) <= 50
&& ball.times == 0 && ball_1.times == 0) {
if (ball.j == 0) {
ball.j = 1;
ball_1.j = 2;
} else if (ball.j == 1) {
ball.j = 0;
ball_1.j = 3;
} else if (ball.j == 2) {
ball.j = 0;
ball_1.j = 3;
} else if (ball.j == 3) {
ball.j = 1;
ball_1.j = 2;
}
ball.times = 1;
ball_1.times = 1;
}
else if (Math.sqrt(Math.pow((ball.y - ball_1.y), 2) + Math.pow((ball.x - ball_1.x), 2)) > 50
&& Math.sqrt(Math.pow((ball.y - ball_1.y), 2) + Math.pow((ball.x - ball_1.x), 2)) < 200
&& ball.times == 1 && ball_1.times == 1) {
ball.times = 0;
ball_1.times = 0;
}
}
ball.move(n, radius, h, chase);
// ball.jump(radius, h);
}
g.drawImage(sd, 0, 0, null);
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Ball {
int x;
int y;
int j;
int times=0;
double t=0;
double h=0;
int num;
public void move(int n,int radius,Graphics g,Run chase){
g.setColor(Color.white);
g.fillOval(x,y,radius,radius);
if(j==0){
x+=1;
y+=1;
}
else if(j==1){
x-=1;
y+=1;
}
else if(j==2){
x+=1;
y-=1;
}
else if(j==3){
x-=1;
y-=1;
}
if(x<=50&&j==1){
j=0;
}
else if(x<=50&&j==3){
j=2;
}
else if(y<=50&&j==3){
j=1;
}
else if(y<=50&&j==2){
j=0;
}
else if(y>=850&&j==0){
j=2;
}
else if(y>=850&&j==1){
j=3;
}
else if(x>=850&&j==0){
j=1;
}
else if(x>=850&&j==2){
j=3;
}
g.setColor(Color.black);
g.fillOval(x,y,radius,radius);
}
public void draw(Graphics g){
}
}
public class Listener implements KeyListener {
int x=100;
int y=100;
int radius =50;
Graphics g;
public void keyPressed(KeyEvent e) {
int h = e.getKeyCode();
if (h == e.VK_W) {
g.setColor(Color.white);
g.fillOval(x, y, radius, radius);
y =y- 10;
g.setColor(Color.red);
g.fillOval(x,y,radius,radius);
System.out.println("w");
} else if (h == e.VK_S) {
g.setColor(Color.white);
g.fillOval(x, y, radius, radius);
y =y+ 10;
g.setColor(Color.red);
g.fillOval(x,y,radius,radius);
System.out.println("s");
} else if (h == e.VK_A) {
g.setColor(Color.white);
g.fillOval(x, y, radius, radius);
x =x- 10;
g.setColor(Color.red);
g.fillOval(x,y,radius,radius);
System.out.println("a");
} else if (h == e.VK_D) {
g.setColor(Color.white);
g.fillOval(x, y, radius, radius);
x =x+ 10;
g.setColor(Color.red);
g.fillOval(x,y,radius,radius);
System.out.println("d");
}
}
public void keyTyped(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
}