【Java项目介绍和界面搭建】拼图小游戏——打乱图片顺序

news/2024/7/16 7:58:12 标签: intellij-idea, java, ide, 前端, 开发语言, 安全, 网络
🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!


目录

拼图小游戏

练习

创建主界面1

代码

创建主界面2

菜单制作

在游戏界面中添加菜单

代码

添加图片

游戏主界面添加组件

代码

打乱图片顺序

练习


拼图小游戏

练习

创建主界面1

  • idea中创建一个宽603像素,高680像素的游戏主界面
  • idea中创建一个宽488像素,高430像素的登录界面
  • idea中创建一个宽488像素,高500像素的注册界面

代码

测试类:test ,在这个测试类中,我们直接把三个Java用户图形化界面生成了,但是这样三个功能界面全部都写在同一个main函数里面,对于我们以后的代码修改很不方便。

所以我们这里进行修改下,分别写成单独的类中。

java">package ui;

import javax.swing.*;

public class test {
    public static void main(String[] args) {
        //JFrame是JavaBean类描述界面的
        //属性 (宽 高)  行为

        //1.创建一个游戏的主界面
        JFrame gameJFrame = new JFrame();
        gameJFrame.setSize(603,680);//单位是像素
        gameJFrame.setVisible(true);

        //2.创建一个登陆界面
        JFrame loginJFrame = new JFrame();
        loginJFrame.setSize(488,430);
        loginJFrame.setVisible(true);

        //3.创建一个注册界面
        JFrame registerJFrame = new JFrame();
        registerJFrame.setSize(488,500);
        registerJFrame.setVisible(true);


    }
}

注册界面:RegisterJFrame

java">package ui;

import javax.swing.*;

public class RegisterJFrame extends JFrame {
    //跟相关注册界面的代码,都写里面
    public RegisterJFrame(){
        this.setSize(488,500);
        this.setVisible(true);
    }

}

登录界面:loginJFrame

java">package ui;

import javax.swing.*;

public class loginJFrame extends JFrame {
    //loginJFrame 表示登录界面
    //以后所以跟登录相关的代码,都写里面
    public loginJFrame(){
        this.setSize(488,430);
        this.setVisible(true);
    }

}

游戏界面:GameJFrame

java">package ui;

import javax.swing.*;

public class GameJFrame extends JFrame {
    //JFrame 界面,窗体
    //子类呢?也表示界面,窗体
    //规定:GameJFrame这个界面表示的就是游戏的主界面
    //以后跟游戏相关的所有逻辑都写在这个类中
    public GameJFrame(){
        this.setSize(603,680);//单位是像素
        this.setVisible(true);
    }

}

程序的启动入口:App

我们可以把test这个类删掉了,我们可以直接俄利用App这个程序的启动入口,我们需要启动哪个界面,我们直接创建谁就可以了。

java">import ui.GameJFrame;
import ui.RegisterJFrame;
import ui.loginJFrame;

public class App {
    public static void main(String[] args) {
        //表示程序的启动入口
        //如果我们想要开启一个界面,就创建谁的对象就好了
        new RegisterJFrame();
        new GameJFrame();
        new loginJFrame();
    }
}

创建主界面2

简单初始化界面

java">    public RegisterJFrame(){
        this.setSize(488,500);

        //设置界面的标题
        this.setTitle("拼图 注册");

        //设置界面置顶
        this.setAlwaysOnTop(true);

        //设置界面居中
        this.setLocationRelativeTo(null);

        //设置关闭模式
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        //让界面显示出来
        this.setVisible(true);
菜单制作

在游戏界面中添加菜单

代码

游戏界面:GameJFrame

java">package ui;

import javax.swing.*;

public class GameJFrame extends JFrame {
    //JFrame 界面,窗体
    //子类呢?也表示界面,窗体
    //规定:GameJFrame这个界面表示的就是游戏的主界面
    //以后跟游戏相关的所有逻辑都写在这个类中
    public GameJFrame(){
        //初始化界面
        initJFrame();

        //初始化菜单
        initJMenuBar();


        //让界面显示出来,最后写
        this.setVisible(true);
    }








