package learn;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class PinBall {
private Frame frame = new Frame();
//桌面的长和宽
private final int TABLE_WIDTH = 300;
private final int TABLE_HIGHT = 400;
//球拍的长和宽
private final int RACKET_WIDTH = 60;
private final int RACKET_HEIGHT = 20;
//球
private final int BALL_SIZE = 16;
//小球的坐标
private int ballX = 120;
private int ballY = 20;
//小球在x和y上的分速度
private int speedX = 5;
private int speedY = 10;
//球拍的坐标
private int racketX = 120;
private int racketY = 340;
//游戏是否结束
private boolean isOver = false;
//定时器
private Timer timer ;
public class MyCanvas extends Canvas
{
@Override
public void paint(Graphics g) {
if(isOver)
{
g.setColor(Color.BLUE);//设置颜色
g.setFont(new Font("Times",Font.BOLD,30));//设置字体
g.drawString("游戏结束",50,200);
}
else{
//绘制小球
g.setColor(Color.RED);
g.fillOval(ballX,ballY,BALL_SIZE,BALL_SIZE);
//绘制球拍
g.setColor(Color.PINK);
g.fillOval(racketX,racketY,RACKET_WIDTH,RACKET_HEIGHT);
}
}
}
MyCanvas drawArea = new MyCanvas();
public void init()
{
//球拍坐标的变化
KeyListener listener = new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode==KeyEvent.VK_LEFT)
{
if(racketX>0) racketX -= 10;
}
if(keyCode==KeyEvent.VK_RIGHT)
{
if(racketX<(TABLE_WIDTH-RACKET_WIDTH)) racketX += 10;
}
}
};
//监听器
frame.addKeyListener(listener);
drawArea.addKeyListener(listener);
//对小球的控制
ActionListener task = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//边界
if(ballX<=0||ballX>(TABLE_WIDTH-RACKET_WIDTH))
speedX = -speedX;
if(ballY<=0||(ballY>racketY-BALL_SIZE&&ballX>racketX&&ballX<racketX+RACKET_WIDTH))
speedY = -speedY;
if(ballY>(racketY-BALL_SIZE)&&(ballX<racketX||ballX>(racketX+RACKET_WIDTH)))
{
//停止计时器
timer.stop();
isOver = true;
drawArea.repaint();
}
ballX += speedX;
ballY += speedY;
drawArea.repaint();
}
};
timer = new Timer(100,task);
timer.start();
drawArea.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HIGHT));
frame.add(drawArea);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new PinBall().init();
}
}