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

【开源深度解析】从零打造AI暗棋对战系统:Python实现中国象棋暗棋全攻略

🎲【开源深度解析】从零打造AI暗棋对战系统:Python实现中国象棋暗棋全攻略

请添加图片描述

🌈 个人主页:创客白泽 - CSDN博客
🔥 系列专栏:🐍《Python开源项目实战》
💡 热爱不止于代码,热情源自每一个灵感闪现的夜晚。愿以开源之火,点亮前行之路。
👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更多人哦

请添加图片描述

🔍 引言:当传统象棋遇上"暗战"艺术

在这里插入图片描述

中国象棋作为传承千年的国粹,其变种玩法"暗棋"凭借独特的隐藏信息和概率博弈,近年来在棋类游戏圈掀起新热潮。本文将带您深入探索如何从零开发一个完整的暗棋对战系统,不仅实现双人对战功能,更创新性地集成AI对战模块。项目采用Python语言结合Pygame框架,涵盖:

  • 棋子生成工具开发
  • 游戏规则逻辑实现
  • AI决策算法设计
  • 用户交互系统构建

(以下为完整实现方案,所有代码均可直接运行)


🛠️ 第一章:智能棋子生成器开发

1.1 为什么需要专用生成工具?

传统象棋游戏直接使用现成素材,但暗棋需要:

  • 正反两面不同样式(正面汉字/反面统一图案)
  • 高分辨率适配多种屏幕
  • 风格化定制需求(古典/现代/卡通等)

1.2 核心代码解析(GUI版生成器)

class ChessPieceGenerator:def __init__(self, root):self.COLORS = {'red': (219, 40, 40, 255),  # 透明通道RGBA'black': (0, 0, 0, 255)}self.PIECE_MAP = {'red': {'general': '帅', 'advisor': '仕'...},'black': {'general': '将', 'advisor': '士'...}}def generate_pieces(self):"""批量生成所有棋子"""for color in ['red', 'black']:for piece_type, char in self.PIECE_MAP[color].items():# 创建高清画布(4倍抗锯齿)high_res_img = Image.new('RGBA', (240,240), (0,0,0,0))# 绘制双圆圈轮廓self.draw_concentric_circles(high_res_img, color)# 添加矢量文字self.draw_text(high_res_img, char, color)# 降采样输出img = high_res_img.resize((60,60), Image.LANCZOS)

1.3 关键技术亮点

  1. 抗锯齿处理:先4倍尺寸绘制后降采样
  2. 动态参数调节
    • 圆圈层数(单圈/双圈)
    • 线条粗细(1-5px可调)
    • 字体大小动态适配
  3. 跨平台字体支持:自动扫描系统字体目录

在这里插入图片描述
在这里插入图片描述


♟️ 第二章:暗棋游戏引擎实现

2.1 游戏规则精要

规则类型具体说明
棋子等级将(7) > 士(6) > 象(5) > 车(4) > 马(3) > 炮(2) > 兵(1)
特殊规则兵可吃将,炮需隔子吃,未翻棋子不能移动
胜负判定吃光对方或将死对方

2.2 核心游戏逻辑

def can_capture(self, attacker, defender):# 炮特殊规则if attacker.piece_type == 'cannon':return self._cannon_capture_rule(attacker, defender)# 兵吃将规则if attacker.piece_type == 'soldier' and defender.piece_type == 'general':return True# 常规等级比较return attacker.level >= defender.level

2.3 状态管理机设计

在这里插入图片描述

首次翻棋黑方行动结束红方胜利红方行动结束黑方胜利黑方行动结束初始状态游戏进行中红方回合游戏结束黑方回合

2.4 🎮游戏画面效果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


🤖 第三章:AI对战模块深度解析

3.1 决策树算法实现

AI采用多维度评分策略:

def evaluate_actions(self):scores = []for piece in self.all_pieces:if not piece.is_face_up:# 翻棋评分 = 基础分 + 局势系数score = 5 + self._calculate_situation_factor()elif piece.color == ai_color:for move in self.get_valid_moves(piece):if self.board[move[0]][move[1]]:  # 吃子行为score = 50 + target.level*10 if target.piece_type == 'general':score += 100  # 擒王奖励else:  # 移动行为score = 1 + self._position_value(move)scores.append((score, action_type, piece, move))

3.2 智能优化策略