    private void initJMenuBar() {
        //初始化菜单
        //创建整个的菜单对象
        JMenuBar jMenuBar = new JMenuBar();
        //创建菜单上面的两个选项的对象  (功能  关于我们)
        JMenu fuctionJMenu = new JMenu("功能");
        JMenu aboutJMenu = new JMenu("关于我们");
        //创建选项下面的条目对象
        JMenuItem replayItem = new JMenuItem("重新游戏");
        JMenuItem reloginItem = new JMenuItem("重新登录");
        JMenuItem closeItem = new JMenuItem("关闭游戏");

        JMenuItem accountItem = new JMenuItem("公众号");
        //将每一个选项下的条目添加到对应的选项中
        fuctionJMenu.add(replayItem);
        fuctionJMenu.add(reloginItem);
        fuctionJMenu.add(closeItem);

        aboutJMenu.add(accountItem);
        //将菜单里面的两个选项添加到菜单中
        jMenuBar.add(fuctionJMenu);
        jMenuBar.add(aboutJMenu);

        //给整个界面设置菜单
        this.setJMenuBar(jMenuBar);
    }

    private void initJFrame() {
        //设置界面的宽高
        this.setSize(603,680);//单位是像素

        //设置界面的标题
        this.setTitle("拼图单机版 v1.0");

        //设置界面置顶
        this.setAlwaysOnTop(true);

        //设置界面居中
        this.setLocationRelativeTo(null);

        //设置关闭模式
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

}

测试类:App

java">import ui.GameJFrame;
import ui.RegisterJFrame;
import ui.loginJFrame;

public class App {
    public static void main(String[] args) {
        //表示程序的启动入口
        //如果我们想要开启一个界面,就创建谁的对象就好了
        new GameJFrame();
//        new RegisterJFrame();
//        new loginJFrame();
    }
}

添加图片

  • 默认添加图片显示在正中央

多写一个初始化图片

java">package ui;

import javax.swing.*;

public class GameJFrame extends JFrame {
    //JFrame 界面,窗体
    //子类呢?也表示界面,窗体
    //规定:GameJFrame这个界面表示的就是游戏的主界面
    //以后跟游戏相关的所有逻辑都写在这个类中
    public GameJFrame(){
        //初始化界面
        initJFrame();

        //初始化菜单
        initJMenuBar();

        //初始化图片
        initimage();


        //让界面显示出来,最后写m
        this.setVisible(true);
    }

//---------------------------------- ---------------------
    //初始化图片
    private void initimage() {
    //1.创建一个图片imageicon的对象
        ImageIcon icon = new ImageIcon("E:\\tool\\IDEA-java\\java代码\\routing\\image\\animal\\animal3\\3.jpg");
    //2.创建一个Jlabel的对象(管理容器)
        JLabel JLabel = new JLabel(icon);
    //3.把管理容器添加到界面中
    this.add(JLabel);

    }


    private void initJMenuBar() {
        //初始化菜单
        //创建整个的菜单对象
        JMenuBar jMenuBar = new JMenuBar();
        //创建菜单上面的两个选项的对象  (功能  关于我们)
        JMenu fuctionJMenu = new JMenu("功能");
        JMenu aboutJMenu = new JMenu("关于我们");
        //创建选项下面的条目对象
        JMenuItem replayItem = new JMenuItem("重新游戏");
        JMenuItem reloginItem = new JMenuItem("重新登录");
        JMenuItem closeItem = new JMenuItem("关闭游戏");

        JMenuItem accountItem = new JMenuItem("公众号");
        //将每一个选项下的条目添加到对应的选项中
        fuctionJMenu.add(replayItem);
        fuctionJMenu.add(reloginItem);
        fuctionJMenu.add(closeItem);

        aboutJMenu.add(accountItem);
        //将菜单里面的两个选项添加到菜单中
        jMenuBar.add(fuctionJMenu);
        jMenuBar.add(aboutJMenu);

        //给整个界面设置菜单
        this.setJMenuBar(jMenuBar);
    }

