当前位置: 首页 > news >正文

拼图游戏02

文章目录

    • 概要
    • 整体架构流程
    • 代码过程
    • 小结

概要

现在需要将图片添加界面中

关键点在于它如何动态地根据游戏状态更新用户界面。它使用了Swing的布局管理器来定位组件,并且通过ImageIcon和JLabel来显示图像。注意,路径字符串中的反斜杠在Java中是转义字符,因此在字符串中使用双反斜杠或者使用正斜杠可以避免潜在的错误。

整体架构流程

1

  1. initImage方法首先通过调this.getContentPane().removeAll();清空了当前内容面板上的所有组件。这样做是为了重新绘制界面,确保每次调用时都是全新的状态。

  2. 接下来,代码检查是否满足胜利条件,这是通过调用victory()方法实现的。如果游戏胜利,就创建一个新的JLabel,并使用ImageIcon加载胜利图片"image\victory.png"。然后设置这个标签的位置和大小,并将其添加到内容面板上。

  3. 创建一个显示步数的标签stepCount,格式为"步数: "加上变量step的值。同样地,设置位置和大小后,将其添加到内容面板。

  4. 接下来是一个嵌套循环,用于在界面上放置16个图像块。每个图像块的位置由i和j的值决定,这些值对应于二维数组data中的索引。根据data[i][j]的值,加载相应的.gif文件作为图像,并创建一个新的JLabel来显示它。每个图像块的位置通过计算setBounds方法的参数来确定。

  5. 创建一个背景标签background,并使用ImageIcon加载背景图片"image\background.png"。设置其位置和大小后,将其添加到内容面板。

  6. 最后,调用this.getContentPane().repaint();来刷新界面,确保所有的更改都能显示出来。

2
检查一个名为data的二维数组是否与另一个名为win的二维数组完全相同,以确定是否达到胜利条件。函数通过两个嵌套的循环遍历data数组的每个元素,与对应位置的win数组元素进行比较,如果找到任何不相等的元素,则立即返回false表示未达到胜利条件。如果所有元素都相等,循环结束后返回true,表示胜利条件已满足。

代码过程

//清空原本已经出现的所有图片
//如果游戏胜利,显示胜利图片
//显示步数
//循环遍历数组,为每个元素创建对应的图片标签并添加到界面

private void initImage(){this.getContentPane().removeAll();if(victory()){JLable winJLabel =  new JLabel(new ImageIcon("图片地址"));winJLabel.setBounds(203,283,197,73);this.getContentPane().add(winJLabel);}JLabel stepCount = new JLabel("步数:"+step);stepCount.setBounds(30,20,100,20);this.getContentPane().add(stepCount);for(int i = 0 ; i < 4 ; i++){for(int j = 0 ; j < 4 ; j++){int num = data[i][j];JLabel jLabel = new JLabel(new ImageIcon(path+num +".gif"));//path,这是我的定量地址,我在成员变量的时候定义了JLabel.setBorder(new BevelBorder(1));this.getContentPane().add(jLabel);}}
}

//遍历data数组的每一行
//遍历data数组的每一列
//比较data和win在当前位置的元素是否相等,如果不相等,返回false
//如果都相等,返回true

public boolean victory(){for(int i = 0; i<data.length; i++){for(int j = 0 ; j< data[i].length; j++){if(data[i][j]!= win[i][j]){return false;}}}return true;
}

小结

在这里插入图片描述

输出:已更新游戏状态,包括胜利条件。

向界面中添加了图像。

http://www.lryc.cn/news/430100.html

相关文章:

  • 在本地进行Django支付宝扫码支付-当面付开发
  • redis-RedisTemplate.opsForGeo 的geo地理位置相关的方法演示
  • 做短视频矩阵要十几人团队吗?云微客助阵,一人即可
  • 常用语音识别开源工具的对比与实践
  • Fortify代码安全测试工具在静态应用安全测试(SAST)方面针对典型问题的改进
  • AWS 消息队列服务 SQS
  • 【iOS】——响应者链和事件传递链
  • mysql查询慢
  • 【Java-==与equals】
  • ai回答 部署前端项目时需要使用ssh吗
  • 结合ChatGPT与Discord,提高团队合作效率
  • VisualStudio|开发环境相关技巧及问题
  • Redis远程字典服务器(11)—— redis客户端介绍
  • 【mysql】mysql之DDL数据定义语言
  • Word文件密码忘记,该如何才能编辑Word文件呢?
  • 解锁移动办公新境界,七款顶尖移动终端管控软件分享!助您轻松掌控每一台移动设备,企业必备!
  • 基于微信小程序的大用户心理咨询系统设计与实现---附源码99040
  • Bigtop 从0开始(上)
  • 算法基础及例题
  • 机器学习-KNN 算法
  • 【Linux】如何快速查看 linux 服务器有几个cpu
  • [数据集][目标检测]电力场景轭式悬架锈蚀分类数据集6351张2类别
  • 【嵌入式linux开发】智能家居入门5:老版ONENET,多协议接入(QT、微信小程序、HTTP协议、ONENET云平台、旭日x3派)
  • 软考-软件设计师(程序设计语言习题)
  • 「C++系列」vector 容器
  • 梯度的概念
  • 低代码开发:机遇与挑战并存的技术革新
  • Linux之RabbitMQ集群部署
  • 【JAVA CORE_API】Day19 多线程API(2)、多线程并发安全问题、同步
  • 最新Windows 11 23H2精简版,免费获取!稳定流畅!