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


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

    目录

    拼图小游戏

    练习

    创建主界面1

    代码

    创建主界面2

    菜单制作

    在游戏界面中添加菜单

    代码

    添加图片

    游戏主界面添加组件

    代码

    打乱图片顺序

    练习


    拼图小游戏

    练习

    创建主界面1

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

    代码

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

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

    1. package ui;
    2. import javax.swing.*;
    3. public class test {
    4. public static void main(String[] args) {
    5. //JFrame是JavaBean类描述界面的
    6. //属性 (宽 高) 行为
    7. //1.创建一个游戏的主界面
    8. JFrame gameJFrame = new JFrame();
    9. gameJFrame.setSize(603,680);//单位是像素
    10. gameJFrame.setVisible(true);
    11. //2.创建一个登陆界面
    12. JFrame loginJFrame = new JFrame();
    13. loginJFrame.setSize(488,430);
    14. loginJFrame.setVisible(true);
    15. //3.创建一个注册界面
    16. JFrame registerJFrame = new JFrame();
    17. registerJFrame.setSize(488,500);
    18. registerJFrame.setVisible(true);
    19. }
    20. }

    注册界面:RegisterJFrame

    1. package ui;
    2. import javax.swing.*;
    3. public class RegisterJFrame extends JFrame {
    4. //跟相关注册界面的代码,都写里面
    5. public RegisterJFrame(){
    6. this.setSize(488,500);
    7. this.setVisible(true);
    8. }
    9. }

    登录界面:loginJFrame

    1. package ui;
    2. import javax.swing.*;
    3. public class loginJFrame extends JFrame {
    4. //loginJFrame 表示登录界面
    5. //以后所以跟登录相关的代码,都写里面
    6. public loginJFrame(){
    7. this.setSize(488,430);
    8. this.setVisible(true);
    9. }
    10. }

    游戏界面:GameJFrame

    1. package ui;
    2. import javax.swing.*;
    3. public class GameJFrame extends JFrame {
    4. //JFrame 界面,窗体
    5. //子类呢?也表示界面,窗体
    6. //规定:GameJFrame这个界面表示的就是游戏的主界面
    7. //以后跟游戏相关的所有逻辑都写在这个类中
    8. public GameJFrame(){
    9. this.setSize(603,680);//单位是像素
    10. this.setVisible(true);
    11. }
    12. }

    程序的启动入口:App

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

    1. import ui.GameJFrame;
    2. import ui.RegisterJFrame;
    3. import ui.loginJFrame;
    4. public class App {
    5. public static void main(String[] args) {
    6. //表示程序的启动入口
    7. //如果我们想要开启一个界面,就创建谁的对象就好了
    8. new RegisterJFrame();
    9. new GameJFrame();
    10. new loginJFrame();
    11. }
    12. }

    创建主界面2

    简单初始化界面

    1. public RegisterJFrame(){
    2. this.setSize(488,500);
    3. //设置界面的标题
    4. this.setTitle("拼图 注册");
    5. //设置界面置顶
    6. this.setAlwaysOnTop(true);
    7. //设置界面居中
    8. this.setLocationRelativeTo(null);
    9. //设置关闭模式
    10. this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    11. //让界面显示出来
    12. this.setVisible(true);
    菜单制作

    在游戏界面中添加菜单

    代码

    游戏界面:GameJFrame

    1. package ui;
    2. import javax.swing.*;
    3. public class GameJFrame extends JFrame {
    4. //JFrame 界面,窗体
    5. //子类呢?也表示界面,窗体
    6. //规定:GameJFrame这个界面表示的就是游戏的主界面
    7. //以后跟游戏相关的所有逻辑都写在这个类中
    8. public GameJFrame(){
    9. //初始化界面
    10. initJFrame();
    11. //初始化菜单
    12. initJMenuBar();
    13. //让界面显示出来,最后写
    14. this.setVisible(true);
    15. }
    16. private void initJMenuBar() {
    17. //初始化菜单
    18. //创建整个的菜单对象
    19. JMenuBar jMenuBar = new JMenuBar();
    20. //创建菜单上面的两个选项的对象 (功能 关于我们)
    21. JMenu fuctionJMenu = new JMenu("功能");
    22. JMenu aboutJMenu = new JMenu("关于我们");
    23. //创建选项下面的条目对象
    24. JMenuItem replayItem = new JMenuItem("重新游戏");
    25. JMenuItem reloginItem = new JMenuItem("重新登录");
    26. JMenuItem closeItem = new JMenuItem("关闭游戏");
    27. JMenuItem accountItem = new JMenuItem("公众号");
    28. //将每一个选项下的条目添加到对应的选项中
    29. fuctionJMenu.add(replayItem);
    30. fuctionJMenu.add(reloginItem);
    31. fuctionJMenu.add(closeItem);
    32. aboutJMenu.add(accountItem);
    33. //将菜单里面的两个选项添加到菜单中
    34. jMenuBar.add(fuctionJMenu);
    35. jMenuBar.add(aboutJMenu);
    36. //给整个界面设置菜单
    37. this.setJMenuBar(jMenuBar);
    38. }
    39. private void initJFrame() {
    40. //设置界面的宽高
    41. this.setSize(603,680);//单位是像素
    42. //设置界面的标题
    43. this.setTitle("拼图单机版 v1.0");
    44. //设置界面置顶
    45. this.setAlwaysOnTop(true);
    46. //设置界面居中
    47. this.setLocationRelativeTo(null);
    48. //设置关闭模式
    49. this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    50. }
    51. }

    测试类:App

    1. import ui.GameJFrame;
    2. import ui.RegisterJFrame;
    3. import ui.loginJFrame;
    4. public class App {
    5. public static void main(String[] args) {
    6. //表示程序的启动入口
    7. //如果我们想要开启一个界面,就创建谁的对象就好了
    8. new GameJFrame();
    9. // new RegisterJFrame();
    10. // new loginJFrame();
    11. }
    12. }

    添加图片

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

    多写一个初始化图片

    1. package ui;
    2. import javax.swing.*;
    3. public class GameJFrame extends JFrame {
    4. //JFrame 界面,窗体
    5. //子类呢?也表示界面,窗体
    6. //规定:GameJFrame这个界面表示的就是游戏的主界面
    7. //以后跟游戏相关的所有逻辑都写在这个类中
    8. public GameJFrame(){
    9. //初始化界面
    10. initJFrame();
    11. //初始化菜单
    12. initJMenuBar();
    13. //初始化图片
    14. initimage();
    15. //让界面显示出来,最后写m
    16. this.setVisible(true);
    17. }
    18. //---------------------------------- ---------------------
    19. //初始化图片
    20. private void initimage() {
    21. //1.创建一个图片imageicon的对象
    22. ImageIcon icon = new ImageIcon("E:\\tool\\IDEA-java\\java代码\\routing\\image\\animal\\animal3\\3.jpg");
    23. //2.创建一个Jlabel的对象(管理容器)
    24. JLabel JLabel = new JLabel(icon);
    25. //3.把管理容器添加到界面中
    26. this.add(JLabel);
    27. }
    28. private void initJMenuBar() {
    29. //初始化菜单
    30. //创建整个的菜单对象
    31. JMenuBar jMenuBar = new JMenuBar();
    32. //创建菜单上面的两个选项的对象 (功能 关于我们)
    33. JMenu fuctionJMenu = new JMenu("功能");
    34. JMenu aboutJMenu = new JMenu("关于我们");
    35. //创建选项下面的条目对象
    36. JMenuItem replayItem = new JMenuItem("重新游戏");
    37. JMenuItem reloginItem = new JMenuItem("重新登录");
    38. JMenuItem closeItem = new JMenuItem("关闭游戏");
    39. JMenuItem accountItem = new JMenuItem("公众号");
    40. //将每一个选项下的条目添加到对应的选项中
    41. fuctionJMenu.add(replayItem);
    42. fuctionJMenu.add(reloginItem);
    43. fuctionJMenu.add(closeItem);
    44. aboutJMenu.add(accountItem);
    45. //将菜单里面的两个选项添加到菜单中
    46. jMenuBar.add(fuctionJMenu);
    47. jMenuBar.add(aboutJMenu);
    48. //给整个界面设置菜单
    49. this.setJMenuBar(jMenuBar);
    50. }
    51. private void initJFrame() {
    52. //设置界面的宽高
    53. this.setSize(603,680);//单位是像素
    54. //设置界面的标题
    55. this.setTitle("拼图单机版 v1.0");
    56. //设置界面置顶
    57. this.setAlwaysOnTop(true);
    58. //设置界面居中
    59. this.setLocationRelativeTo(null);
    60. //设置关闭模式
    61. this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    62. }
    63. }

    app运行:

    1. import ui.GameJFrame;
    2. import ui.RegisterJFrame;
    3. import ui.loginJFrame;
    4. public class App {
    5. public static void main(String[] args) {
    6. //表示程序的启动入口
    7. //如果我们想要开启一个界面,就创建谁的对象就好了
    8. new GameJFrame();
    9. // new RegisterJFrame();
    10. // new loginJFrame();
    11. }
    12. }

    游戏主界面添加组件

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

    App 运行

    1. import ui.GameJFrame;
    2. import ui.RegisterJFrame;
    3. import ui.loginJFrame;
    4. public class App {
    5. public static void main(String[] args) {
    6. //表示程序的启动入口
    7. //如果我们想要开启一个界面,就创建谁的对象就好了
    8. new GameJFrame();
    9. // new RegisterJFrame();
    10. // new loginJFrame();
    11. }
    12. }

    打乱图片顺序

    练习

    打乱一维数组中的数据

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

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

    解法一:

    1. package test;
    2. import java.util.Random;
    3. public class test1 {
    4. public static void main(String[] args) {
    5. //1.定义一个一维数组
    6. int[] temArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    7. //2.打乱数组中的顺序
    8. //遍历数组,得到每一个元素,拿着每一个元素跟随机索引上的数据进行交换
    9. Random r = new Random();
    10. for (int i = 0; i < temArr.length; i++) {
    11. //获取到随机索引
    12. int index = r.nextInt(temArr.length);
    13. //拿着每一个元素跟随机索引上的数据进行交换
    14. int temp = temArr[i];
    15. temArr[i] = temArr[index];
    16. temArr[index] = temp;
    17. }
    18. //3.遍历数组
    19. for (int i = 0; i < temArr.length; i++) {
    20. System.out.print(temArr[i] + " ");
    21. }
    22. System.out.println();
    23. //4.创建一个二维数组
    24. int[][] data = new int[4][4];
    25. //5.给二维数组添加数据
    26. //解法一:
    27. //遍历一维数组tempArr得到每一个元素,把每一个元素依次添加到数组当中
    28. for (int i = 0; i < temArr.length; i++) {
    29. data[i / 4][i % 4] = temArr[i];
    30. }
    31. //遍历二维数组
    32. for (int i = 0; i < data.length; i++) {
    33. for (int j = 0; j < data[i].length; j++) {
    34. System.out.print(data[i][j] + " ");
    35. }
    36. System.out.println();
    37. }
    38. }
    39. }

    解法二:

    1. package test;
    2. import java.util.Random;
    3. public class test2 {
    4. public static void main(String[] args) {
    5. //1.定义一个一维数组
    6. int[] temArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    7. //2.打乱数组中的顺序
    8. //遍历数组,得到每一个元素,拿着每一个元素跟随机索引上的数据进行交换
    9. Random r = new Random();
    10. for (int i = 0; i < temArr.length; i++) {
    11. //获取到随机索引
    12. int index = r.nextInt(temArr.length);
    13. //拿着每一个元素跟随机索引上的数据进行交换
    14. int temp = temArr[i];
    15. temArr[i] = temArr[index];
    16. temArr[index] = temp;
    17. }
    18. //3.遍历数组
    19. for (int i = 0; i < temArr.length; i++) {
    20. System.out.print(temArr[i] + " ");
    21. }
    22. System.out.println();
    23. //4.创建一个二维数组
    24. int[][] data = new int[4][4];
    25. //5.给二维数组添加数据
    26. //解法二:
    27. //遍历二维数组,给里面的每一个数据赋值
    28. int index = 0;
    29. for (int i = 0; i < data.length; i++) {
    30. for (int j = 0; j < data[i].length; j++) {
    31. data[i][j] = temArr[index];
    32. index++;
    33. }
    34. }
    35. //遍历二维数组
    36. for (int i = 0; i < data.length; i++) {
    37. for (int j = 0; j < data[i].length; j++) {
    38. System.out.print(data[i][j] + " ");
    39. }
    40. System.out.println();
    41. }
    42. }
    43. }

    在GameJFrame编写

    1. package ui;
    2. import javax.swing.*;
    3. import java.util.Random;
    4. public class GameJFrame extends JFrame {
    5. //JFrame 界面,窗体
    6. //子类呢?也表示界面,窗体
    7. //规定:GameJFrame这个界面表示的就是游戏的主界面
    8. //以后跟游戏相关的所有逻辑都写在这个类中
    9. //创建一个二维数组
    10. //目的:加载图片
    11. int[][] data = new int[4][4];
    12. public GameJFrame(){
    13. //初始化界面
    14. initJFrame();
    15. //初始化菜单
    16. initJMenuBar();
    17. //初始化数据(打乱)
    18. initdata();
    19. //初始化图片(根据打乱之后的数据结果加载图片)
    20. initimage();
    21. //让界面显示出来,最后写m
    22. this.setVisible(true);
    23. }
    24. //---------------------------------- ---------------------
    25. private void initdata() {
    26. //1.定义一个一维数组
    27. int[] temArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    28. //2.打乱数组中的顺序
    29. //遍历数组,得到每一个元素,拿着每一个元素跟随机索引上的数据进行交换
    30. Random r = new Random();
    31. for (int i = 0; i < temArr.length; i++) {
    32. //获取到随机索引
    33. int index = r.nextInt(temArr.length);
    34. //拿着每一个元素跟随机索引上的数据进行交换
    35. int temp = temArr[i];
    36. temArr[i] = temArr[index];
    37. temArr[index] = temp;
    38. }
    39. //3.给二维数组添加数据
    40. //遍历一维数组tempArr得到每一个元素,把每一个元素依次添加到数组当中
    41. for (int i = 0; i < temArr.length; i++) {
    42. data[i / 4][i % 4] = temArr[i];
    43. }
    44. }
    45. //初始化图片
    46. private void initimage() {
    47. //外循环 --把内循环重复执行了4次
    48. for (int i = 0; i < 4; i++) {
    49. //内循环 --表示在一行添加4张图片
    50. for (int j = 0; j < 4; j++) {
    51. //获取当前要加载图片的序号
    52. int num = data[i][j];
    53. //创建一个Jlabel的对象(管理容器)
    54. JLabel JLabel = new JLabel(new ImageIcon("E:\\\\tool\\\\IDEA-java\\\\java代码\\\\routing\\\\image\\\\animal\\\\animal3\\\\" + num +".jpg"));
    55. //指定图片的位置
    56. JLabel.setBounds(105 * i,105 * j,105,105);
    57. //把管理容器添加到界面中
    58. this.getContentPane().add(JLabel);
    59. }
    60. }
    61. //------------------------------------------------------
    62. }
    63. private void initJMenuBar() {
    64. //初始化菜单
    65. //创建整个的菜单对象
    66. JMenuBar jMenuBar = new JMenuBar();
    67. //创建菜单上面的两个选项的对象 (功能 关于我们)
    68. JMenu fuctionJMenu = new JMenu("功能");
    69. JMenu aboutJMenu = new JMenu("关于我们");
    70. //创建选项下面的条目对象
    71. JMenuItem replayItem = new JMenuItem("重新游戏");
    72. JMenuItem reloginItem = new JMenuItem("重新登录");
    73. JMenuItem closeItem = new JMenuItem("关闭游戏");
    74. JMenuItem accountItem = new JMenuItem("公众号");
    75. //将每一个选项下的条目添加到对应的选项中
    76. fuctionJMenu.add(replayItem);
    77. fuctionJMenu.add(reloginItem);
    78. fuctionJMenu.add(closeItem);
    79. aboutJMenu.add(accountItem);
    80. //将菜单里面的两个选项添加到菜单中
    81. jMenuBar.add(fuctionJMenu);
    82. jMenuBar.add(aboutJMenu);
    83. //给整个界面设置菜单
    84. this.setJMenuBar(jMenuBar);
    85. }
    86. private void initJFrame() {
    87. //设置界面的宽高
    88. this.setSize(603,680);//单位是像素
    89. //设置界面的标题
    90. this.setTitle("拼图单机版 v1.0");
    91. //设置界面置顶
    92. this.setAlwaysOnTop(true);
    93. //设置界面居中
    94. this.setLocationRelativeTo(null);
    95. //设置关闭模式
    96. this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    97. //取消默认的居中位置,只有取消了才会按照XY轴的形式添加组件
    98. this.setLayout(null);
    99. }
    100. }

    App 测试

    1. import ui.GameJFrame;
    2. import ui.RegisterJFrame;
    3. import ui.loginJFrame;
    4. public class App {
    5. public static void main(String[] args) {
    6. //表示程序的启动入口
    7. //如果我们想要开启一个界面,就创建谁的对象就好了
    8. new GameJFrame();
    9. // new RegisterJFrame();
    10. // new loginJFrame();
    11. }
    12. }

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

  • 相关阅读:
    Promise以及Promise.all的简单用法
    再谈Java中的类与对象
    聚类-kmeans
    【华为机试真题 Python】按身高和体重排队
    十分钟了解MES系统的发展历程和标准体系
    C语言练习百题之位符号|的使用
    Web 智能代码编辑器 WeBuilder 2022
    k8s-7部署kube-state-metrics监控组件
    【Linux网络】UdpSocket
    node.js+npm安装(win11适用)
  • 原文地址:https://blog.csdn.net/SENMINGya/article/details/136412067