拼图游戏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.mfbz.cn/a/871825.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

选择排序(直接选择排序和堆排序)

一、直接选择排序 1.基本思想 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完。 2.动图展示 3.思路讲解 ①在元素集合array[i]—array[n-1]中选择关键码最大&…

以简单的例子从头开始建spring boot web多模块项目(一)

目的&#xff1a;从头梳理&#xff0c;如何手工从头建立多模块项目。 步骤&#xff1a; 1、建立maven项目,类型&#xff1a;maven Archetype&#xff0c;Name:ParentDemo 选择JDK版本&#xff0c;Archetype&#xff1a;org.apache.maven.archetypes:maven-archetype-quickstart…

网络UDP报文详细解析

目录 一、简介二、详细介绍三、其他相关链接1、TCP报文段的详细图总结2、TCP三次握手和四次挥手详解3、socket通信原理及相关函数详细总结4、网络包IP首部详细解析 一、简介 本文主要介绍UDP报文格式。 二、详细介绍 UDP是一种无连接、不可靠的用户数据报协议&#xff0c;其…

《图解设计模式》笔记(四)分开考虑

九、Bridge模式&#xff1a;将类的功能层次结构与实现层次结构分离 类的两个层次结构和作用 类的功能层次结构&#xff1a;希望增加新功能时 父类有基本功能&#xff0c;在子类中增加新功能 Something父类 …├─SomethingGood子类 想要再增加新功能 Something父类 …├─So…

Windows All download

前言 微软家族产品下载HEU_KMS_Activator download Windows PC desktop download 微软官网all 地址&#xff0c;地址1国内镜像地址&#xff0c;地址1 Windows 常规使用&#xff0c;运维&#xff0c;部署csdn 专栏 &#xff0c;付费专栏 参考 版本微软官网Windows 7,8,10,…

hyperf 协程作用和相关的方法

什么是协程 协程是一种轻量级的线程&#xff0c;由用户代码来调度和管理&#xff0c;而不是由操作系统内核来进行调度&#xff0c;也就是在用户态进行 判断当前是否处于协程环境内 在一些情况下我们希望判断一些当前是否运行于协程环境内&#xff0c; 对于一些兼容协程环境与…

使用html-docx-js + fileSaver实现前端导出word

因为html-docx-js是16年的老库了&#xff0c;它代码里面用到的with语法现在严格模式不允许&#xff0c;用npm直接引入会报错&#xff0c;所以我们需要用其它方式引入 首先要将html-docx-js的代码放到项目中 html-docx-js/dist/html-docx.js at master evidenceprime/html-do…

modbus协议与RS-485协议的区别

在工业自动化领域&#xff0c;Modbus协议和RS-485通信协议都是常见且重要的技术标准。Modbus协议是一种通信协议&#xff0c;而RS-485则是一种物理层通信标准。 1.Modbus协议 Modbus协议是一种串行通信协议&#xff0c;最初由Modicon&#xff08;现为施耐德电气公司&#xff0…

智能猫砂盆真的能代替双手铲屎吗?热门前三的智能猫砂盆推荐!

养猫的上班族最大的烦恼应该就是无法时刻为猫咪铲屎了吧&#xff0c;猫砂盆中的便便残留过久会发散臭味&#xff0c;甚至可能滋生细菌&#xff0c;招惹小飞虫&#xff0c;对家庭环境造成困扰&#xff0c;但是上班或出差又无法待在家中&#xff0c;时刻为猫咪待命&#xff0c;以…

Java二十三种设计模式-解释器模式(23/23)

本文深入探讨了解释器模式&#xff0c;这是一种行为设计模式&#xff0c;用于构建和解释执行自定义语言&#xff0c;提供了实现方法、优点、缺点、与其他模式的比较、最佳实践和替代方案的全面分析&#xff0c;帮助开发者在实际应用中做出明智的设计选择。 解释器模式&#xff…