  1. 开局库:记录前10步高频走法
  2. 残局模式:当棋子少于8个时切换评估函数
  3. 风险规避:避免高价值棋子被低级棋子兑换
开始回合
是否有必杀棋?
执行必杀
评估所有可行动作
生成动作树
深度优先搜索
到达最大深度?
模拟走棋
静态评估
回溯评分
选择最优路径
执行动作

3.3 🌳 暗棋AI系统完整架构图

1. 核心系统架构
暗棋AI系统
棋子生成模块
游戏引擎模块
AI决策模块
用户界面模块
2. 模块详细分解
2.1 棋子生成模块

图表
代码

2.2 游戏引擎模块

图表
代码

2.3 AI决策模块

图表
代码

2.4 用户界面模块

图表
代码

3. 关键数据流路径

图表
代码

4. 典型执行路径示例

图表
代码

5. 技术栈依赖树

图表
代码

6. 开发环境依赖

图表
代码

🎮 第四章:用户体验优化技巧

4.1 视觉增强方案

  1. 粒子特效:吃子时爆发火花效果
  2. 动画过渡:棋子移动平滑动画
  3. 音效设计
    • 翻棋:"纸张翻转"音效
    • 吃子:金属碰撞声
    • 将军:警报声

4.2 操作优化设计

def handle_click(self, pos):# 区域判定if button_area.collidepoint(pos):return self._handle_button_click(pos)# 棋子选择判定piece = self._get_piece_at(pos)if self.selected_piece:if pos in self.possible_moves:self._execute_move()else:self.selected_piece = None  # 取消选择

📊 第五章:性能测试与优化

5.1 基准测试数据

测试项原始版本优化后
AI响应时间1200ms300ms
内存占用450MB210MB
渲染帧率30FPS60FPS

5.2 关键优化手段

  1. 表面缓存:预渲染静态元素
  2. 事件节流:限制AI计算频率
  3. 资源懒加载:按需载入图片音效

🚀 第六章:项目扩展方向

6.1 网络对战版设计

在这里插入图片描述

玩家B服务器玩家A玩家B服务器玩家A走棋指令状态更新响应动作游戏状态同步

6.2 机器学习进阶

  1. 使用DQN算法训练神经网络
  2. 收集对战数据构建推荐系统
  3. 开发难度分级系统

💡 结语:传统游戏的现代重生

通过本项目,我们不仅实现了:

