JAVA弹球小游戏

简介: JAVA弹球小游戏

Java入门小游戏之一:弹球游戏

运行结果:

源代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Main {
    // 创建窗口对象
    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;
    // 定义变量 记录小球在x和y轴方向上分别的移动速度
    private int speedY = 10;
    private int speedX = 5;
    // 定义变量 记录球拍的坐标
    private int racketX = 120;
    private final int racketY = 340;  // 这里设置为常量 是因为我们只需要 这个球拍沿着x轴移动
    // 定有变量 标识当前游戏是否已结束
    private boolean isOver = false;
    // 声明一个定时器
    private Timer timer;
    // 自定义一个类 继承canves 充当画布
    private class MyCanves extends Canvas {
        @Override
        public void paint(Graphics g) {
            // TODO 这里绘制内容
            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);  // 参数含义同上
            }
        }
    }
        MyCanves drawArea = new MyCanves();  // 创建一块属于自己的画布
        public void init() {
            // 组装视图 游戏逻辑控制
            // 完成球拍坐标的变化
            KeyListener listener = new KeyAdapter() {
                @Override
                public void keyPressed(KeyEvent e) {
                    // 获取当前按下的键
                    int keyCode = e.getKeyCode();
                    if (keyCode == KeyEvent.VK_LEFT || keyCode == KeyEvent.VK_A) {  // VK_LEFT表示的是向左的标
                        // <-向左移动
                        if (racketX > 0) {  // 防止左边越界
                            racketX -= 5;
                        }
                    }
                    // -> 向右移动
                    if (keyCode == KeyEvent.VK_RIGHT || keyCode == KeyEvent.VK_D) {  // VK_RIGHT 表示的是右标
                        if (racketX < TABLE_WIDTH - RACKET_WIDTH) {
                            racketX += 5;
                        }
                    }
                }
            };
            // 给Frame和drawArea注册监听器
            frame.addKeyListener(listener);
            drawArea.addKeyListener(listener);
            // 小球坐标控制
            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;
                        // 重绘界面
                    }
                    // 更新小球的坐标 重绘界面
                    ballX += speedX;
                    ballY += speedY;
                    // 重绘界面
                    drawArea.repaint();
                }
            };
            timer = new Timer(100, task);  // 第一个参数单位为毫秒 这个是 让这个界面0.1s更新一次
            timer.start();
            drawArea.setPreferredSize(new Dimension(TABLE_WIDTH, TABLE_HEIGHT)); // 设置画布的大小
            frame.add(drawArea);
            // 设置关闭按钮
            frame.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
            // 设置合适的大学
            frame.pack();
            frame.setVisible(true);
        }
    public static void main(String[] args){
        new Main().init();
    }
}


相关文章
|
5月前
|
Java
Java 实现 捕鱼达人 小游戏【附源码】
Java 实现 捕鱼达人 小游戏【附源码】
270 0
|
5月前
|
Java
Java实现一个坦克大战的小游戏【附源码】
Java实现一个坦克大战的小游戏【附源码】
206 0
|
3月前
|
数据可视化 Java
使用ChatGPT实现可视化操作扫雷小游戏 【java代码实现】
这篇文章介绍了使用Java语言和Swing框架实现的扫雷小游戏的详细代码和实现过程。
使用ChatGPT实现可视化操作扫雷小游戏 【java代码实现】
|
3月前
|
人工智能 Java 定位技术
人工智能ChatGPT 体验案例:使用ChatGPT实现java扫雷小游戏
这篇文章通过一个使用ChatGPT实现的Java扫雷小游戏案例,展示了ChatGPT在编程领域的应用能力。文章中包含了扫雷游戏的Java代码实现,代码中初始化了雷区地图,随机放置雷,计算每个格子周围雷的数量,并提供了一个简单的文本界面与用户交互进行游戏。游戏通过控制台输入接受玩家的指令,并给出相应的反馈。
人工智能ChatGPT 体验案例:使用ChatGPT实现java扫雷小游戏
|
3月前
|
Java
05 Java代码实现一个小游戏(剪刀石头布)和一个简易的万年历
05 Java代码实现一个小游戏(剪刀石头布)和一个简易的万年历
79 2
|
4月前
|
Java
[Java]猜数字小游戏
Java生成一个猜数字的小游戏
21 0
|
5月前
|
Java
Java 实现 植物大战僵尸 小游戏【附源码】
Java 实现 植物大战僵尸 小游戏【附源码】
106 3
|
5月前
|
Java
Java 实现 1024 小游戏【附源码】
Java 实现 1024 小游戏【附源码】
86 2
|
5月前
|
Java
Java 实现 贪吃蛇 小游戏【附源码】
Java 实现 贪吃蛇 小游戏【附源码】
46 0
|
5月前
|
Java
Java实现一个打飞机的小游戏【附源码】
Java实现一个打飞机的小游戏【附源码】
50 0