JavaFX 实战:从零打造一个功能丰富的英文“刽子手”(Hangman)游戏
大家好!今天我们要挑战一个经典的单词猜谜游戏——“刽子手”(Hangman),并使用 JavaFX 这个强大的 GUI 工具包来赋予它现代化的交互体验。这个项目不仅有趣,而且是学习和实践 JavaFX 核心概念的绝佳途径,涵盖了布局管理、自定义绘制、事件处理、状态管理等多个方面。
我们将构建的这个版本不仅仅是基础功能,还包含了:
- 单词分类选择: 增加游戏的可玩性和重玩价值。
- 图形化绞刑架: 使用
Canvas
动态绘制小人被“吊起”的过程,提供直观的视觉反馈。 - 屏幕虚拟键盘: 提供界面内交互,更适合触屏或纯鼠标操作。
- 清晰的状态反馈: 实时显示猜测进度、错误次数、猜错的字母等。
无论你是想系统学习 JavaFX,还是寻找一个有一定复杂度的练手项目,这篇文章都将为你提供详细的实现步骤和深入的技术解析。
一、 设计蓝图:游戏规则与界面构思
在动手编码前,清晰的设计是成功的关键。
游戏规则核心:
- 选词: 程序从预设的单词库(按分类)中随机选择一个秘密单词。
- 显示: 单词以隐藏形式(如下划线
_
)展示给玩家,非字母字符(如空格、连字符)直接显示。 - 猜测: 玩家通过点击虚拟键盘上的字母进行猜测。
- 反馈:
- 猜对: 单词中所有对应的下划线被替换为正确的字母。
- 猜错: 错误次数增加,并在画布上绘制“小人”的一部分。猜错的字母会被记录并显示。
- 胜负条件:
- 胜利: 在错误次数达到上限前,猜出所有字母。
- 失败: 错误次数达到上限(通常是6次,对应小人的6个部分),游戏结束,显示答案。
- 重玩: 提供“新游戏”功能。
界面布局规划 (BorderPane
):
- 顶部 (Top): 使用
VBox
放置单词分类选择ComboBox
和一个主要的Label
(statusLabel
) 用于显示游戏提示信息。 - 左侧 (Left): 使用
VBox
放置Canvas
(hangmanCanvas
) 用于绘制绞刑架和小人。 - 中部 (Center): 使用
VBox
放置核心信息:隐藏的单词 (wordLabel
)、错误次数统计 (errorsLabel
)、猜错的字母列表 (wrongGuessesLabel
) 以及“新游戏”按钮 (newGameButton
)。 - 底部 (Bottom): 使用
TilePane
(keyboardPane
) 自动排列 A-Z 的字母按钮,形成虚拟键盘。
二、 JavaFX 实现深度剖析
现在,让我们深入代码,逐一解析关键技术的实现。
1. 项目基础与状态管理
我们创建 HangmanGameFX_EN
类继承自 Application
。核心的游戏状态由以下成员变量维护:
private Map<String, List<String>> wordCategories = new HashMap<>(); // 单词库
private String currentCategory = "Animals"; // 当前分类
private String secretWord; // 秘密单词 (大写)
private StringBuilder displayedWord; // 显示给玩家的单词 (带下划线)
private int errors; // 当前错误次数
private Set<Character> guessedLetters; // 已猜字母集合 (高效去重)
private boolean gameOver; // 游戏结束标志
// ... UI 元素引用 ...
private Map<Character, Button> keyboardButtons = new HashMap<>(); // 键盘按钮引用
wordCategories
: 使用Map
存储分类和对应的List<String>
,结构清晰。displayedWord
: 使用StringBuilder
而非String
,因为需要频繁修改其中的字符(替换下划线),StringBuilder
性能更好。guessedLetters
: 使用Set<Character>
存储已猜字母,利用Set
的特性可以快速判断一个字母是否已被猜过(contains
操作效率高)。keyboardButtons
: 使用Map<Character, Button>
存储虚拟键盘上每个字母按钮的引用,键是字母本身,值是对应的Button
对象。这使得我们可以通过字母快速找到并禁用对应的按钮。
2. 构建动态用户界面
UI 的构建被拆分到各个 create...Pane()
方法中。
- 分类选择 (
createTopPane
):ComboBox<String>
控件绑定wordCategories
的键集。通过setOnAction
监听选择变化,一旦改变,就更新currentCategory
并调用initializeGame()
开始基于新分类的游戏。 - 单词显示 (
createCenterPane
):wordLabel
使用等宽字体 (Monospaced
),确保每个下划线_
占用的宽度一致,视觉效果更好。 - 虚拟键盘 (
createKeyboardPane
):- 使用
TilePane
是个巧妙的选择。它会自动将子节点(按钮)排列成网格状,只需设置setPrefColumns
(期望的列数)和间距 (setHgap
,setVgap
),布局非常方便。 - 循环创建 A-Z 按钮,为每个按钮设置
setOnAction
,调用handleGuess(letter)
并传入对应的字母。同时,将按钮存入keyboardButtons
Map。
- 使用
3. Canvas 绘图:动态的绞刑架
这是游戏最具视觉特色的部分。
- 设置 (
createHangmanPane
): 创建Canvas
并获取其GraphicsContext
(gc
)。设置线条宽度和颜色。 - 绘制绞刑架 (
drawGallows
): 在游戏初始化时调用,使用gc.strokeLine()
绘制几条直线构成基本的绞刑架结构。坐标计算基于CANVAS_WIDTH
和CANVAS_HEIGHT
的比例,使得图形能适应画布大小。 - 绘制小人 (
drawHangmanPart
): 这个方法根据传入的errorCount
(1-6) 绘制小人的一个新部分(头、身体、四肢)。使用switch
语句,每个case
对应一个错误阶段,调用gc.strokeOval()
画头,gc.strokeLine()
画身体和四肢。坐标同样是相对计算的。 - 清空画布 (
clearCanvas
): 在每次开始新游戏时,需要调用gc.clearRect()
清除上一次绘制的内容。
// 在 drawHangmanPart(int errorCount) 中
gc.setStroke(HANGMAN_COLOR); // 确保颜色正确
switch (errorCount) {case 1: // Headgc.strokeOval(headX - headRadius, headY - headRadius, headRadius * 2, headRadius * 2);break;case 2: // Bodygc.strokeLine(headX, bodyStartY, headX, bodyEndY);break;// ... case 3, 4, 5, 6 for arms and legs ...
}
4. 核心游戏逻辑:处理猜测 (handleGuess
)
这是响应玩家点击键盘按钮的核心方法,逻辑严谨性至关重要:
private void handleGuess(char letter) {// 1. 状态检查: 游戏是否结束?字母是否已猜过?if (gameOver) return;letter = Character.toUpperCase(letter); // 统一转大写if (guessedLetters.contains(letter)) {// ... (提示已猜过) ...return;}// 2. 更新状态: 添加到已猜集合,禁用对应按钮guessedLetters.add(letter);keyboardButtons.get(letter).setDisable(true);// 3. 检查猜测是否正确boolean found = false;for (int i = 0; i < secretWord.length(); i++) {if (secretWord.charAt(i) == letter) {// 关键:更新 displayedWord 中对应位置的下划线int displayIndex = i * 2; // 乘以2是因为每个字符后有空格if (displayIndex < displayedWord.length()) {displayedWord.setCharAt(displayIndex, letter);}found = true;}}// 4. 更新单词显示 UIwordLabel.setText(displayedWord.toString());// 5. 根据猜测结果更新状态和反馈if (found) {// ... (提示猜对,更新状态标签颜色) ...if (checkWin()) endGame(true); // 检查是否胜利} else {errors++;// ... (更新错误标签,绘制小人部分,更新猜错字母列表,提示猜错) ...if (checkLoss()) endGame(false); // 检查是否失败}
}
关键点解析:
- 状态优先检查: 首先判断游戏是否结束以及字母是否已猜,避免无效操作。
- 状态更新原子性: 将字母加入
guessedLetters
和禁用按钮紧密关联。 displayedWord
更新: 遍历secretWord
,找到匹配字母后,计算其在displayedWord
中的正确索引(考虑到空格,是i * 2
)并替换下划线。这是保证单词正确显示的核心。- 分支处理: 清晰地分为
found
(猜对) 和else
(猜错) 两个分支,分别处理 UI 反馈、状态更新(errors++
)和胜负检查。
5. 胜负判断与游戏结束
checkWin()
: 实现非常简洁,只要displayedWord
中不再包含_
,就意味着所有字母都已猜出,玩家获胜。checkLoss()
: 同样简单,只要errors
达到MAX_ERRORS
,玩家失败。endGame(boolean won)
: 负责游戏结束时的收尾工作:设置gameOver
标志,禁用所有键盘按钮和分类选择,并根据won
参数显示最终的胜利或失败信息(失败时揭示答案)。
6. 游戏初始化与重置 (initializeGame
)
提供良好的“再来一局”体验很重要。initializeGame
方法做了所有必要的重置工作:
- 重置错误次数、已猜字母集合、
gameOver
标志。 - 调用
chooseNewWord()
获取新单词。 - 重新生成带下划线的
displayedWord
。 - 重置所有 UI 元素到初始状态(标签文本、画布、键盘按钮可用性)。
三、 总结与展望
通过这个 Hangman 项目,我们不仅实现了一个经典游戏,更重要的是,我们深入实践了 JavaFX 的许多核心功能:
- 布局系统:
BorderPane
,VBox
,HBox
,TilePane
的组合使用。 - 控件交互:
Button
,Label
,ComboBox
的事件处理和状态更新。 - 自定义绘图: 利用
Canvas
和GraphicsContext
实现动态图形绘制。 - 状态管理: 通过成员变量和枚举(虽然此版本未使用枚举,但概念相通)清晰地管理游戏进程。
- 数据结构应用:
Map
用于单词库和按钮引用,Set
用于高效存储已猜字母,StringBuilder
用于高效构建显示单词。
这个项目也为进一步探索留下了空间:
- 美化与主题: 应用 CSS 打造更个性化的外观。
- 动画效果: 为小人绘制、字母显示等添加过渡动画。
- 音效反馈: 增加点击、猜对、猜错、游戏结束的音效。
- 单词库管理: 从文件加载单词,甚至允许用户添加自定义单词或分类。
- 更智能的提示: 例如提供一个“提示”按钮,随机显示一个未猜中的字母(并计为一次错误)。
希望这篇详细的开发日志能帮助你理解使用 JavaFX 构建交互式应用的具体过程,并激发你动手尝试和创造的热情。Happy coding!
附注: 上述代码片段是说明性的,完整的可运行代码文前资源文件中的java完整示例。确保你的开发环境已正确配置 JavaFX。
相关文章:
JavaFX 实战:从零打造一个功能丰富的英文“刽子手”(Hangman)游戏
大家好!今天我们要挑战一个经典的单词猜谜游戏——“刽子手”(Hangman),并使用 JavaFX 这个强大的 GUI 工具包来赋予它现代化的交互体验。这个项目不仅有趣,而且是学习和实践 JavaFX 核心概念的绝佳途径,涵…...
第 2.1 节: 机器人仿真环境选择与配置 (Gazebo, MuJoCo, PyBullet)
在真实机器人硬件上进行开发和测试既耗时又存在风险(硬件损坏、安全问题)。机器人仿真环境提供了一个虚拟的沙盒,让开发者能够在计算机中模拟机器人的物理行为、传感器读数和环境互动,极大地加速了开发、测试和调试过程。特别是对…...
网络开发基础(游戏)之 粘包分包
粘(nin)包、分包 在网络通信中,TCP协议是面向流的协议,没有消息边界概念,粘包和分包是常见的问题。在某种情况下(例如网络环境不稳定)就会导致"粘包"和"分包"问题…...
联邦元学习实现个性化物联网的框架
随着数据安全和隐私保护相关法律法规的出台,需要直接在中央服务器上收集和处理数据的集中式解决方案,对于个性化物联网而言,训练各种特定领域场景的人工智能模型已变得不切实际。基于此,中山大学,南洋理工大学…...
使用 Nacos 的注意事项与最佳实践
📹 背景 Nacos 凭借其强大💪的服务发现、配置管理和服务管理能力,成为构建分布式系统的得力助手。然而,要充分发挥 Nacos 的优势,实现系统的高性能、高可用,掌握其使用过程中的注意事项和最佳实践至关…...
在Pytorch中使用Tensorboard可视化训练过程
【在Pytorch中使用Tensorboard可视化训练过程】 https://www.bilibili.com/video/BV1Qf4y1C7kz/?share_sourcecopy_web&vd_sourcef00bfb41b3b450c3767070ed82f30ac8 主要功能: 1.保存网络结构图 2.保存训练集的损失Loss,验证集的正确性Accuracy以…...
15.电感特性在EMC设计中的运用
电感特性在EMC设计中的运用 1. 共模电感与差模电感的差异2. 电感的高频等效特性3. 电感在EMC设计中的使用注意事项3.1 LC滤波计算3.2 并联型多级浪涌防护的电感退耦 1. 共模电感…...
代理设计模式:从底层原理到源代码 详解
代理设计模式(Proxy Pattern)是一种结构型设计模式,它通过创建一个代理对象来控制对目标对象的访问。代理对象充当客户端和目标对象之间的中介,允许在不修改目标对象的情况下添加额外的功能(如权限控制、日志记录、延迟…...
25、简述.NET程序集(Assembly)
.NET 程序集(Assembly) .NET 程序集(Assembly) 是 .NET 应用程序的基本部署单元,包含以下核心内容: 类型与代码: 存储类、接口等类型的定义及实现(以中间语言 IL 形式)。…...
JavaScript 笔记 --- part 5 --- Web API (part 3)
(webAPI part3) BOM 操作 JS 执行机制 javascript 是单线程的, 也就是说, 只能同时执行一个任务。 为了解决这个问题, 利用多核 CPU 的计算能力, HTML5 提出 Web Worker API, 允许 JavaScript 脚本创建多个线程, 并将任务分配给这些线程。 于是, JS 出现了同步和异步的概念。…...
HCIP(OSPF)(3)
OSPF 报文结构 公共头部:包含版本(8bit)、类型(8bit)、报文长度(16bit)、路由器 ID(32bit)、区域 ID(32bit)、校验和(16bit࿰…...
Docker:重塑应用开发与部署的未来[特殊字符]
Docker:重塑应用开发与部署的未来🚀 在数字化转型的浪潮中🌊,应用开发与部署面临着诸多挑战,如环境一致性差、资源利用率低、运维复杂等。而Docker,作为容器技术领域的明星产品🌟,凭…...
逻辑回归:损失和正则化技术的深入研究
逻辑回归:损失和正则化技术的深入研究 引言 逻辑回归是一种广泛应用于分类问题的统计模型,尤其在机器学习领域中占据着重要的地位。尽管其名称中包含"回归",但逻辑回归本质上是一种分类算法。它的核心思想是在线性回归的基础上添…...
如何改电脑网络ip地址完整教程
更改电脑的网络IP地址以满足特定的网络需求,本文将为您提供一份详细的步骤指南。其实,改变IP地址并不是一件复杂的事,能解决因为IP限制带来的麻烦。以下是操作指南: 方法一:Windows 系统,通过图形界面修改 …...
Scenario Dreamer:用于生成驾驶模拟环境的矢量化潜扩散模型
25年3月来自加拿大 Mila AI研究院、蒙特利尔大学、蒙特利尔理工、普林斯顿、加拿大 CIFAR AI Chair 计划和 Torc 机器人公司的论文“Scenario Dreamer: Vectorized Latent Diffusion for Generating Driving Simulation Environments”。 Scenario Dreamer,是一个完…...
# 基于PyTorch的食品图像分类系统:从训练到部署全流程指南
基于PyTorch的食品图像分类系统:从训练到部署全流程指南 本文将详细介绍如何使用PyTorch框架构建一个完整的食品图像分类系统,涵盖数据预处理、模型构建、训练优化以及模型保存与加载的全过程。 1. 系统概述 本系统实现了一个基于卷积神经网络(CNN)的…...
【MCP Node.js SDK 全栈进阶指南】初级篇(1):MCP开发环境搭建详解
引言 Model Context Protocol (MCP) 是一种开放标准,旨在规范模型与应用程序之间的交互方式。本文作为MCP TypeScript-SDK系列的第一篇,将详细介绍如何搭建MCP开发环境,包括Node.js与TypeScript环境配置、SDK安装、开发工具推荐以及项目结构设计,帮助你快速入门MCP应用开发…...
unity脚本-FBX自动化模型面数校验
根据目前模型资源平均面数预算进行脚本制作,自动化校验模型面数是否符合规范。 *注:文件格式为.cs。需要放置在unity资源文件夹Assets>Editor下。 测试效果(拖一个fbx文件进unity时自动检测): 以下为完整代码 us…...
压力容器的优化设计
1 优化设计概述 优化设计是一种寻找确定最优设计方案的技术。所谓“最优设计”,指的是一种方案可以满足所有的设计要求,而且所需的支出(如重量,面积,体积,应力,费用等)最小。也就是…...
在Windows上安装Git
一、安装 Git 下载 Git地址:Git - Downloads (git-scm.com) 1、在页面中找到适用于 Windows 系统的最新版本安装包(通常为.exe 格式文件),点击下载链接。 出于访问Git官网需要科学上网,不会的可以私信我要软件包&…...
python包管理器,conda和uv 的区别
python包管理器,conda和uv 的区别 以下是 conda 和 uv 在 Python 包管理中的深度对比,结合知识库内容进行分析: 1. 核心设计理念 conda 以“环境为中心”,强调跨语言支持(如 Python、R、Julia)和严格的依赖…...
Oracle在ERP市场击败SAP
2024年,甲骨文(Oracle)以87亿美元的ERP收入和6.63%的市场份额,首次超越SAP,成为全球最大的ERP应用软件供应商,结束了SAP自上世纪80年代以来在该领域的长期霸主地位。据APPS RUN THE WORLD的市场调研&#x…...
Kafka 消息积压监控和报警配置的详细步骤
Kafka 消息积压监控和报警配置的详细步骤示例,涵盖常用工具(如 Prometheus Grafana、云服务监控)和自定义脚本方法: 一、监控配置 方法1:使用 Prometheus Grafana kafka-exporter 步骤1:部署 kafka-ex…...
记录一次使用面向对象的C语言封装步进电机驱动
简介 (2025/4/21) 本库对目前仅针对TB6600驱动下的42步进电机的基础功能进行了一定的封装, 也是我初次尝试以面向对象的思想去编写嵌入式代码, 和直流电机的驱动步骤相似在调用stepmotor_attach()函数和stepmotor_init()函数之后仅通过结构体数组stepm然后指定枚举变量中的id即…...
QTextDocument 入门
一、QTextDocument QTextDocument 是 Qt 中用于处理富文本文档的核心类,支持文本格式、图片、表格等复杂内容。 1. QTextDocument 入门 1.1 基本概念 QTextDocument 是 Qt 中用于处理富文本内容的核心类,它提供了: 结构化文本存储(段落、列表、表格等) 文本格式支持(…...
Arthas进阶用法
目录 查看已加载的类反编译代码动态执行代码排查 HTTP 请求问题热更新代码获取 Spring Context 并操作查看 JVM 信息自定义命令Web Console重置与退出 查看已加载的类 sc 命令 :可以查找所有 JVM 已经加载到的类。如果搜索的是接口,还会搜索所有的实现类…...
三生原理与现有密码学的核心区别?
AI辅助创作: 三生原理与现有密码学的核心区别 一、哲学基础与设计逻辑 动态生成 vs 静态分析 三生原理以“阴阳动态平衡”为核心,通过参数化生成(如素数构造中的阴阳元联动公式)模拟系统演化过程,而现有密码…...
定义python中的函数和类
1.函数 在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回 1.1 定义函数 def showshow(sex):if sex1:return manelse:retu…...
明远智睿2351开发板四核1.4G Linux处理器:驱动创新的引擎
在科技日新月异的今天,创新成为了推动社会进步的核心动力。而在这场创新的浪潮中,一款性能卓越、功能全面的处理器无疑是不可或缺的引擎。今天,我们介绍的这款四核1.4G处理器搭配Linux系统的组合,正是这样一款能够驱动未来创新的强…...
【前端】【业务逻辑】【面试】JSONP处理跨域原理与封装
🧠 一、JSONP 是什么? 项目内容📌 全称JSON with Padding📍 用途跨域请求数据的一种方式,绕过同源策略📦 本质通过 <script> 标签加载远程 JS 文件,这个文件执行一个回调函数并传入数据 …...
深入探索RAG:用LlamaIndex为大语言模型扩展知识,实现智能检索增强生成
大型语言模型(LLM),如ChatGPT和Llama,在回答问题方面表现出色,但它们的知识仅限于训练时所获取的信息。它们无法访问私有数据,也无法在训练截止日期之后学习新知识。那么,核心问题就是……我们如…...
移远通信智能模组助力东成“无边界智能割草机器人“闪耀欧美市场
2025年4月21日,移远通信宣布,旗下SC206E-EM智能模组已成功应用于江苏东成电动工具有限公司旗下的DCK TERRAINA无边界智能割草机器人。 这款智能模组高度集成计算、通信、定位等多元能力,以小型化、低功耗、实时性强和低成本等综合优势&#…...
测试-时间规模化定律可以改进世界基础模型吗?
25年3月来自 UT Austin、UW Madison 和 Nvidia 的论文“Can Test-Time Scaling Improve World Foundation Model?”。 世界基础模型(WFM)通过根据当前的观察和输入预测未来状态来模拟物理世界,已成为许多物理智能(PI)…...
VMwaer虚拟机复制粘贴、ROS系统安装
一、VMwaer虚拟机复制粘贴设置:设置完记得重启VMwaer 1.首先确定 虚拟机设置-->选项-->客户机隔离-->勾选 启用拖放 启用复制粘贴 2.如果还是不能粘贴 可能是 没有 VMware Tools 可参考 怎么在linux安装vmware tools-CSDN博客 设置完记得重启VMwaer。…...
安装 vmtools
第2章 安装 vmtools 1.安装 vmtools 的准备工作 1)现在查看是否安装了 gcc 查看是否安装gcc 打开终端 输入 gcc - v 安装 gcc 链接:https://blog.csdn.net/qq_45316173/article/details/122018354?ops_request_misc&request_id&biz_id10…...
HCIP(综合实验2)
1.实验拓补图 2.实验要求 1.根据提供材料划分VLAN以及IP地址,PC1/PC2属于生产一部员工划分VLAN10,PC3属于生产二部划分VLAN20 2.HJ-1HJ-2交换机需要配置链路聚合以保证业务数据访问的高带宽需求 3.VLAN的放通遵循最小VLAN透传原则 4.配置MSTP生成树解决二层环路问题…...
机器学习第一篇 线性回归
数据集:公开的World Happiness Report | Kaggle中的happiness dataset2017. 目标:基于GDP值预测幸福指数。(单特征预测) 代码: 文件一:prepare_for_traning.py """用于科学计算的一个库…...
Spark-Streaming简介及核心编程
一、核心概念: 1.Spark-Streaming 是流式数据处理框架,基于 **DStream(离散化流)** 抽象,将实时数据划分为多个时间区间的 RDD 序列。 DStream 本质是RDD 序列,每个时间区间数据对应一个 RDD。 2.特点&a…...
优化提示词方面可以使用的数学方法理论:信息熵,概率论 ,最优化理论
优化提示词方面可以使用的数学方法理论:信息熵,概率论 ,最优化理论 目录 优化提示词方面可以使用的数学方法理论:信息熵,概率论 ,最优化理论信息论信息熵明确问题主题提供具体细节限定回答方向规范语言表达概率论最优化理论信息论 原理:信息论中的熵可以衡量信息的不确定性。…...
Sqlserver安全篇之_Sqlcmd命令使用windows域账号认证sqlserver遇到问题如何处理的案例
sqlcmd https://learn.microsoft.com/zh-cn/sql/tools/sqlcmd/sqlcmd-connect-database-engine?viewsql-server-ver16 sqlcmd -S指定的数据库连接字符串必须有对应的有效的SPN信息,否则会报错SSPI Provider: Server not found in Kerberos database. 正常连接 1、…...
基于华为云 ModelArts 的在线服务应用开发(Requests 模块)
基于华为云 ModelArts 的在线服务应用开发(Requests 模块) 一、本节目标 了解并掌握 Requests 模块的特点与用法学会通过 PythonRequests 访问华为云 ModelArts 在线推理服务熟悉 JSON 模块在 Python 中的数据序列化与反序列化掌握 Python 文件 I/O 的基…...
Graph Database Self-Managed Neo4j 知识图谱存储实践1:安装和基础知识学习
Neo4j 是一个原生图数据库,这意味着它在存储层实现了真正的图模型。它不是在其他技术之上使用“图抽象”,而是以您在白板上绘制想法的相同方式在Neo4j中存储数据。 自2007年以来,Neo4j已经发展成为一个丰富的工具、应用程序和库的生态系统。…...
【Python进阶】VSCode Python开发完全指南:从环境配置到高效调试
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现案例1:配置虚拟环境案例2:智能代码补全案例3:调试配置 运行结果…...
vscode:Live Server Preview插件
这个插件不用另外打开浏览器;它是直接在Vscode里面预览html的,并且是自动实时更新的,不用不停地CtrlS保存查看 使用方法:F1 -> 弹出一个窗口输入live,选择即可。 运行结果如下:...
关于在Springboot中设置时间格式问题
目录 1-设置全局时间格式1.Date类型的时间2.JDK8时间3.使Date类和JDK8时间类统统格式化时间 2-关于DateTimeFormat注解 1-设置全局时间格式 1.Date类型的时间 对于老项目来说,springboot中许多类使用的是Date类型的时间,没有用到LocalDateTime等JDK8时…...
双周报Vol.70: 运算符重载语义变化、String API 改动、IDE Markdown 格式支持优化...多项更新升级!
2025-04-21 语言更新 async 函数的调用处语法改为和 error 相同的 f!(..),原语法 f!!(..) 将触发警告 运算符重载的语义从基于方法迁移到了基于 trait,以后重载运算符需要通过给 moonbitlang/core/builtin 中对应的 trait 添加 impl 的形式。各个运算符…...
AI 技术发展:从起源到未来的深度剖析
一、AI 的起源与早期发展 人工智能(AI)作为计算机科学的重要分支,其诞生可以追溯到 20 世纪中叶。1943 年,艾伦・图灵提出图灵机的概念,为计算机科学和 AI 理论奠定了基础。1950 年,图灵又提出著名的图灵…...
【前端】【业务逻辑】 数据大屏自适应方案汇总
前端数据大屏自适应设计方案全解析 在前端数据大屏的开发中,自适应设计是关键环节,它能确保大屏在不同设备和屏幕尺寸上都能呈现出良好的视觉效果和交互体验。除了常见的 transform: scale、rem/vw、Flex/Grid 等方案外,还有其他有效的方法可…...
Java基础复习(JavaSE进阶)第六章 IO流体系
6-1 File类 01 122、File、IO流概述 02 123、File类:对象的创建 03 124、File类:判断、判断信息相关的方法 04 125、File类:创建、删除文件的方法 05 126、File类:遍历文件夹的方法 6-2 前置知识 01 127、前置知识:方…...
kvm下的ceph主机启动io请求统计
背景 假如一个主机存储在ceph里面,我们想统计下一次启动过程中的io读取的情况,那么可以通过下面的方法来统计 启动时间也可以通过在宿主机里面去查看,通过日志这边要方便一点,无需登录到虚拟机内部 日志开启 [global] fsid 406…...