package AWT绘图;
import java.awt.*;
import java.util.TimerTask;
import java.awt.event.*;
import java.util.*;
public class PinBall
{
Random rand = new Random();
Frame frame = new Frame("桌面弹球");
//桌面宽高
private final int TABLE_WIDTH = 300;
private final int TABLE_HEIGHT = 400;
//球拍位置
private final int RACKET_Y = 340;
private int racketX = rand.nextInt(200);
//球拍宽高
private final int RACKET_WIDTH = 60;
private final int RACKET_HEIGHT = 20;
//小球大小
private final int BALL_SIZE = 16;
//小球运行速度
private int ySpeed = 10;
private double xyRate = rand.nextDouble()-0.5;
private int xSpeed = (int)(ySpeed*2*xyRate);
//小球坐标位置
private int ballX = rand.nextInt(200)+20;
private int ballY = rand.nextInt(10)+20;
//游戏是否结束
private boolean isLose = false;
//画布
private MyCanvas tableArea = new MyCanvas();
Timer timer;
public PinBall()
{
//搞定tableArea
tableArea.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));
frame.add(tableArea);
//定义键盘监听器
KeyAdapter key = new KeyAdapter()//注意这种搞监听器的方法
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode() == KeyEvent.VK_LEFT)
{
if(racketX > 0)
racketX = racketX-10;
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT)
{
if(racketX < TABLE_WIDTH-RACKET_WIDTH)
racketX += 10;
}
}
};
//为窗口和tableArea添加键盘监听器
frame.addKeyListener(key);
tableArea.addKeyListener(key);
//定义每隔0.1秒执行一次的事件监听器
ActionListener taskPerformed = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//if:小球碰到边框,水平速度反向
if(ballX <= 0 || ballX >= TABLE_WIDTH-BALL_SIZE)
xSpeed = -xSpeed;
//if:小球碰到球拍、或者:碰到上边缘:垂直速度反向
if(ballY >= RACKET_Y-BALL_SIZE && ballX > racketX && ballX < racketX + RACKET_WIDTH ||ballY <= 0 )
ySpeed = -ySpeed;
//if:小球挂掉
else if(ballY >= RACKET_Y-BALL_SIZE&&ballX <= racketX && ballX >= racketX + RACKET_WIDTH)
{
timer.cancel();//计时停止!
isLose = true;
tableArea.repaint();
}
//每计时一次,小球坐标改变
ballY += ySpeed;
ballX += xSpeed;
tableArea.repaint();
}
};
timer.start();
timer = new Timer(100,taskPerformed);
frame.pack();
frame.setLocation(550,190);
frame.setVisible(true);
frame.addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{System.exit(0);}
}
);
}
class MyCanvas extends Canvas
{
public void paint(Graphics g)
{
if(isLose)
{
g.setColor(new Color(225,0,0));
g.setFont(new Font("Times",Font.BOLD,30));
g.drawString("GAME OVER!",50,200);
}
else
{
g.setColor(new Color(240,240,80));
g.fillOval(ballX,ballY,BALL_SIZE,BALL_SIZE);
g.setColor(new Color(80,80,200));
g.fillRect(racketX,RACKET_Y,RACKET_WIDTH,RACKET_HEIGHT);
}
}
}
public static void main(String[] args)
{
new PinBall();
}
}
这是所有代码,求大神门帮帮忙,,感激不尽
import java.awt.*;
import java.util.TimerTask;
import java.awt.event.*;
import java.util.*;
public class PinBall
{
Random rand = new Random();
Frame frame = new Frame("桌面弹球");
//桌面宽高
private final int TABLE_WIDTH = 300;
private final int TABLE_HEIGHT = 400;
//球拍位置
private final int RACKET_Y = 340;
private int racketX = rand.nextInt(200);
//球拍宽高
private final int RACKET_WIDTH = 60;
private final int RACKET_HEIGHT = 20;
//小球大小
private final int BALL_SIZE = 16;
//小球运行速度
private int ySpeed = 10;
private double xyRate = rand.nextDouble()-0.5;
private int xSpeed = (int)(ySpeed*2*xyRate);
//小球坐标位置
private int ballX = rand.nextInt(200)+20;
private int ballY = rand.nextInt(10)+20;
//游戏是否结束
private boolean isLose = false;
//画布
private MyCanvas tableArea = new MyCanvas();
Timer timer;
public PinBall()
{
//搞定tableArea
tableArea.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));
frame.add(tableArea);
//定义键盘监听器
KeyAdapter key = new KeyAdapter()//注意这种搞监听器的方法
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode() == KeyEvent.VK_LEFT)
{
if(racketX > 0)
racketX = racketX-10;
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT)
{
if(racketX < TABLE_WIDTH-RACKET_WIDTH)
racketX += 10;
}
}
};
//为窗口和tableArea添加键盘监听器
frame.addKeyListener(key);
tableArea.addKeyListener(key);
//定义每隔0.1秒执行一次的事件监听器
ActionListener taskPerformed = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//if:小球碰到边框,水平速度反向
if(ballX <= 0 || ballX >= TABLE_WIDTH-BALL_SIZE)
xSpeed = -xSpeed;
//if:小球碰到球拍、或者:碰到上边缘:垂直速度反向
if(ballY >= RACKET_Y-BALL_SIZE && ballX > racketX && ballX < racketX + RACKET_WIDTH ||ballY <= 0 )
ySpeed = -ySpeed;
//if:小球挂掉
else if(ballY >= RACKET_Y-BALL_SIZE&&ballX <= racketX && ballX >= racketX + RACKET_WIDTH)
{
timer.cancel();//计时停止!
isLose = true;
tableArea.repaint();
}
//每计时一次,小球坐标改变
ballY += ySpeed;
ballX += xSpeed;
tableArea.repaint();
}
};
timer.start();
timer = new Timer(100,taskPerformed);
frame.pack();
frame.setLocation(550,190);
frame.setVisible(true);
frame.addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{System.exit(0);}
}
);
}
class MyCanvas extends Canvas
{
public void paint(Graphics g)
{
if(isLose)
{
g.setColor(new Color(225,0,0));
g.setFont(new Font("Times",Font.BOLD,30));
g.drawString("GAME OVER!",50,200);
}
else
{
g.setColor(new Color(240,240,80));
g.fillOval(ballX,ballY,BALL_SIZE,BALL_SIZE);
g.setColor(new Color(80,80,200));
g.fillRect(racketX,RACKET_Y,RACKET_WIDTH,RACKET_HEIGHT);
}
}
}
public static void main(String[] args)
{
new PinBall();
}
}
这是所有代码,求大神门帮帮忙,,感激不尽