上一篇 弹球小游戏(预备篇)
这是一个用JAVA写的弹球游戏,适合于刚学习的awt编程的萌新,由于Nick也是刚刚学习,所以写的很简陋,大家多多见谅!
弹球小游戏
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class PinBall {
//创建窗口对象
private frame frame = new frame("Nick的弹球游戏");
//桌面宽度
private final int TABLE_WIDTH = 300;
//桌面高度
private final int TABLE_HEIGHT = 400;
//球拍的高度和宽度
private final int RACKET_HEIGHT = 20;
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 = 15;
private int speedX = 10;
//定义变量,记录球拍的坐标
private int racketX = 120;
private final int racketY = 340;
//定义变量,标识当前游戏是否结束
private boolean isOver = false;
//声明一个定时器
private Timer timer;
//自定义一个类,继承canvas,充当画布
private 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.BLACK);
g.fillRect(racketX,racketY,RACKET_WIDTH,RACKET_HEIGHT);
}
}
}
//创建绘画区域
MyCanvas drawArea = new MyCanvas();
public void init(){
//组装视图,游戏逻辑的控制
KeyListener listener=new KeyAdapter() {
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 和 drawArea 注册监听器
frame.addKeyListener(listener);
drawArea.addKeyListener(listener);
//小球坐标控制
ActionListener task = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//根据边界范围,修正速度
if(ballX<=0 || ballX>=(TABLE_WIDTH-BALL_SIZE)){
speedX = -speedX;
}
if(ballY<=0 || ballY>racketY-BALL_SIZE && ballX racketY-BALL_SIZE && (ballX < racketX || ballX>racketX+RACKET_WIDTH)){
//当前小球超出了球拍的范围,游戏结束
//停止定时器
timer.stop();
//修改游戏是否结束的标记
isOver = true;
//重绘界面
drawArea.repaint();
}
//更新小球坐标重绘界面
ballX+=speedX;
ballY+=speedY;
//重绘界面
drawArea.repaint();
}
};
timer = new Timer(95,task);
timer.start();
drawArea.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));
frame.add(drawArea);
//设置frame最佳大小,并可视
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new PinBall().init();
}
}


![[AWT] 弹球小游戏(实现篇) [AWT] 弹球小游戏(实现篇)](http://www.mshxw.com/aiimages/31/776847.png)
