弹力球

[size=xx-small]最近写了一个弹力球的游戏,点击开始小球开始动,但要用鼠标点击面板一下,接球的木板才会动,不知道那里写的不妥当

import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.Timer;

public class PinBall {

Frame ff = new Frame("弹力球");
Panel pp = new Panel();
Button b1 = new Button("开始");
Button b2 = new Button("暂停");
MyCanvas mc = new MyCanvas();
MyListener1 ml1 = new MyListener1();
MyListener2 ml2 = new MyListener2();
MyListener3 ml3 = new MyListener3();
Timer timer;

public static int CANVANSWIDTH = 300;
public static int CANVANAHEIGHT = 400;
public static int BALLSIZE = 15;
public static int BALLX = new Random().nextInt(CANVANSWIDTH - BALLSIZE);
public static int BALLY = new Random().nextInt(50);
public static double RATE = new Random().nextDouble() - 0.5;
public static int SPEEDY = 10;
public static int SPEEDX = (int)(RATE * SPEEDY);
public static int BOARDWIDTH = 40;
public static int BOARDHEIGHT = 10;
public static int BOARDX = new Random().nextInt(CANVANSWIDTH - BOARDWIDTH);
public static int BOARDY = 380;
public static boolean islose;


public void init() {

mc.setPreferredSize(new Dimension(CANVANSWIDTH,CANVANAHEIGHT));


timer = new Timer(100,ml1);

pp.setBackground(Color.blue);

pp.add(b1);

pp.add(b2);

ff.add(pp,BorderLayout.NORTH);

ff.add(mc);

ff.addWindowListener(ml3);

ff.setVisible(true);

b1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

timer.start();

mc.addKeyListener(ml2);

ff.addKeyListener(ml2);
}
});

b2.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

timer.stop();
}
});
ff.pack();


}

public class MyCanvas extends Canvas {

public void paint(Graphics g) {

if(!islose) {



g.setColor(Color.red);

g.fillOval(BALLX, BALLY, BALLSIZE, BALLSIZE);

g.setColor(Color.green);

g.fillRect(BOARDX, BOARDY, BOARDWIDTH, BOARDHEIGHT);
}
else {

g.setColor(Color.yellow);
g.drawString("游戏结束55555", 100, 80);
g.setFont(new Font("Monospaced",Font.BOLD,200));
}

}
}

public class MyListener1 implements ActionListener {

public void actionPerformed(ActionEvent e) {

if(BALLY > BOARDY - BALLSIZE &&(BALLX < BOARDX || BALLX > BOARDX + BOARDWIDTH)) {
islose = true;
timer.stop();

mc.repaint();
}

if(BALLX <= 0 || BALLX >= CANVANSWIDTH - BALLSIZE) {

SPEEDX = -SPEEDX;
}

if(BALLY <= 0 ||(BALLY >= BOARDY - BALLSIZE && BALLX >= BOARDX && BALLX <= BOARDX + BOARDWIDTH)) {

SPEEDY = -SPEEDY;
}
BALLX += SPEEDX;
BALLY += SPEEDY;
mc.repaint();

}
}

public class MyListener2 extends KeyAdapter {

public void keyPressed(KeyEvent e) {

if(e.getKeyCode() == KeyEvent.VK_LEFT && BOARDX >0) {

BOARDX -= 10;
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT && BOARDX + BOARDWIDTH < CANVANSWIDTH) {

BOARDX += 10;
}
}
}

public class MyListener3 implements WindowListener {

public void windowActivated(WindowEvent e) {

}
     public void windowClosed(WindowEvent e) {
    
     }
public void windowClosing(WindowEvent e) {

System.exit(0);
}
public void windowDeactivated(WindowEvent e) {

}
public void windowDeiconified(WindowEvent e) {

}
public void windowIconified(WindowEvent e) {

}
public void windowOpened(WindowEvent e) {

}

}
public static void main(String[] args) {

new PinBall().init();
}
}
[/size]

你可能感兴趣的:(游戏,swing)