> 文档中心 > 弹球小游戏(实现篇)

弹球小游戏(实现篇)

     

     上一篇 弹球游戏(预备篇)

       这是一个用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=(TABLE_WIDTH-BALL_SIZE)){      speedX = -speedX;  }  if(ballYracketY-BALL_SIZE && ballX racketY-BALL_SIZE && (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();    }}

        

央视天气网