package zikao;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class PinBall {
Frame frame = new Frame("弹球小游戏!");
//桌面宽,高
private final int TABLE_WIDTH = 300;
//球拍的高和宽
private final int RACKET_WIDTH = 60;
//小球的大小
private final int BALL_SIZE = 16;
//定义小球的位置信息
private int ballX = 120;
private int ballY = 20;
//定义变量,记录小球在X轴和Y轴上的速度
private int speedY = 10;
private int speedX = 5;
//定义变量,设置球拍的位置
private int racketX = 120;
private final int RACKETY = 340;
//定义变量,表示游戏是否结束
private boolean isOver = false;
//声明一个定时器
private Timer timer;
//自定义一个绘图板
private class MyCanvas extends Canvas {
@Override
public void paint(Graphics g) {
if (isOver) {
//游戏结束
g.setColor(Color.RED);
g.setFont(new Font("Times", Font.BOLD, 30));
g.drawString("游戏结束!", 50, 200);
} else {
//游戏中
g.setColor(Color.BLUE);
g.fillOval(ballX, ballY, BALL_SIZE, BALL_SIZE);
g.setColor(Color.PINK);
int RACKET_HEIGHT = 20;
g.fillRect(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 = e -> {
if (ballX <= 0 || ballX >= (TABLE_WIDTH - BALL_SIZE)) {
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();
int TABLE_HEIGHT = 400;
drawArea.setPreferredSize(new Dimension(TABLE_WIDTH, TABLE_HEIGHT));
frame.add(drawArea);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new PinBall().init();
}
}
通过java的AWT绘图,制作的弹球小游戏!