乒乓球小游戏
import javax. swing. *;
import java. awt. *;
import java. awt. event. *;
public class PinBall {
private Frame frame = new Frame ( "弹球游戏" ) ;
private final int TABLE_WIDTH = 300 ;
private final int TABLE_HEIGHT = 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 ;
private int speedx = 5 ;
private int speedY = 10 ;
private int racketX = 120 ;
private 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. 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. fillRect ( racketX, racketY, RACKET_WIDTH, RACKET_HEIGHT) ;
}
}
}
MyCanvas drawArea = 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 ( racketX > 10 ) {
racketX -= 20 ;
}
}
if ( keyCode == KeyEvent. VK_RIGHT) {
if ( racketX < TABLE_WIDTH - RACKET_WIDTH) {
racketX += 20 ;
}
}
}
} ;
frame. addKeyListener ( keyListener) ;
drawArea. addKeyListener ( keyListener) ;
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 > 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 ( 50 , task) ;
timer. start ( ) ;
drawArea. setPreferredSize ( new Dimension ( TABLE_WIDTH, TABLE_HEIGHT) ) ;
frame. add ( drawArea) ;
frame. pack ( ) ;
frame. setVisible ( true ) ;
}
public static void main ( String[ ] args) {
new PinBall ( ) . init ( ) ;
}
}