其他分享
首页 > 其他分享> > 02.第一个桌球小游戏

02.第一个桌球小游戏

作者:互联网

来源于学习教程,纪念第一个java程序。(只实现了弹弹弹功能)
编辑器:IDEA企业版(新安装有 30 天试用期。至于如何白嫖?某宝搜索:idea激活,9.9搞定)
Java版本:jdk 8(如何安装?请看 01.Java 环境安装

版本V1.0 加载窗口代码

// 引用窗口类
import java.awt.*;
import javax.swing.*;

// 用于继承窗口类
public class BallGame extends JFrame {

    // 窗口加载
    void launchFrame(){
        // 设置窗口大小,两个300分别代表窗口的长和宽
        setSize(300,300);
        // 位置,用于给窗口定位,两个数字分别代表x,y轴上的长度定位。屏幕左上角是 0 点,往屏幕右方是 x 正半轴,往屏幕下方是 y 正半轴
        setLocation(400,400);
        setVisible(true);
    }

    //main方法是程序执行的入口
    public static void main(String[] args){
        System.out.println("我是jungle,我想谈对象了,记于2021年10月3日。");
        // 创建对象
        BallGame game = new BallGame();
        game.launchFrame();
    }
}

效果图

版本V1.1 加载两个图片:桌球与桌面

有一个问题,有可能第一次加载图片的时候,会显示不出来,此时最小化窗口,重新点开就可以了。
如果还是没图片,可以最大化窗口,看看图片在哪儿,有可能是坐标数字有问题,慢慢调。
画图顺序:先画桌面,再画球

// 引用窗口类
import java.awt.*;
import javax.swing.*;

// 用于继承窗口类
public class BallGame extends JFrame {
    // ball.png 和 desk.png 跟 当前代码文件目录的同级目录 /images/
    // 加载桌球图片,括号中放置图片路径
    Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
    // 加载桌面图片,括号中放置图片路径
    Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.png");

    // 定义画窗口的方法,让图片出现在窗口上
    public void paint(Graphics g){
        System.out.println("窗口被画了一次");
        // 画图的坐标参考系为画出的窗口,并非电脑屏幕
        // 画 desk 桌面这个对象,位置在坐标(16,24)
        g.drawImage(desk,16,24,null);
        // 画 ball 这个对象,位置在坐标(200,200)
        g.drawImage(ball,200,200,null);
    }

    // 窗口加载
    void launchFrame(){
        // 设置窗口大小,1250,650分别代表窗口的长和宽
        setSize(1250,650);
        // 位置,用于给窗口定位,两个数字分别代表x,y轴上的长度定位。屏幕左上角是 0 点,往屏幕右方是 x 正半轴,往屏幕下方是 y 正半轴
        setLocation(100,100);
        setVisible(true);
    }

    //main方法是程序执行的入口
    public static void main(String[] args){
        System.out.println("我是jungle,我想谈对象了,记于2021年10月3日。");
        // 创建对象
        BallGame game = new BallGame();
        game.launchFrame();
    }
}

效果图

版本V1.2 使小球图片水平方向动起来并实现边界检测,触碰边界小球回弹,实现动画效果

思路:让窗口反复 画 这个动作(这次代码先着重原理)

// 引用窗口类
import java.awt.*;
import javax.swing.*;

// 用于继承窗口类
public class BallGame extends JFrame {
    // ball.png 和 desk.png 跟 当前代码文件目录的同级目录 /images/
    // 加载桌球图片,括号中放置图片路径
    Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
    // 加载桌面图片,括号中放置图片路径
    Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.png");

    // 设置坐标变量
    double x = 100; //小球的横坐标
    double y = 100; //小球的纵坐标
    boolean right = true; //方向
    
    // 定义画窗口的方法,让图片出现在窗口上
    public void paint(Graphics g){
        System.out.println("窗口被画了一次");
        // 画图的坐标参考系为画出的窗口,并非电脑屏幕
        // 画 desk 桌面这个对象,位置在坐标(16,24)
        g.drawImage(desk,16,24,null);
        // 画 ball 这个对象,位置在坐标(200,200)
        g.drawImage(ball,(int)x,(int)y,null);

        // 每次调用,更改 x 值,达到移动效果
        if(right){
            x = x + 20;
        }else{
            x = x - 20;
        }
        // 设置当小球移动的 x 坐标值大于1090时,改变方向,类似于设置小球碰撞边界
        if(x > 1090){
            right = false;
        }
        // 设置当小球移动的 x 坐标值小于100时,改变方向,类似于设置小球碰撞边界
        if(x < 90){
            right = true;
        }
    }

    // 窗口加载
    void launchFrame(){
        // 设置窗口大小,1250,650分别代表窗口的长和宽
        setSize(1250,650);
        // 位置,用于给窗口定位,两个数字分别代表x,y轴上的长度定位。屏幕左上角是 0 点,往屏幕右方是 x 正半轴,往屏幕下方是 y 正半轴
        setLocation(100,100);
        setVisible(true);

        // 重画窗口,设置一个死循环,每秒画20次
        while(true){
            repaint();
            // 用来处理异常
            try{
                Thread.sleep(50); //设置画的频率:40ms,1秒=1000毫秒,此处相当于1秒画20次窗口
            }catch(Exception e){
                e.printStackTrace();
            }

        }
    }

    //main方法是程序执行的入口
    public static void main(String[] args){
        System.out.println("我是jungle,我想谈对象了,记于2021年10月3日。");
        // 创建对象
        BallGame game = new BallGame();
        game.launchFrame();
    }
}

效果图

版本V2.0 最终版(粗略版:只实现了弹弹弹)

需要删减修改代码,可重新在旁边创建一个 BallGame2.java

// 引用窗口类
import java.awt.*;
import javax.swing.*;

// 用于继承窗口类
public class BallGame2 extends JFrame {
    // ball.png 和 desk.png 跟 当前代码文件目录的同级目录 /images/
    // 加载桌球图片,括号中放置图片路径
    Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
    // 加载桌面图片,括号中放置图片路径
    Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.png");

    // 设置坐标变量
    double x = 100; //小球的横坐标
    double y = 100; //小球的纵坐标
    // 定义弧度变量
    double degree = 3.14/3; // 此处是:60 度

    // 定义画窗口的方法,让图片出现在窗口上
    public void paint(Graphics g){
        System.out.println("窗口被画了一次");
        // 画图的坐标参考系为画出的窗口,并非电脑屏幕
        // 画 desk 桌面这个对象,位置在坐标(16,24)
        g.drawImage(desk,16,24,null);
        // 画 ball 这个对象,位置在坐标(200,200)
        g.drawImage(ball,(int)x,(int)y,null);

        // 设置弹力角度以及速度
        x = x + 20 * Math.cos(degree);
        y = y + 20 * Math.sin(degree);
        // 碰到上下边界,小球回弹
        if(y > 650-100 || y < 0+90){ // 650 是窗口高度,100是窗口下方的桌子边框高度+球直径;90是窗口上方的桌子边框高度+球直径。
            degree = -degree;
        }
        // 碰到左右边界,小球弹弹弹
        if(x > 1250-120 || x < 0+90){ // 1250 是窗口宽度,70是窗口右方的桌子边框宽度+球直径;90是窗口左边的桌子边框宽度+球直径。
            degree = 3.14 - degree;
        }
    }

    // 窗口加载
    void launchFrame(){
        // 设置窗口大小,1250,650分别代表窗口的长和宽
        setSize(1250,650);
        // 位置,用于给窗口定位,两个数字分别代表x,y轴上的长度定位。屏幕左上角是 0 点,往屏幕右方是 x 正半轴,往屏幕下方是 y 正半轴
        setLocation(100,100);
        setVisible(true);

        // 重画窗口,设置一个死循环,每秒画20次
        while(true){
            repaint();
            // 用来处理异常
            try{
                Thread.sleep(50); //设置画的频率:40ms,1秒=1000毫秒,此处相当于1秒画20次窗口
            }catch(Exception e){
                e.printStackTrace();
            }

        }
    }

    //main方法是程序执行的入口
    public static void main(String[] args){
        System.out.println("我是jungle,我想谈对象了,记于2021年10月3日。");
        // 创建对象
        BallGame2 game = new BallGame2();
        game.launchFrame();
    }
}

效果图(粗略版:只实现了弹弹弹)

至此结束。

标签:02,ball,窗口,桌球,void,小游戏,desk,100,png
来源: https://www.cnblogs.com/jungle233/p/15365560.html