import java.awt.*; import java.awt.event.*; import javax.swing.Timer; import java.util.TimerTask; public class ballgame { Frame frame = new Frame(); //桌面高度宽度 private final int table_with =300; private final int table_height =400; //球拍高度宽度 private final int reacket_with =60; private final int reacket_height =20; //小球大小 private final int ball_size =16; //小球坐标 private int ballx=120; private int bally=20; //小球速度 private int speedx=10; private int speedy=5; //球拍坐标 private int reacketx=120; private final int reackety=340; //定义变量,当前游戏是否结束 private boolean isover =false; //自定义类继承画布 private Timer timer; private class Mycanvas extends Canvas{ @Override public void paint(Graphics g) { if (isover){ g.setColor(Color.BLACK); 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.fillRect(reacketx,reackety,reacket_with,reacket_height); } } } //创建绘画区域 Mycanvas mycanvas = new Mycanvas(); //组装,逻辑 public void init() { //球泡坐标变化 KeyListener keyListener = new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { int keycode =e.getKeyCode(); if (keycode ==KeyEvent.VK_LEFT){ if (reacketx>0){ reacketx-=10; } } if (keycode == KeyEvent.VK_RIGHT){ if (reacketx<(table_with-reacket_with)){ reacketx+=10; } } } } ; ActionListener task =new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //更新小球坐标 if (ballx<0 || ballx>table_with-ball_size){ speedx=-speedx; } if (bally<=0 || (bally> reackety-ball_size && ballx>reacketx && ballx<reacketx+reacket_with)){ speedy=-speedy; } if (bally>reackety-ball_size && (ballx<reacketx || ballx> reacketx+reacket_with)){ timer.stop(); isover=true; mycanvas.repaint(); } ballx+=speedx; bally+=speedy; //重绘界面 mycanvas.repaint(); } }; //g给FRAME 设置监听器 frame.addKeyListener(keyListener); mycanvas.addKeyListener(keyListener); //小球坐标空值 timer =new Timer(100,task); timer.start(); mycanvas.setPreferredSize(new Dimension(table_with,table_height)); frame.add(mycanvas); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { new ballgame().init(); } }