  • 完整的暗棋规则引擎
  • 智能AI对战系统
  • 专业级棋子生成工具

更重要的是探索了传统文化与现代编程的完美结合。所有代码已开源,欢迎在CSDN下载完整项目包(包含:)

立即下载完整项目

相关文章:

【开源深度解析】从零打造AI暗棋对战系统:Python实现中国象棋暗棋全攻略

🎲【开源深度解析】从零打造AI暗棋对战系统:Python实现中国象棋暗棋全攻略 🌈 个人主页:创客白泽 - CSDN博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码,…...

UE5 Daz头发转Blender曲线再导出ABC成为Groom

先安装Daz to Blender Import插件 【神器】 --DAZ一键导入blender插件的详细安装和使用,自带骨骼绑定和控制器,多姿势动画,Importer桥接插件_哔哩哔哩_bilibili 然后安装DAZHairConverter插件 一分钟将DAZ头发转化成Blender粒子毛发_哔哩哔…...

【Java学习】反射

目录 反射类 一、泛型参数 二、反射类类型 三、实例化 1.实例化材料 2.结构信息可使用化 四、使用 1.Class —类完整结构信息 1.1Class<类>实例化 1.2Class<类>实例获取 1.2.1Class类静态获取&#xff1a; 1.2.2信息类静态获取 1.2.3信息类非静态获取 …...

SQLite数据类型

目录 1 SQLite的类型概述 1.1 存储类&#xff08;Storage Classes&#xff09; 1.2 类型亲和性&#xff08;Type Affinity&#xff09; 2 类型亲和性分配规则 3 数据类型详细说明 3.1 INTEGER类型 3.2 REAL类型 3.3 TEXT类型 3.4 BLOB类型 3.5 NULL类型 3.6 NUMERI…...

Django异步任务处理方式总结

在 Django 中实现异步任务处理是优化性能和用户体验的关键。以下是几种常见的异步任务处理方式及详细说明&#xff1a; 1. Celery&#xff08;最主流方案&#xff09; 适用场景&#xff1a;需要可靠、分布式、复杂任务队列的项目&#xff08;如定时任务、重试机制、多节点部署…...

AI技术下研发体系重构

导语&#xff1a; 人工智能技术已发展70余年&#xff0c;经历了从逻辑符号主义向数据驱动范式的转变&#xff0c;目前正处于向多模态、通用化以及伦理化方向演化的阶段。在接下来的五年内&#xff0c;人工智能技术的商业化应用预计将迎来关键性的转变。大模型技术的突破、多模…...

UE5 使用插槽和物理约束对角色新增的饰品添加物理效果

这是一条项链,分为链部分和吊坠部分 新增物理碰撞资产,链部分在前面(作为固定),吊坠部分在后面(作为物理模拟) 链部分的Physics设置 连接部分的设置 吊坠部分 添加物理约束,在Constraint里面添加角色名和饰品名 在约束里面可以对特定骨骼约束,这里需要把链部分约束...

邂逅蓝耘元生代:ComfyUI 工作流与服务器虚拟化的诗意交织

往期推荐&#xff1a; 探秘蓝耘元生代&#xff1a;ComfyUI 工作流创建与网络安全的奇妙羁绊-CSDN博客 工作流 x 深度学习&#xff1a;揭秘蓝耘元生代如何用 ComfyUI 玩转 AI 开发-CSDN博客 探索元生代&#xff1a;ComfyUI 工作流与计算机视觉的奇妙邂逅-CSDN博客 解锁元生代&a…...

【Elasticsearch】在kibana中能获取已创建的api keys吗?

在 Kibana 中&#xff0c;目前没有直接的界面功能可以列出或查看已创建的 API 密钥&#xff08;API keys&#xff09;。API 密钥的管理和查看主要通过 Elasticsearch 的 REST API 来完成&#xff0c;而不是通过 Kibana 的管理界面。 在 Kibana 中使用 Dev Tools 查看 API 密钥…...

[论文阅读]Deep Cross Network for Ad Click Predictions

摘要 特征工程是许多预测模型成功的关键。然而&#xff0c;这个过程是困难的&#xff0c;甚至需要手动特征工程或穷举搜索。DNN能够自动学习特征交互&#xff1b;然而&#xff0c;它们隐式地生成所有的交互&#xff0c;并且不一定有效地学习所有类型的交叉特征。在本文中&…...

薪技术|0到1学会性能测试第45课-apache调优技术

前面的推文我们掌握了apache监控技术,今天我们继续来看下apache调优技术,究竟是怎么做性能调优???后续文章都会系统分享干货,带大家从0到1学会性能测试。 Apache调优技术 Apache最近的版本是2.2版,Apache2.2是一个多用途的web服务器,其设计在灵活性、可移植性和性能中…...

Linux之基础开发工具二(makefile,git,gdb)

目录 一、自动化构建-make/makefile 1.1、背景 1.2、基本使用 1.3、推导过程 1.4、语法拓展 二、进度条小程序 2.1、回车与换行 2.2、行缓冲区 2.3、练手-倒计时程序 2.4、进度条程序 三、版本控制器-Git 3.1、版本控制器 3.2、gitee的使用 3.2.1、如何创建仓库 …...

cesium之自定义地图与地图叠加

在appvue中,cesium支持更换不同的地图资源,代码如下 <template><div id"cesiumContainer" ref"cesiumContainer"></div> </template><script setup> import * as Cesium from cesium; import "./Widgets/widgets.css&…...

链表结构深度解析:从单向无头到双向循环的实现全指南

上篇博客实现动态顺序表时&#xff0c;我们会发现它存在许多弊端&#xff0c;如&#xff1a; • 中间/头部的插⼊删除&#xff0c;时间复杂度为O(N) • 增容需要申请新空间&#xff0c;拷⻉数据&#xff0c;释放旧空间。会有不⼩的消耗。 • 增容⼀般是呈2倍的增⻓&#xff0c;…...

Apache Velocity代码生成简要介绍

Apache Velocity 概述 Apache Velocity 是一个基于 Java 的模板引擎&#xff0c;它允许将 Java 代码与 HTML、XML 或其他文本格式分离&#xff0c;实现视图与数据的解耦。在 Web 开发中&#xff0c;Velocity 常用于生成动态网页内容&#xff1b;在其他场景下&#xff0c;也可用…...

阿里云前端Nginx部署完,用ip地址访问却总访问不到,为什么?检查安全组是否设置u为Http(80)!

根据你的描述&#xff0c;Ping测试显示数据包无丢失但无法通过公网IP访问服务&#xff0c;说明网络基础层&#xff08;ICMP协议&#xff09;是通畅的&#xff0c;但更高层&#xff08;如TCP/UDP协议或服务配置&#xff09;存在问题。以下是系统性排查与解决方案&#xff1a; 一…...

【Hive入门】Hive行级安全:基于Apache Ranger的细粒度访问控制深度解析

引言 在大数据时代&#xff0c;数据安全与隐私保护已成为企业不可忽视的核心需求。传统表级权限控制已无法满足"同一张表不同用户看到不同数据"的业务场景&#xff0c;行级安全(Row-Level Security)成为数据仓库系统的必备能力。 1 行级安全概述 1.1 什么是行级安全…...

Marin说PCB之1000-BASE-T1的PCB设计总结--04

另外一路的1000-BASE-T1 Circuit&#xff1a;千兆以太网的仿真电路原理图的连接搭建方式如下&#xff1a; &#xff08;共模电感的连接需要特别注意一下PIN序别搞错了&#xff09; 这一路1000-BASE-T1 Circuit是做了兼容设计的&#xff1a; 其中电容C2099和C2100是百兆以太网的…...

两数之和(暴力+哈希查找)

目录 ​ 一.题目 二.解题过程 题目解析 方法一&#xff08;暴力求解&#xff09; 思路 代码 提交结果 方法二&#xff08;哈希查找&#xff09; 思路 代码 提交结果 作者的个人gitee​​ 作者的算法讲解主页▶️ 每日一言&#xff1a;“愿你纵踩淤泥&#xff0c;也要…...

Qt项目——天气预报

目录 前言结果预览工程文件窗体无状态栏窗口跟随移动HTTP基本概念JSON数据QT解析JSON数据结语 前言 通过对之前Qt的学习其实我们就已经有一点经验了&#xff0c;做天气预报只需要了解以下内容&#xff1a; stylesheet界面美化 Json数据解析 HTTP通信 自定义控件绘制温度 结果预…...

智能推理DeepSeek-R1+Word深度整合业级智能办公构建

前引&#xff1a; 当我们将DeepSeek-R1深度集成到Word时&#xff0c;实际上是在构建智能办公的"数字神经系统"。这个系统不仅理解文字内容&#xff0c;更能感知用户意图&#xff0c;在恰当的时刻提供精准的智能辅助。随着RAG&#xff08;检索增强生成&#xff09;技术…...

【C++ Qt】常用输入类下:Combo Box/Spin Box/DataTimeEdit/Dial/Slide

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a; 在Qt开发框架中&#xff0c;UI组件是构建用户交互界面的基石。本章将详细探讨Qt中常用的UI组件&#xff0c;包括下拉框&#xff08;QComboBox&#xff…...

基于Piecewise Jerk Speed Optimizer的速度规划算法(附ROS C++/Python仿真)

目录 1 时空解耦运动规划2 PJSO速度规划原理2.1 优化变量2.2 代价函数2.3 约束条件2.4 二次规划形式 3 算法仿真3.1 ROS C仿真3.2 Python仿真 1 时空解耦运动规划 在自主移动系统的运动规划体系中&#xff0c;时空解耦的递进式架构因其高效性与工程可实现性被广泛采用。这一架…...

K8s 常用命令、对象名称缩写汇总

K8s 常用命令、对象名称缩写汇总 前言 在之前的文章中已经陆续介绍过 Kubernetes 的部分命令&#xff0c;本文将专题介绍 Kubernetes 的常用命令&#xff0c;处理日常工作基本够用了。 集群相关 1、查看集群信息 kubectl cluster-info # 输出信息Kubernetes master is run…...

C++编程语言:从高效系统开发到现代编程范式的演进之路

目录 前言一、c简介1.1 起源1.2 c的特点 二、开发环境搭建 2.1. 安装 Qt 开发工具2.2 修改编码环境 2.3创建第一个 Qt 项目2.4 c的编译过程2.5 代码示例 2.6 qt疑难杂症 2.6.1 遇到无法删除代码&#xff0c;一点击光标就变成小黑块2.6.2 遇到运行不弹出终端 ​编辑 2.6.3 遇到…...

OpenCV进阶操作:角点检测

文章目录 一、角点检测1、定义2、检测流程1&#xff09;输入图像2&#xff09;图像预处理3&#xff09;特征提取4&#xff09;角点检测5&#xff09;角点定位和标记6&#xff09;角点筛选或后处理&#xff08;可选&#xff09;7&#xff09;输出结果 二、Harris 角点检测&#…...

广州华锐视点邀您参与2025广交会VRAR展【5月10-12日】

2025 广交会数字显示与元宇宙生态博览会暨第 9 届世界 VR&AR 展将在广州盛大举行 。时间&#xff1a;2025 年 5 月 10 日至 12 日&#xff0c;广州华锐视点作为一家深耕 VR、AR、AI、元宇宙内容制作领域的企业&#xff0c;也将携旗下众多创新产品和解决方案闪耀登场&#x…...

mac m2 安装 hbase

默认安装好了 homebrew。 1. 终端先更新下 homebrew brew upgrade再安装 hbase brew install hbase 安装完会有如下图的内容 2. 按照提示启动 hbase brew services start hbase返回启动成功 3. 访问 http://localhost:16010 检验一下 启动成功 4. 在启动 hbase shell之…...

k8s node 报IPVS no destination available

在 Kubernetes 集群中&#xff0c;IPVS no destination available 错误通常表示 kube-proxy&#xff08;IPVS 模式&#xff09;无法为 Service 找到可用的后端 Pod。这会导致流量无法正确转发&#xff0c;影响服务可用性。以下是详细的排查和解决方法&#xff1a; 一、错误原因…...

MySQL 中 EXISTS (SELECT 1 FROM ...) 的用法详解

EXISTS (SELECT 1 FROM ...) 是 MySQL 中用于存在性检查的核心语法&#xff0c;其核心逻辑是判断子查询是否返回至少一行数据。以下从作用原理、使用场景、性能优化等方面展开解析&#xff0c;并结合具体示例说明。 1. 基本语法与作用原理 语法结构&#xff1a; SELECT 列名 F…...

荣耀A8互动娱乐组件部署实录(第3部分:控制端结构与房间通信协议)

作者&#xff1a;曾在 WebSocket 超时里泡了七天七夜的苦命人 一、控制端总体架构概述 荣耀A8控制端主要承担的是“运营支点”功能&#xff0c;也就是开发与运营之间的桥梁。它既不直接参与玩家行为&#xff0c;又控制着玩家的行为逻辑和游戏规则触发机制。控制端的主要职责包…...

前端-HTML+CSS+JavaScript+Vue+Ajax概述

HTML&#xff08;超文本标记语言&#xff09;常见标签 <html><head> <title>这是标题的内容&#xff0c;显示在浏览器的头部</title></head><body><!-- 这里面的内容在浏览器显示给用户看 --><!-- h1 -> h6 : 标题从大到小 …...

20250506格式化NanoPi NEO开发板使用Ubuntu core16.04系统的TF启动卡

https://www.sdcard.org/downloads/formatter/eula_windows/SDCardFormatterv5_WinEN.zip 20250506使用SDCardFormatter工具格式化NanoPi NEO开发板使用Ubuntu core16.04系统的TF启动卡 2025/5/6 20:04 缘起&#xff1a;使用友善之臂的NanoPi NEO开发板&#xff0c;制作了Ubunt…...

信息时代的政治重构:网络空间与主权的未来

一、网络空间&#xff1a;暴力垄断的终结 无边界主权的崛起 网络空间作为“第五阶段”的暴力竞争场域&#xff0c;打破传统领土垄断。政府无法像控制物理世界那样垄断网络暴力&#xff0c;类似公海的法律真空状态。 边区类比&#xff1a;中世纪的安道尔&#xff08;法西共管避…...

Kotlin重构Android项目实践

以下是使用 Kotlin 重构 Android 项目的 5 个常见场景实践&#xff0c;通过对比 Java 实现方式&#xff0c;展示 Kotlin 的简洁性和现代特性&#xff1a; 场景 1&#xff1a;数据类替代 Java POJO Java 传统实现&#xff1a; public class User {private String name;private…...

Vue + Element UI 表单弹窗输入法卡顿问题解决方案

Vue Element UI 表单弹窗输入法卡顿问题解决方案 前言 在使用 Vue 和 Element UI 开发后台管理系统时&#xff0c;经常会遇到 el-dialog 弹出表单对话框的场景。然而&#xff0c;很多开发者可能会遇到一个棘手的问题&#xff1a;当调用 resetFields() 方法重置表单时&#x…...

ubantu安装CUDA

想要通过llama.cpp的方式跑deepseek R1模型。在按照https://huggingface.co/unsloth/DeepSeek-R1-GGUF教程去配环境时报错了。具体如下&#xff1a; (base) oemcore:~/Desktop/deepseek_llama.cpp$ sudo cmake llama.cpp -B llama.cpp/build -DBUILD_SHARED_LIBSOFF -DGGM…...

Python生活手册-Numpy多维数组构建:从快递分拣到智能家居的数据变形术

一、快递分拣系统&#xff08;基础构建&#xff09; 1. 电子面单生成&#xff08;列表转数组&#xff09; import numpy as np手工录入的快递单号 纸质单号 [["SF123", "JD456", "EMS789"],["YT012", "ZT345", "YZ6…...

数据库的范围查询

范围查询 B树迭代器 迭代器接口 B树的基本操作包括用于范围查询的查找和迭代。B树的位置由状态化的迭代器 BIter 表示。 // 查找小于或等于输入键的最近位置 func (tree *BTree) SeekLE(key []byte) *BIter// 获取当前键值对 func (iter *BIter) Deref() ([]byte, []byte)/…...

JS DAY4 日期对象与节点

一日期对象 日期对象:用来表示时间的对象 作用:可以得到当前系统时间 1.实例化 在代码中发现了 new 关键字时&#xff0c;一般将这个操作称为实例化 创建一个时间对象并获取时间 时间必须实例化 获得当前时间 const date new Date() 获得指定时间 const date new Date(…...

【Leetcode 每日一题 - 补卡】1007. 行相等的最少多米诺旋转

问题背景 在一排多米诺骨牌中&#xff0c; t o p s [ i ] tops[i] tops[i] 和 b o t t o m s [ i ] bottoms[i] bottoms[i] 分别代表第 i i i 个多米诺骨牌的上半部分和下半部分。&#xff08;一个多米诺是两个从 1 1 1 到 6 6 6 的数字同列平铺形成的 —— 该平铺的每一半…...

Android设备运行yolov8

放假这几天搞了一个基于uniapprk3588实现了一版yolo检测 这个是基于前端调用后端api来实现&#xff0c;感觉还可以&#xff0c;但是需要有网络才能进行图像检测&#xff0c;网络不稳定就会出现等待时间会比较久的问题&#xff0c;然后有做了一个在做了一个Android版本的图像检…...

Debezium MySqlValueConverters详解

Debezium MySqlValueConverters详解 1. 类的作用与功能 1.1 核心作用 MySqlValueConverters是Debezium中负责MySQL数据类型转换的核心类,主要功能包括: 数据类型映射:将MySQL的数据类型映射到Kafka Connect的Schema类型值转换:将MySQL的原始值转换为Kafka Connect可用的…...

Redis从入门到实战——实战篇(下)

四、达人探店 1. 发布探店笔记 探店笔记类似于点评网站的评价&#xff0c;往往是图文结合。对应的表有两个&#xff1a; tb_blog&#xff1a;探店笔记表&#xff0c;包含笔记中的标题、文字、图片等tb_blog_comments&#xff1a;其他用户对探店笔记的评价 步骤①&#xff1…...

算法中的数学:质数(素数)

1.质数 1.1定义 一个大于1的自然数&#xff0c;除了1和它自身外&#xff0c;不能被其他自然数整除&#xff0c;那么他就是质数&#xff0c;否则他就是合数。 注意&#xff1a;1既不是质数也不是合数 唯一的偶质数是2&#xff0c;其余所有质数都是奇质数 1.2质数判定求法 试除法…...

linux、window安装部署nacos

本文以nacos 2.2.0为例 文章目录 1.下载安装包2.按需修改配置配置单机模式配置内存 -Xms -Xmx -Xmn配置数据库为MySQL 3. 访问http://ip:8848/nacos4.常见问题找不到javac命令 1.下载安装包 打开官网&#xff0c;下载2.2.0版本 2.按需修改配置 配置单机模式 默认集群模式&…...

C++ 外观模式详解

外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它为复杂的子系统提供一个简化的接口。 概念解析 外观模式的核心思想是&#xff1a; 简化接口&#xff1a;为复杂的子系统提供一个更简单、更统一的接口 降低耦合&#xff1a;减少客户端与子…...

42. 接雨水(相向双指针/前后缀分解),一篇文章讲透彻

给定一个数组&#xff0c;代表柱子的高度 求出下雨之后&#xff0c;能接的水有多少单位。我们将每一个柱子想象成一个水桶&#xff0c;看他能接多少水 以这个水桶为例&#xff0c;他所能接的水取决于左边的柱子的最大高度和右边柱子的最大高度&#xff0c;因为只有柱子高的时候…...

vue实现AI问答Markdown打字机效果

上线效果 功能清单 AI问答&#xff0c;文字输出跟随打字机效果格式化回答内容&#xff08;markdown格式&#xff09;停止回答&#xff0c;复制回答内容回答时自动向下滚动全屏切换历史问答查看 主要技术 vue 2.7.1markdown-it 14.1.0microsoft/fetch-event-source 2.0.1high…...

【QT】QT中的事件

QT中的事件 1.事件的定义和作用2.QT中事件产生和派发流程2.1 步骤2.2 图示示例代码&#xff1a;&#xff08;event函数接收所有事件&#xff09; 3.常见的事件3.1 鼠标事件示例代码&#xff1a;现象&#xff1a; 3.2 按键事件3.3 窗口大小改变事件 4.举例说明示例代码&#xff…...