QQ Bot
快速阅读 记录一个基于 OneBot 11 通信标准的 QQ 机器人应用的完整实现过程。 功能概述 通过与 QQ 机器人帐号对话调用 OneBot Server 应用层提供的服务。 通过 /upload 指令上传群文件到服务器; 通过 /remote <指令> 发送 RCON 命令到 Left 4 Dead 2 服务器,并回传执行结果; 通过 /help 指令获取所有插件的使用说明; 直接和大模型进行对话,支持输入文本、图片、视频、文件等内容。 核心节点 NapCat 协议层:负责把 QQ 底层消息封装成 OneBot 标准,并与应用层进行通信; OneBot Server 应用层:负责解析协议层推送的事件并调用相应的插件进行处理; LLM API Server 接口层:提供通用的大模型对话服务。 运行效果 协议层 协议层为 NapCat,是一个基于 NTQQ(PC 新版 QQ)的无头 Bot 协议端。 你也可以选择 OpenShamrock 等其他协议端,一般都是 OneBot 通信标准,它们的区别主要在于底层平台,例如 OpenShamrock...
解析几何
内容概要 写于 2020 年 5 月,文章介绍了一个关于高中数学 解析几何 相关题目的 快速解法。 此方法源于一本课外书上的速解公式,核心意义在于快速计算,能够避免在过于冗长的推导过程中写错某个参数导致整个计算过程出错。 原公式是用 Ax+ByAx+ByAx+By 直线式联立椭圆方程解出的,有些复杂。我做了一些优化,用 y=kx+my=kx+my=kx+m 联立,并扩展了抛物线公式,得出的结论经过化简后很容易记忆,所有解析几何类题目都可以使用。 推导过程 椭圆 以椭圆方程为例,推导过程如下: 联立 {x2a2+y2b2=1y=kx+m(如果是 y=kx−k,那么 m=−k)\begin{cases} \dfrac{x^2}{a^2}+\dfrac{y^2}{b^2}=1 \\ y=kx+m \quad(\text{如果是 }y=kx-k\text{,那么 }m=-k) \end{cases} ⎩⎨⎧a2x2+b2y2=1y=kx+m(如果是 y=kx−k,那么 m=−k) 得 (a2k2+b2)x2+2a2kmx+a2m2−a2b2=0(a^2k^2+b^2)x^2+2a...
相对运动
内容概要 写于 2020 年 5 月,文章介绍了一个关于高中物理 板块运动 相关题目的 快速解法。 此方法源于一本课外书上的例题,核心思想利用了运动的相对性,通过 变换参考系,将两个都在运动的物体转换为一个运动的物体和一个静止的物体,然后从 不同的视角(整体和单个物体)去分析问题,显著简化了思考过程和计算量。 在尝试用同样的思路解决其他运动问题时发现其局限性很大,因此我详细总结了它的适用场景和注意事项,并尝试将该方法的核心思想应用到其他力与运动类问题的解法中。 例题引入 一个人复习好无聊,总是想偷懒~ 不如总结一下写过的一本资料,和大家分享一下。 这个方法叫 相对运动,是我从一本资料书上了解到的,主要针对 板块运动 类题目,解法会很简单。比如下面这道题: 题目描述 2015 · 高考全国卷 II 下暴雨时,有时会发生山体滑坡或泥石流等地质灾害。某地有一倾角为 θ=37∘(sin37∘=35)\theta=37^\circ\left(\sin37^\circ=\dfrac{3}{5}\right)θ=37∘(sin37∘=53) 的山坡 CCC,上面有一质量为 mmm 的石板 ...
MD 参考文档
快速阅读 Markdown 是一种轻量级标记语言,由 John Gruber 于 2004 年创建。 它的核心思想可以用一句话概括:让文档易于阅读、易于书写,同时可以转换为结构化的 HTML。 主要特点 在 Markdown 出现之前,写网页内容通常要直接用 HTML,例如: 123456789<h1>整理书桌</h1><p>周末花了一个下午,把书桌重新整理了一遍,扔掉了<strong>不少东西</strong>。</p><ul> <li>过期的便签和收据</li> <li>用完的笔芯和空笔壳</li> <li>很久没翻开的旧杂志</li> <li>缠成一团的充电线</li></ul><p>桌面空出来之后,写东西的心情都好了很多。</p> HTML 表达能力很强,但问题也很明显: 标签太多,写一段话要打一堆尖括号。 纯文本状态下难读,不渲染就看不清结构。 ...
排序算法
冒泡排序 冒泡排序(Bubble Sort)是一种 交换类 的基础排序算法,重复遍历待排序数组,依次 比较相邻两个元素,若顺序错误则交换二者,每一轮遍历都会将当前 未排序部分 中最大(或最小)的元素 “冒泡” 到末尾。 交换类排序算法通过 比较并交换元素位置 来实现排序,主要操作是相邻或远距离的元素互换。 典型算法 冒泡排序:相邻元素两两比较,大值逐轮"冒泡"到末尾。 快速排序:选定基准值,通过交换将序列分为左右两部分,递归处理。 核心思想 冒泡排序的核心思想是 相邻元素两两比较,通过不断交换将最值逐位后移。 每一轮从前往后遍历,比较每一对相邻元素,若前者大于后者则交换。这个过程中,较大的元素就像气泡一样,一步步 “冒泡” 到当前未排序区间的末尾。 每完成一轮,末尾就多一个已排好的最大值,下一轮比较范围缩短一位,若某轮无交换则提前结束。 实现过程 以升序排序为例: 进行一轮循环,每次循环都找到 未排序部分 的最大元素并交换到末尾,只需要查找 n-1 次就能完成排序(最后一个元素不需要排序)。 123for (let i = 0; i < n - 1...
国际象棋
快速阅读 记录上学时做过的一个国际象棋软件。 功能概述 玩家对战:玩家之间轮流控制各自的棋子,吃掉对方的王获得胜利。合法的落点高亮,不合法的落点不对鼠标做出响应。 人机对战:玩家通过鼠标控制自己的棋子,AI通过搜索算法获得将要移动的棋子及移动的目标位置。AI走棋没有控制阶段但设置了完整的过渡动画。 控制面板:控制面板能够修改游戏模式、重置游戏进度、调整AI难度。 特殊规则: 兵的升变:本方任何一个兵直进达到对方底线时,即可升变为除 “王” 和 “兵” 以外的任何一种棋子。 王车易位:这是国际象棋中比较特殊的行棋规则,车和王在一些情况下可以互换位置。 吃过路兵:如果对方的兵第一次行棋且直进两格,刚好形成本方有兵与其横向紧贴并列,则本方的兵可以立即斜进,把对方的兵吃掉,并视为一步棋。 核心节点 搜索算法 deepSearch(depth, chessBoard, AIRound, parentIndex) depth 代表搜索的深度,每次递归 -1。 chessBoard 是搜索算法需要用到的棋盘数组。 AIRound 用来判断此轮搜索是否为 AI 走棋,若为AI走棋则遍...
五子棋
快速阅读 记录上学时做过的一个五子棋软件。 功能概述 可以选择玩家对战 / 人机对战的五子棋游戏。 按键控制 按键 0 1 2 3 4 5 6 7 8 9 a b c d e:控制行列线坐标 -> 开启对应线条闪动 Player1 控制时线条高亮色为红色,Player2 / AI 控制时高亮色为青色。 按键 - 清除列线闪动(列线已激活时) 清除行线闪动(列线已锁定、行线已激活时) 解锁列线 -> 开启列线闪动(列线已锁定、行线未激活时) 按键 + 锁定列线 -> 修改列线为高亮(列线已激活时) 生成棋子 -> 解锁列线 -> 取消列线高亮 -> 清除行线闪动 -> 锁定 Player1 按键 -> 解锁 Player2 按键或 AI 控制(列线已锁定、行线已激活时) 系统控制 T:显示 / 隐藏控制面板 R:切换模式(进程未结束时)/ 重置棋盘(进程已结束,棋盘已满或任意一方胜利时) Player2 对应的控制按键为:小键盘 0 1 2 3 4 5 6 7 8 9 . ↑ ← ↓ → 和 小键盘 + -...
图表编辑器
快速阅读 记录上学时做过的一个图表编辑器软件。 功能概述 基于 ECharts 实现的图表编辑器,通过点击按钮的方式选择相关配置项,自动编码并生成图表。 对于主要配置项提供不同类型的交互按钮: 输入框:data 类需要手动输入的数据,会自动错误检测。 单选框:有限个固定值的配置项。 多选框:可选用的工具类组件。 对于次要配置项,提供编码预览功能,可以在预览界面添加次要配置项代码。 核心节点 页面双向锚定、自适应图表尺寸、配置项转化为 JavaScript 代码以及错误检测的过程实现。 运行效果 QQ Bot五子棋国际象棋图表编辑器媒体播放器虚拟桌面贪吃蛇音频播放器
媒体播放器
快速阅读 记录大一暑假做过的一个媒体播放器软件。 功能概述 基于 JavaScript 和 Electron 实现的媒体播放器,用于播放视频和音频,可以修改播放速度、显示歌词、修改轮播逻辑、切换主题、缩放页面。 界面划分 上栏:包括白天/夜间模式切换、时间显示、媒体搜索框、消息提醒。 侧栏:包括主页、电影页、MV 页、音频页、自定义页、资源库 ABC。 主栏:显示选中的页面内容。 下栏:包括控制区、进度条、功能区。 按键控制 W A S:显示 / 隐藏上、侧、下栏 D:进入 / 退出主栏全屏 ← →:播放回退 / 播放快进 ↑ ↓:切换到上一个页面 / 下一个页面 F:进入 / 退出画中画 G:进入 / 退出视频全屏 Q:进入 / 退出缩放屏状态 R:打开 / 关闭主题窗口 T:打开 / 关闭模式窗口 V:打开 / 关闭词条窗口 B:打开 / 关闭视频窗口 1 2 3 4 5 6 7 8:切换到第 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 个页面 核心节点 轮播图:保存元素序列到数组,所有的元素横向排列,通过设定整体偏移距离实现轮播图效果。 缩略图:设...