    private void initJFrame() {
        //设置界面的宽高
        this.setSize(603,680);//单位是像素

        //设置界面的标题
        this.setTitle("拼图单机版 v1.0");

        //设置界面置顶
        this.setAlwaysOnTop(true);

        //设置界面居中
        this.setLocationRelativeTo(null);

        //设置关闭模式
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

}

app运行:

java">import ui.GameJFrame;
import ui.RegisterJFrame;
import ui.loginJFrame;

public class App {
    public static void main(String[] args) {
        //表示程序的启动入口
        //如果我们想要开启一个界面,就创建谁的对象就好了
        new GameJFrame();
//        new RegisterJFrame();
//        new loginJFrame();
    }
}

游戏主界面添加组件

代码
java">    //初始化图片
    private void initimage() {
        //外循环  --把内循环重复执行了4次
        int number = 1;
        for (int i = 0; i < 4; i++) {
            //内循环  --表示在一行添加4张图片
            for (int j = 0; j < 4; j++) {
                //1.创建一个Jlabel的对象(管理容器)
                JLabel JLabel = new JLabel(new ImageIcon("E:\\\\tool\\\\IDEA-java\\\\java代码\\\\routing\\\\image\\\\animal\\\\animal3\\\\" + number +".jpg"));
                //2.指定图片的位置
                JLabel.setBounds(105 * i,105 * j,105,105);
                //3.把管理容器添加到界面中
                this.getContentPane().add(JLabel);
                number++;
            }
        }

App 运行

java">import ui.GameJFrame;
import ui.RegisterJFrame;
import ui.loginJFrame;

public class App {
    public static void main(String[] args) {
        //表示程序的启动入口
        //如果我们想要开启一个界面,就创建谁的对象就好了
        new GameJFrame();
//        new RegisterJFrame();
//        new loginJFrame();
    }
}

打乱图片顺序

练习

打乱一维数组中的数据

int[] tempArr={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

要求:打乱一维数组中的数据,并按照4个一组的方式添加到二维数组中。

解法一:

java">package test;

import java.util.Random;

public class test1 {
    public static void main(String[] args) {
        //1.定义一个一维数组
        int[] temArr = {0,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.遍历数组
        for (int i = 0; i < temArr.length; i++) {
            System.out.print(temArr[i] + " ");
        }
        System.out.println();

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

        //5.给二维数组添加数据
        //解法一:
        //遍历一维数组tempArr得到每一个元素,把每一个元素依次添加到数组当中
        for (int i = 0; i < temArr.length; i++) {
            data[i / 4][i % 4] = temArr[i];
        }

        //遍历二维数组
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                System.out.print(data[i][j] + " ");
            }
            System.out.println();
        }
    }
}

解法二:

java">package test;

import java.util.Random;

public class test2 {
    public static void main(String[] args) {
        //1.定义一个一维数组
        int[] temArr = {0,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.遍历数组
        for (int i = 0; i < temArr.length; i++) {
            System.out.print(temArr[i] + " ");
        }
        System.out.println();

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

        //5.给二维数组添加数据
        //解法二:
        //遍历二维数组,给里面的每一个数据赋值
        int index = 0;
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                data[i][j] = temArr[index];
                index++;
            }
        }

        //遍历二维数组
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                System.out.print(data[i][j] + " ");
            }
            System.out.println();
        }
    }
}


在GameJFrame编写

java">package ui;

import javax.swing.*;
import java.util.Random;

public class GameJFrame extends JFrame {
    //JFrame 界面,窗体
    //子类呢?也表示界面,窗体
    //规定:GameJFrame这个界面表示的就是游戏的主界面
    //以后跟游戏相关的所有逻辑都写在这个类中

    //创建一个二维数组
    //目的:加载图片
    int[][] data = new int[4][4];
    public GameJFrame(){
        //初始化界面
        initJFrame();

        //初始化菜单
        initJMenuBar();

        //初始化数据(打乱)
        initdata();


        //初始化图片(根据打乱之后的数据结果加载图片)
        initimage();


        //让界面显示出来,最后写m
        this.setVisible(true);
    }


