打乱图片

  • 一、前言
  • 二、思路
  • 三、改写GameJFrame类
    • 1.注意事项
    • 2.完整代码
  • 四、测试代码
  • 五、结语

一、前言

在上一篇文章中讲述了如何添加图片,本文将实现将十六个格子中的小图片打乱的效果,并且会提到有关于二维数组的知识点

二、思路

在上文就提到了,这个看起来完整的大图片,实际上是十六张小图片按照一定顺序放在4×4的格子当中的,那么我们不妨 用一个二维数组来表示每一个格子每个格子内再放入不同的图片;由于要求打乱图片,所以二维数组内的图片序号随机,具体的思路如下

  • 定义一个一维数组 tempArr,存放0-15(图片编号)
int[] tempArr = {0,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
  • 定义一个随机数,用来表示索引值(范围是0-15)
Random r = new Random();
  • 遍历数组,让每个数都与随机索引所对应的数值交换
for (int i = 0; i < tempArr.length; i++) {//随机生成索引值int index = r.nextInt(tempArr.length);//交换int temp = tempArr[i];tempArr[i] = tempArr[index];tempArr[index] = temp;}
  • 创建一个二维数组data[i][j]来表示4×4的方格
int[][] data = new int[4][4];
  • 定义一个索引,用来提取一维数组内的值
int tempIndex = 0;
  • 遍历二维数组,为二维数组依次赋值为一维数组内的值
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类

1.注意事项

  • 此处要注意,由于二维数组在打乱图片加载图片中都会用到,所以我们把初始化二维数组的代码写在成员位置上
  • 打乱图片界面要放在初始化界面前面,否则无法实现打乱效果
  • 要用一个数去接收二维数组中的每个数(图片编号)
  • 重新定义一个方法来实现打乱图片的效果

2.完整代码

 private void initdata() {//初始化一维数组int[] tempArr = {0,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};//定义一个随机变量(索引)Random r = new Random();//遍历数组,将每个数与随机索引对应数值交换for (int i = 0; i < tempArr.length; i++) {int index = r.nextInt(tempArr.length);int temp = tempArr[i];tempArr[i] = tempArr[index];tempArr[index] = temp;}//定义索引,用来提取一维数组中的数int tempIndex = 0;//遍历二维数组,填入数值for (int i = 0; i < data.length; i++) {//将每一行看作是一个一维数组,遍历一次for (int j = 0; j < data[i].length; j++) {data[i][j] = tempArr[tempIndex];//遍历完成后提取一维数组中下一个值tempIndex++;}}}private void initImage() {for(int i = 0; i < 4; i++){for(int j = 0; j < 4; j++){int number = data[i][j];JLabel jLabel = new JLabel(new ImageIcon("F:\\IDEA\\PuzzleGame\\image\\image\\animal\\animal3\\"+ number +".jpg"));jLabel.setBounds(105 * j, 105 * i,105,105);this.getContentPane().add(jLabel);}}}

四、测试代码


五、结语

本文中的二维数组实现方法还有另外一种,感兴趣的读者可以自己思考一下,具体的方法会在下一篇文章的文末写出来以供参考

Java实现拼图小游戏(4)—— 打乱图片(含二维数组知识点)相关推荐

  1. java对拼图小游戏的简单实现(详解)

    使用Java编写拼图小游戏主要包括: 初始化界面 初始化菜单 初始化数据 初始化图片 其他必要功能的实现 这几部分.在进行细分时包括了菜单的搭建,添加图片,打乱图片位置,让图片移动起来,查看完整图片, ...

  2. Java实现拼图小游戏(5)—— 美化界面(含源码阅读)

    美化界面 一.前言 二.添加背景图 1.注意事项 2.创建图片对象 3.创建JLabel的对象(一个用来放图片的容器) 4.调整位置 5.将容器放到界面中 6.优化代码 三.添加边框 1.查看源码 2 ...

  3. Java实现拼图小游戏(2)——菜单搭建(有关Java中的JMenuBar知识点)

    菜单搭建 一.前言 二.搭建步骤 1. 创建JMenuBar 2. 创建Jmenu 3. 创建JMenuItem 4. 将JMenuItem放到Jmenu中 5. 将Jmenu放到JMeanuBar中 ...

  4. php打乱数组顺序(含二维数组)

    php打乱数组顺序(含二维数组) 最近在做一个考试小程序的Api接口,其中一个是需要将试题列表打乱顺序,都知道,从数据库搜索出来的列表通常为数组的形式,所以我面临的问题就变成了 如何打乱数组顺序. 随 ...

  5. Java实现拼图小游戏(6)—— 移动图片(键盘监听实操练习)

    移动图片 一.前言 二.步骤 1.让我们的类继承KeyListener接口 2.改写initData方法 3.实现向上移动 4.实现向下移动 5.实现向左移动 6.实现向右移动 7.改写initIma ...

  6. Java实现拼图小游戏(7)—— 计步功能及菜单业务的实现

    计步功能 一.前言 二.计步功能 1.步骤 1️⃣初始化步数 2️⃣定义JLable并设置宽高 3️⃣将JLable界面放到主界面中 4️⃣重写方法中添加计步功能 2.测试代码 三.菜单业务实现 1. ...

  7. Java实现拼图小游戏(7)—— 作弊码和判断胜利

    作弊码和判断胜利 一.前言 二.作弊码 1.功能 2.步骤 1️⃣设置作弊码 2️⃣判断 3️⃣设置成功的图片顺序 4️⃣加载图片 3.完整代码 三.判断胜利 1.功能 2.步骤 1️⃣定义正确数组 ...

  8. Java基础:拼图小游戏(包含Java代码)

    涉及到的知识: 1.图形用户接口GUI(Graphical User Interface)用图形化的方式显示操作界面 两个体系: AWT包和Swing包 2.界面会用到JFrame类 3.界面中的菜单 ...

  9. java实现拼图小游戏(包括打包exe)

    事先说明这是在B站上学习java基础知识的时候,写的小游戏,该游戏在B站上的视频上只实现了拼图游戏的主界面,本人在这基础上实现的功能有: 1.登录界面实现: 在原来B站视频的基础上实现了: 验证码功能 ...

最新文章

  1. numpy使用[]语法索引二维numpy数组中指定指定列之后所有数据列的数值内容(accessing columns in numpy array after specifc column)
  2. 我删了这些训练数据…模型反而表现更好了!?
  3. MIT一招霸气颠覆传统:勇敢换导师,成本我买单,学生沸腾了
  4. android spinner 简书,【Android】Spinner:下拉列表笔记
  5. 昼猫笔记 JavaScript -- 异步执行 | 定时器真的定时执行?
  6. java 序列化概念和作用_结合代码详细解读Java序列化与反序列化概念理解
  7. 黑苹果系统坏了如何恢复_黑苹果怎么修复Clover GUI启动选项 黑苹果怎么自定义Clover GUI启动选项...
  8. JDK14中的java tools简介
  9. 最简单的nginx教程 - 如何把一个web应用部署到nginx上
  10. Selenium基础篇之5-第一个完整的自动化测试脚本
  11. 解决Element的 InfiniteScroll 无限滚动组件报错
  12. HP刀片带外管理系统OA各功能实例示范
  13. 如何在Mac上裁剪图片,教你几个技巧
  14. 今日头条 2018 AI Camp 视频面试
  15. 深大uooc学术道德与学术规范教育第六章
  16. 域名注册条件有哪些?需要提交哪些材料?
  17. Windows操作系统文件夹
  18. python修改csv某一列 读取csv移动文件
  19. PReLU与ReLU
  20. Java SE 高级教程

热门文章

  1. 解决浏览器记住密码输入框的问题
  2. Word 2007关闭时出现“已停止工作”的解决方法
  3. 浅谈用户密码保护与相关技术
  4. 用c语言写的新年搞笑祝福程序,新年微信红包搞笑句子_2020新年幽默微信红包祝福语...
  5. MacDown 学习使用
  6. moco工具第一个Demo入门
  7. 把你的名字写在煙上,吸进肺里 留在离我心脏最近的地方
  8. FreeNAS详细安装及配置操作教程(亲测)
  9. cocoscreator游戏开发实战——动物餐厅——菜单代码编写(1)
  10. nn.Conv2d中的dilation