Java 桌球小游戏

一、创建项目

  1. 创建一个 demo0 项目。

  2. 在项目根目录中创建 image 文件夹,并把下面两张图片拷贝到 image 目录中。

    1. 图 1

    2. 图 2

  3. 在 src 中创建 BallGame 类。

  4. 目录结构如下:

二、出现窗口

  1. 代码:

    // 导入包
    import java.awt.*;
    import javax.swing.*;
    
    // 定义 BallGame 类并继承 javax.swing.* 中的窗口类
    public class BallGame extends JFrame {
    
        // 加载窗口
        void launchFrame()
        {
            setSize(300,300);		// 窗口大小
            setLocation(50,50);		// 窗口位置
            setVisible(true);		// 控制窗口的显隐
        }
    
        // 入口
        public static void main(String[] args)
        {
            BallGame game = new BallGame();
            game.launchFrame();
        }
    
    }
    
  2. 运行结果:

三、加载图片

  1. 代码:

    // 导入包
    import java.awt.*;
    import javax.swing.*;
    
    // 定义 BallGame 类并继承 javax.swing.* 中的窗口类
    public class BallGame extends JFrame {
    
        // 引入图片
        Image ball = Toolkit.getDefaultToolkit().getImage("image/ball.png");
        Image desk = Toolkit.getDefaultToolkit().getImage("image/desk.jpg");
    
        // 画窗口
        public void paint(Graphics g)
        {
            System.out.println("画了一次窗口");
            g.drawImage(desk,0,0,null);         // 先画桌面,桌面在底层
            g.drawImage(ball,100,100,null);     // 后画球,球在桌面上
        }
    
        // 加载窗口
        void launchFrame()
        {
            setSize(856,500);        // 窗口大小
            setLocation(50,50);             // 窗口位置
            setVisible(true);                     // 控制窗口的显隐
        }
    
        // 入口
        public static void main(String[] args)
        {
            BallGame game = new BallGame();
            game.launchFrame();
        }
    
    }
    
  2. 运行结果:

  3. 注意,有的时候窗口里的图片加载不出来,如下图:

    遇到这种情况可以先将画出的窗口最小化,然后再从任务栏中把窗口打开,这样图片就加载出来了。

四、小球运动

  1. 代码:

    // 导入包
    import java.awt.*;
    import javax.swing.*;
    
    // 定义 BallGame 类并继承 javax.swing.* 中的窗口类
    public class BallGame extends JFrame {
    
        // 引入图片
        Image ball = Toolkit.getDefaultToolkit().getImage("image/ball.png");
        Image desk = Toolkit.getDefaultToolkit().getImage("image/desk.jpg");
    
        // 定义小球的坐标
        double x = 100;
        double y = 250;
    
        // 定义小球方向
        boolean right = true;
    
        // 画窗口
        public void paint(Graphics g)
        {
            System.out.println(x);
            g.drawImage(desk,0,0,null);         		// 先画桌面,桌面在底层
            g.drawImage(ball,(int)x,(int)y,null);     	// 后画球,球在桌面上
    
            if(right) x += 15; else x -= 15;
            if(x > 780) right = false;
            if(x < 36) right = true;
    
        }
    
        // 加载窗口
        void launchFrame()
        {
            setSize(856,500);        // 窗口大小
            setLocation(50,50);		// 窗口位置
            setVisible(true);		// 控制窗口的显隐
    
            while(true)
            {
                repaint();
                try {
                    Thread.sleep(40);       // 40ms
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
        // 入口
        public static void main(String[] args)
        {
            BallGame game = new BallGame();
            game.launchFrame();
        }
    
    }
    
  2. 运行结果:

五、任意角度

  1. 代码:

    // 导入包
    import java.awt.*;
    import javax.swing.*;
    
    // 定义 BallGame 类并继承 javax.swing.* 中的窗口类
    public class BallGame extends JFrame {
    
        // 引入图片
        Image ball = Toolkit.getDefaultToolkit().getImage("image/ball.png");
        Image desk = Toolkit.getDefaultToolkit().getImage("image/desk.jpg");
    
        // 定义小球的坐标
        double x = 80;
        double y = 250;
        double maxX = 791;
        double maxY = 430;
        double minX = 35;
        double minY = 65;
        // 定义弧度 60°角
        double degree = 3.14 / 3;
    
        /*
        * 经过测试计算洞口坐标:[x,y]
        * 上左:[35,65]    x 最小值和 y 的最小值
        * 上中:[413,65]
        * 上右:[791,65]
        *
        * 下左:[35,430]
        * 下中:[413,430]
        * 下右:[791,430]  x 最大值和 y 的最大值
        */
    
        // 画窗口
        public void paint(Graphics g)
        {
            g.drawImage(desk,0,0,null);         // 先画桌面,桌面在底层
            g.drawImage(ball,(int)x,(int)y,null);     // 后画球,球在桌面上
    
            x += 10 * Math.cos(degree);
            y += 10 * Math.sin(degree);
            if(y > maxY || y < minY) degree = -degree;
            if(x > maxX || x < minX) degree = 3.14 - degree;
    
        }
    
        // 加载窗口
        void launchFrame()
        {
            setSize(856,500);        // 窗口大小
            setLocation(50,50);             // 窗口位置
            setVisible(true);                     // 控制窗口的显隐
    
            while(true)
            {
                repaint();
                try {
                    Thread.sleep(40);       // 40ms
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
        // 入口
        public static void main(String[] args)
        {
            BallGame game = new BallGame();
            game.launchFrame();
        }
    
    }
    
  2. 运行结果:

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iGma_e

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值