    //---------------------------------- ---------------------
    private void initdata() {
        //1.定义一个一维数组
        int[] temArr = {0,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.给二维数组添加数据
        //遍历一维数组tempArr得到每一个元素,把每一个元素依次添加到数组当中
        for (int i = 0; i < temArr.length; i++) {
            data[i / 4][i % 4] = temArr[i];
        }

    }




    //初始化图片
    private void initimage() {
        //外循环  --把内循环重复执行了4次
        for (int i = 0; i < 4; i++) {
            //内循环  --表示在一行添加4张图片
            for (int j = 0; j < 4; j++) {
                //获取当前要加载图片的序号
                int num = data[i][j];
                //创建一个Jlabel的对象(管理容器)
                JLabel JLabel = new JLabel(new ImageIcon("E:\\\\tool\\\\IDEA-java\\\\java代码\\\\routing\\\\image\\\\animal\\\\animal3\\\\" + num +".jpg"));
                //指定图片的位置
                JLabel.setBounds(105 * i,105 * j,105,105);
                //把管理容器添加到界面中
                this.getContentPane().add(JLabel);
            }
        }

//------------------------------------------------------

    }


    private void initJMenuBar() {
        //初始化菜单
        //创建整个的菜单对象
        JMenuBar jMenuBar = new JMenuBar();
        //创建菜单上面的两个选项的对象  (功能  关于我们)
        JMenu fuctionJMenu = new JMenu("功能");
        JMenu aboutJMenu = new JMenu("关于我们");
        //创建选项下面的条目对象
        JMenuItem replayItem = new JMenuItem("重新游戏");
        JMenuItem reloginItem = new JMenuItem("重新登录");
        JMenuItem closeItem = new JMenuItem("关闭游戏");

        JMenuItem accountItem = new JMenuItem("公众号");
        //将每一个选项下的条目添加到对应的选项中
        fuctionJMenu.add(replayItem);
        fuctionJMenu.add(reloginItem);
        fuctionJMenu.add(closeItem);

        aboutJMenu.add(accountItem);
        //将菜单里面的两个选项添加到菜单中
        jMenuBar.add(fuctionJMenu);
        jMenuBar.add(aboutJMenu);

        //给整个界面设置菜单
        this.setJMenuBar(jMenuBar);
    }

    private void initJFrame() {
        //设置界面的宽高
        this.setSize(603,680);//单位是像素

        //设置界面的标题
        this.setTitle("拼图单机版 v1.0");

        //设置界面置顶
        this.setAlwaysOnTop(true);

        //设置界面居中
        this.setLocationRelativeTo(null);

        //设置关闭模式
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        //取消默认的居中位置,只有取消了才会按照XY轴的形式添加组件
        this.setLayout(null);


    }

}

App 测试

java">import ui.GameJFrame;
import ui.RegisterJFrame;
import ui.loginJFrame;

public class App {
    public static void main(String[] args) {
        //表示程序的启动入口
        //如果我们想要开启一个界面,就创建谁的对象就好了
        new GameJFrame();
//        new RegisterJFrame();
//        new loginJFrame();
    }
}

现在就每次运行的结果都不一样了


http://www.niftyadmin.cn/n/5404464.html

相关文章

板子合集1.0

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 原文链接&#xff1a;https://blog.csdn.net/JK01WYX/ 文章目录 1.快速幂板子2.gcd得最大公约数3.堆优化的dijkstra板子4.线段树1板子 区间加线段…

Vue 3 中如何使用全局 API?

Vue 3 中的全局 API 使用详解 Vue 3 相较于 Vue 2 在全局 API 的使用上有了较大的变化。Vue 3 引入了新的全局 API 创建方式&#xff0c;并通过 createApp 方法替代了 Vue 2 中的 new Vue()。这种变化使得 Vue 3 在全局 API 的使用上更加灵活&#xff0c;也更好地支持了 tree-…

echarts vue 动画效果的水球图、波浪图教程

1、安装插件 前提是已经安装了echarts&#xff08;我的版本是4.2.1&#xff09; npm install echarts-liquidfill --save 我安装了3.1.0版本的&#xff0c;结果运行时报错"TypeError: wave.ensureState is not a function" 原因&#xff1a;echarts版本和echarts-l…

PYTHON 自动化办公:压缩图片(PIL)

1、介绍 在办公还是学习过程中&#xff0c;难免会遇到上传照片的问题。然而照片的大小限制一直都是个问题&#xff0c;例如照片限制在200Kb之内&#xff0c;虽然有很多图像压缩技术可以实现&#xff0c;但从图像处理的专业来说&#xff0c;可以利用代码实现 这里使用的库函数是…

【2024】利用python爬取csdn的博客用于迁移到hexo,hugo,wordpress...

前言 博主根据前两篇博客进行改进和升级 利用python爬取本站的所有博客链接-CSDN博客文章浏览阅读955次&#xff0c;点赞6次&#xff0c;收藏19次。定义一个json配置文件方便管理现在文件只有用户名称,后续可加配置读取用户名称&#xff0c;并且将其拼接成csdn个人博客链接ty…

C#中多语言编程原理及实例解析

文章目录 一、了解C#多语言编程原理1. 通用语言运行库&#xff08;CLR&#xff09;2. 通用类型系统&#xff08;CTS&#xff09;3. 微软中间语言&#xff08;MSIL&#xff09;4. 元数据和反射5. 公共语言规范&#xff08;CLS&#xff09; 二、实例说明 一、了解C#多语言编程原理…

Vue源码系列讲解——实例方法篇【二】(事件相关方法)

目录 0.前言 1. vm.$on 1.1 用法回顾 1.2 内部原理 2. vm.$emit 2.1 用法回顾 2.2 内部原理 3. vm.$off 3.1 用法回顾 3.2 内部原理 4. vm.$once 4.1 用法回顾 4.2 内部原理 0.前言 与事件相关的实例方法有4个&#xff0c;分别是vm.$on、vm.$emit、vm.$off和vm.$o…

Landsat8卫星数据产品介绍

Landsat 8卫星作为陆地卫星系列&#xff08;Landsat)的第8颗卫星&#xff0c;于2013年2月11日在美国加利福利亚州的范登堡空军基地由Atlas-V 401火箭搭载发射成功。Landsat 8 卫星有效载荷由两种科学仪器组成——可操作陆地成像仪&#xff08;OLI)和热红外传感器&#xff08;TI…