package game;
import javax.swing.*;
import javax.swing.plaf.synth.ColorType;
import java.awt.*;
import java.awt.event.*;
public class 弹珠小游戏 extends JFrame {
/*电脑上每一个键都对应一个整数
* */
//桌面宽度和高度
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 racketY = 340;
private int racketX = 120;
//小球的速度
private int speedY = 10;
private int speedX = 5;
//表示游戏是否结束
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("Timer",Font.BOLD,30));
//绘画字体
g.drawString("挑战失败,游戏结束",20,185);
}else {
//游戏中
//小球 颜色 填充fill
g.setColor(Color.GREEN);
g.fillOval(ballX,ballY,BALL_SIZE,BALL_SIZE);
//球拍
g.setColor(Color.CYAN);
g.fillRect(racketX,racketY,RACKET_WIDTH,RACKET_HEIGHT);
}
}
}
public void init(){
//组装示图 设计逻辑思路
MyCanvas myCanvas = new MyCanvas();
KeyListener keyListener = new KeyAdapter(){
@Override
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;
}
}
}
};
this.addKeyListener(keyListener);
myCanvas.addKeyListener(keyListener);
//对小球进移动 timer
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){
//当小球超出球拍 游戏结束
//停止定时器
timer.stop();
//提示结束
isOver = true;
//重新绘制界面 可以提前结束
myCanvas.repaint();
}
ballX += speedX;
ballY += speedY;
//重绘界面 自动调用 paint()方法
myCanvas.repaint();
}
};
//创建一个定时器 对小球进行移动
//每100毫秒移动一次
//设置定时器开始
timer = new Timer(100,task);
timer.start();
myCanvas.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));
this.add(myCanvas);
this.setTitle("弹珠小游戏");
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.setVisible(true);
this.pack();
}
public static void main(String[] args) {
new 弹珠小游戏().init();
}
}
Pinball games
最新推荐文章于 2025-05-19 17:56:31 发布