创建loginBall类实现开始游戏界面
package 弹球小游戏;
import javax.swing.*;
import java.awt.*;
public class loginBall {
JFrame JF=new JFrame("弹球小游戏");
JLabel JL=new JLabel("欢迎来到弹球小游戏");
JButton jb=new JButton("开始游戏");
loginBall(){
JF.setBounds(700,270,450,500);
JL.setFont(new Font("宋体",Font.BOLD,30));
JL.setForeground(Color.pink);
JF.add(JL);
JF.add(jb);
JF.setVisible(true);
JF.setLayout(new FlowLayout(FlowLayout.CENTER,30,100));
JF.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
}
创建Ball类继承loginball类。使用Dialog文件对话框并添加相应的事件监听处理,当点击开始游戏后,游戏界面会弹出在开始游戏界面之上!
package 弹球小游戏;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Ball extends loginBall {
//设置桌面的宽度和高度
int Tab_width = 400;
int Tab_height = 550;
//设置球拍的宽度和高度
int P_width = 80;
int P_height = 20;
//设置球的大小(18个像素)
int Ball_siz = 18;
//用于记录小球的位置及初始化小球的位置(X:240,Y:100)
int X = 240;
int Y = 50;
//记录小球在X方向与Y的分速度
int Vx = 20;
int Vy = 20;
//记录球拍的位置
int P_X = 120;
final int P_Y = 450;
//标识游戏是否结束
boolean isOver =false;
//声名一个定时器
Timer time;
//自定义类,继承Canvas,充当画布
class myCanvas extends Canvas {
@Override
public void paint(Graphics g) {
//绘制内容
if (isOver) {
g.setColor(Color.PINK);
g.setFont(new Font("宋体", Font.BOLD, 30));
g.drawString("游戏结束!", 130, 150);
} else {
g.setColor(Color.red);
g.fillOval(X, Y, Ball_siz, Ball_siz);
g.setColor(Color.CYAN);
g.fillRect(P_X, P_Y, P_width, P_height);
}
}
}
myCanvas my = new myCanvas();
public void init() {
Dialog D1=new Dialog(JF, "弹球小游戏",true);
D1.setBounds(750,300,Tab_width,Tab_height);
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
D1.setVisible(true);
}
});
D1.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
KeyListener listen = new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
//获取当前按下的键对应的整数(键盘上的每一个键都对应一个整数)
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT) {
if (P_X > 0) {
P_X-= 30;
}
}
if (key == KeyEvent.VK_RIGHT) {
if (P_X<=(Tab_width-P_width)) {
P_X+= 30;
}
}
}
};
D1.addKeyListener(listen);
//小球坐标的控制
ActionListener sss = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//*根据边界范围修正速度
if (X <= 0||X >=(Tab_width-Ball_siz)) {
Vx = -Vx;
}
if (Y <= 0||(Y >P_Y-Ball_siz && X >P_X && X < P_X + P_width)) {
Vy = -Vy;
}
if (Y >P_Y-Ball_siz && (X < P_X || X > P_X+ P_width)) {
time.stop();
isOver = true; Dialog D1=new Dialog(JF, "弹球小游戏",true);
my.repaint();
}
X+=Vx;
Y+=Vy;
my.repaint();
}
};
time=new Timer(100,sss);
time.start();
my.setPreferredSize(new Dimension(Tab_width,Tab_height));
D1.add(my);
}
public static void main(String[] args) {
new Ball().init();
}
}
运行结果:当点击开始游戏后通过挡板的移动弹起小球;若小球下落未被弹起则游戏结束#