[size=large][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][/size]
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][/size]