拼图小游戏———Day3

三. 添加图片

涉及知识 : Imagelcon类,JLable类,一维数组,Random类,二维数组

  1. ImageIcon类: ImageIcon类是Java中用于表示图像图标的类。它继承自Icon接口,并提供了一些与图像相关的方法,如获取图标的宽度和高度、获取图标的Image对象等。ImageIcon类通常用于Swing和AWT界面中,用于为按钮、标签等组件设置图标。

  2. JLabel类: JLabel类是Java中用于显示文本或图像的标签组件。它继承自JComponent类,并提供了一些用于设置和操作标签内容的方法,如设置文本、设置图标、设置字体等。JLabel类通常用于Swing和AWT界面中,用于显示静态文本或图像。

  3. 一维数组: 一维数组是Java中的一种数据结构,用于存储一组具有相同数据类型的元素。一维数组可以存储基本类型数据(如int、float等)或对象类型数据(如String、Person等),并且可以通过索引访问和修改数组元素。在Java中,一维数组的长度是固定的,即在创建数组时需要指定数组的长度。

  4. Random类: Random类是Java中用于生成随机数的类。它提供了多种方法用于生成不同类型的随机数,如生成整数随机数、生成浮点数随机数等。Random类使用伪随机数生成算法,根据种子值生成随机数序列。可以通过调用Random类的方法来获取不同范围的随机数。

  5. 二维数组: 二维数组是Java中的一种数据结构,用于表示具有二维结构的数据。二维数组实际上是由多个一维数组组成的,每个一维数组称为二维数组的行,而所有行组成了二维数组的列。二维数组可以存储基本类型数据或对象类型数据,并且可以通过行和列的索引访问和修改数组元素。在Java中,二维数组的行数和列数都是固定的,在创建数组时需要指定行数和列数。


在游戏中拼图由一整张图片分成大小相等的若干部分,打乱,复原;

一个部分也就是一张小图片,对应Imagelcon类对象,创建Imagelcon对象,再创建JLable对象对图片进行基本设置。

先将已经制作好的素材包添加到项目名下

在这里image是素材包

初始化一张图片

private void initImage() {
    //创建一个图片ImageIcon的对象
    ImageIcon icon = new ImageIcon("E:\\Ideal Code Exercise\\puzzllegame\\image\\animal\\animal3\\3.jpg");

    //创建一个JLable的对象(管理容器)
    JLabel jLabel = new JLabel(icon);

    //把管理容器添加到界面中
    this.add(jLabel);
}

创建一个图片ImageIcon的对象 

 image -->animal --> animal3 --> 3.jpg --> 右键 -->点击Copy Path/Reference --> 点击Absolute Path --> ctrl + v 复制到 ImageIcon icon = new ImageIcon(这里);

将一张图片分为15张(105,105)像素的小图片,以循环的模式将其添加到界面中

//初始化图片
private void initImage() {
int num = 1;
    for(int i = 0; i < 4; i++){
        for(int j = 0; j < 4; j++){
            //创建一个图片ImageIcon的对象
            ImageIcon icon = new ImageIcon("E:\\Ideal Code Exercise\\puzzllegame\\image\\animal\\animal3\\"+num+".jpg");
            //创建一个JLable的对象(管理容器)
            JLabel jLabel = new JLabel(icon);
            //指定图片位置
            jLabel.setBounds(105 * j, 105 * i, 105, 105);
            //把管理容器添加到界面中
            this.getContentPane().add(jLabel);
            num++;
        }
    }
}

这时运行的结果为一张有序图片,因此可以利用一维数组,Random类,二维数组

结合利用将其图片顺序打乱


细节:

在素材包内图片编码从一开始,因此一维数组元素从一开始,避免运行结果在末尾有不规则图片

最后一张图找不到素材,自动添加为空白图片

"+num+" : 地址拼接,注意各个符号之间不要有空格

实现如下:

private void initData() {
    //1.定义一个一维数组
    int[] temArr = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    //2.打乱数组中的数据的顺序
    //遍历数组,得到每一个元素,拿着每一个元素跟随机索引上的数据进行交换
    Random r = new Random();
    for (int i = 0; i < temArr.length; i++) {
        //获取随机索引
        int index = r.nextInt(temArr.length);
        //拿着历遍到的每一个数据,跟随机索引上的数据进行交换
        int temp = temArr[i];
        temArr[i] = temArr[index];
        temArr[index] = temp;
    }
    //3.创建一个二维数组(全局变量)
    // int[][] data = new int[4][4];

    //4.给二维数组添加数组
    for (int i = 0; i < temArr.length; i++) {
        data[i / 4][i % 4] = temArr[i];
    }

}

代码实现:

 // 创建一个二维数组
    int[][] data = new int[4][4];

    //1.创建一个游戏的主界面
    //跟游戏相关的所有逻辑写在这个类中
    public GameJFrame(){
        //初始化界面
        initJFrame();
        //初始化菜单
        initJMenuBar();
        //初始化数据(打乱)
        initData();
        //初始化图片
        initImage();

        //让显示出来,建议写在最后
        this.setVisible(true);
    }

    private void initData() {
        //1.定义一个一维数组
        int[] temArr = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
        //2.打乱数组中的数据的顺序
        //遍历数组,得到每一个元素,拿着每一个元素跟随机索引上的数据进行交换
        Random r = new Random();
        for (int i = 0; i < temArr.length; i++) {
            //获取随机索引
            int index = r.nextInt(temArr.length);
            //拿着历遍到的每一个数据,跟随机索引上的数据进行交换
            int temp = temArr[i];
            temArr[i] = temArr[index];
            temArr[index] = temp;
        }
        //3.创建一个二维数组(全局变量)
        // int[][] data = new int[4][4];

        //4.给二维数组添加数组
        for (int i = 0; i < temArr.length; i++) {
            data[i / 4][i % 4] = temArr[i];
        }

    }


    //初始化图片
    private void initImage() {
        for(int i = 0; i < 4; i++){
            for(int j = 0; j < 4; j++){
                int num = data[i][j];
                //创建一个图片ImageIcon的对象
                ImageIcon icon = new ImageIcon("E:\\Ideal Code Exercise\\puzzllegame\\image\\animal\\animal3\\"+num+".jpg");
                //创建一个JLable的对象(管理容器)
                JLabel jLabel = new JLabel(icon);
                //指定图片位置
                jLabel.setBounds(105 * j, 105 * i, 105, 105);
                //把管理容器添加到界面中
                this.getContentPane().add(jLabel);
            }
        }
    }

运行结果:

隐藏容器 :装载所有的组件

窗体 通过getContenPane() 获取,把要显示东西给它,没有特殊要求,默认放中间

取消默认的剧中放置,只有取消了才会按照XY轴的方式添加组件 

public void setLayout(     java.awt.LayoutManager manager )

隐藏容器(不需要创建,在底层以有实现方法)在idea中 选中方法 快捷键 ctrl + b;

功能以下,隐藏容器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值