【css】伪元素实现图片个悬停文字聚焦效果

实现重点&#xff1a; 文字覆盖在图片上&#xff1a; 通过使用 position: absolute 将 .box 文字盒子定位在图片上方。父容器 .img-wrap 使用了 position: relative 确保子元素的绝对定位在父容器的边界内生效。 创建悬停效果&#xff1a; 通过使用 &::before 和 &::…

探索Unity3D URP后处理在UI控件Image上的应用

探索Unity3D URP后处理在UI控件Image上的应用 前言初识URP配置后处理效果将后处理应用于UI控件方法一&#xff1a;自定义Shader方法二&#xff1a;RenderTexture的使用 实践操作步骤一&#xff1a;创建RenderTexture步骤二&#xff1a;UI渲染至RenderTexture步骤三&#xff1a;…

普元EOS-基于CriteriaEntity进行数据查询

1 前言 普元EOS内置了一系列数据库的操作类&#xff0c;本文介绍其中的一个类 CriteriaEntity的使用方法。 CriteriaEntity是进行组织数据库查询条件的类&#xff0c;基于该类配合DataObject&#xff0c;实现对数据库的查询。 2 CriteriaType类的实例化 要利用Criteria进行查…

七个电脑数据恢复方法:教你如何恢复电脑上误删除的文件

电脑已成为我们日常生活和工作中不可或缺的一部分&#xff0c;存储着无数珍贵的照片、文档、视频以及各类重要数据。今天来和大家分享一个我们都可能遇到的问题&#xff1a;如何恢复电脑上误删除的文件&#xff1f;随着日常操作的频繁&#xff0c;误删除文件的情况时有发生。 …

vue3【组件封装】日历 (默认标注今日,可选择日期,可标注日期,可切换月份,样式仿 Win11)

效果预览 技术要点 获取每个月最后一天 下个月的第0天,自动会被解析为本月的最后一天 let lastDay = computed(() => new Date(year.value, month.value, 0).getDate());flex 布局末行左对齐 最靠谱的方式是想办法将末行缺失元素填满 本范例中,因星期固定7列,按每月最…

在控件graphicsView中实现绘图功能(二)

目录 前言&#xff1a;基础夯实&#xff1a;1.创建 QGraphicsScene 和 QGraphicsView2. 在 QGraphicsScene 中添加椭圆3. 渲染和显示4. 推荐学习本文之前查看的链接&#xff1a; 效果展示&#xff1a;实现功能&#xff1a;遇到问题&#xff1a;核心代码&#xff1a;仓库源码&am…

OpenCV几何图像变换(6)计算反转仿射变换函数invertAffineTransform()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 反转一个仿射变换。 该函数计算由 23 矩阵 M 表示的逆仿射变换&#xff1a; [ a 11 a 12 b 1 a 21 a 22 b 2 ] \begin{bmatrix} a_{11} & a…

检测到目标URL存在http host头攻击漏洞

漏洞描述 修复措施 方法一&#xff1a; nginx 的 default_server 指令可以定义默认的 server 去处理一些没有匹配到 server_name 的请求&#xff0c;如果没有显式定义&#xff0c;则会选取第一个定义的 server 作为 default_server。 server { …

缓存实现方式

缓存是一个常见的话题&#xff0c;因为它对于提高应用程序性能至关重要。缓存是一种存储数据的临时地方&#xff0c;以便快速访问数据&#xff0c;减少对原始数据源&#xff08;如数据库或文件系统&#xff09;的访问次数&#xff0c;从而提高应用程序的响应速度和吞吐量。 Jav…

性能测试全解

世界上没有陌生人&#xff0c;只有还没认识的朋友 一&#xff0e;性能测试的意义 由于软件系统的性能问题而引起严重后果的事件比比皆是&#xff0c;下面列举几个案例 (1)2007年10月&#xff0c;北京奥组委实行2008年奥运会门票预售&#xff0c;一时间订票官网访问量激致系统…