import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.Timer;
public class BallGame {
//创建窗口对象
Frame frame = new Frame();
//设置窗口的大小
private final int framewidth = 300;
private final int frameheight = 400;
//设置小球的位置
private int ballX = 200;
private int ballY = 100;
//设置球拍的位置
private int batX = 20;
private final int batY = 340;
//设置小球的大小
private final int ballsize = 10;
//设置球拍的大小
private final int batwidth = 60;
private final int batheight = 20;
//设置小球的速度
private int speedX = 5;
private int speedY = 10;
private Timer timer;
/*
* //设置球拍的速度 private final int speedbat = 8;
*/
//游戏是否结束
boolean isOver = false;
//创建画布
private class MyCanvas extends Canvas {
public void paint(Graphics g) {
if(isOver == false) {
//绘制小球
g.setColor(Color.RED);
g.fillOval(ballX, ballY,ballsize , ballsize);
//绘制球拍
g.setColor(Color.PINK);
g.fillRect(batX, batY, batwidth, batheight);
}else {
g.setColor(Color.BLACK);
g.setFont(new Font("宋体",Font.BOLD,30));
g.drawString("游戏结束了!!", 80, 180);
}
}
}
MyCanvas drawArea = new MyCanvas();
//左右键注册监听
public void init() {
drawArea.setPreferredSize(new Dimension(framewidth,frameheight));
frame.add(drawArea);
KeyAdapter listener = new KeyAdapter() {
//注意注意:keyPressed中k是小写
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_LEFT) {
if(batX >0)
batX -= 10;
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
if(batX<framewidth-batwidth)
batX += 10;
} } };
frame.addKeyListener(listener);
drawArea.addKeyListener(listener);
//小球坐标的控制
ActionListener actionlistener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(ballX<=0||ballX>=(framewidth-ballsize)) {
speedX = -speedX;
}
if(ballY<=0||ballY >batY - ballsize&&ballX>batX&&ballX<batX+batwidth) {
speedY = -speedY;
}
if(ballY>batY - ballsize&&(ballX<batX||ballX>batX+batwidth)) {
timer.stop();
isOver = true;
drawArea.repaint();
}
ballX = ballX + speedX;
ballY = ballY + speedY;
drawArea.repaint();
}
};
timer = new Timer(100,actionlistener);
timer.start();
frame.pack();
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public static void main(String[] args) {
new BallGame().init();
}
}
弹球游戏
最新推荐文章于 2022-06-12 13:02:42 发布