迷宫探险游戏开发日志
二、交互系统设计与优化
1. 跨设备输入适配 (
问题:移动端与桌面端操作体验不一致
解决方案:双重事件监听与节流控制 123456789101112// 触摸事件处理(300ms双击检测)let lastTap = 0;canvas.addEventListener('touchstart', e => { const now = Date.now(); if (now - lastTap < 300) this.handleDoubleTap(pos); else lastTap = now;});// 鼠标事件处理canvas.addEventListener('mousedown', e => { this.selectBlock(pos);}); -
统一坐标换算逻辑 - 增加300ms操作冷却时间
2. 动态障碍物系统
问题:困难模式需要动态改变迷宫结构
实时扰动机制: 123456789101112// 每15秒随机旋转30%方块 ...
信息学竞赛实用内置算法与技巧学习笔记
算法复杂度概述
在信息学竞赛中,
算法的时间复杂度和空间复杂度是衡量算法效率的重要指标.为了更全面地分析算法性能,
我们还需要了解均摊复杂度的概念及其计算方式.
时间复杂度计算方式
时间复杂度主要通过分析算法中基本操作的执行次数来确定.基本操作通常是循环、比较、算术运算等.
排序算法(sort):
排序算法的时间复杂度通常由比较和交换操作的次数决定.快速排序的平均时间复杂度为
O(n log n), 其中 n
是待排序元素的数量.这是因为快速排序将数组分成两部分, 递归排序每一部分,
并且每次递归处理大约需要 O(n) 的时间.递归深度为
O(log n), 因此总时间复杂度为 O(n log n).
二分查找算法(binary_search): 二分查找的时间复杂度为
O(log n), 其中 n
是有序数组的大小.这是因为每次比较将搜索范围减半,
直到找到目标元素或搜索范围为空.比较的次数与数组大小的对数成正比.
生成下一个排列(next_permutation): next_permutation
的时间复杂度为 O(n), 其中 n
是排 ...
系统功能更新
数据库更新
更新了获取所有白名单群聊的方法
更新了通过微信号获取用户信息的方法
更新了设置群聊简介的方法
敏感词更新
更新了敏感词增删及保存的方法
插件更新
加群插件
在微信机器人项目中, 交流群是必不可少的,
但要是通过群主一个个手动拉人进群, 那也太麻烦了.因此,
我们需要实现一个自动加群的功能, 这样一来,
机器人就可以自动将新用户拉入群聊中
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657# plugins/GroupInvite/main.py@on_text_messageasync def send_group_invite(self, bot: LegendWechatBot, msg: WxMsg): if not self.enable: return if msg.from_group(): to, at = msg.roomid, m ...
系统功能更新
日志翻新
日志内容优化
由于日志系统过于简陋, 且可读性极低, 甚至中英文夹杂,
现在重新设计日志系统, 对于插件数据库以及系统日志都做了优化
旧版日志(部分还能入眼的): 1232025-03-28 21:31:08 | INFO | LegendBotDB:495 - Database: Set chatroom 49981891388@chatroom whitelist successfully2025-03-28 21:31:08 | ERROR | LegendBotDB:500 - Database: Set chatroom 49981891388@chatroom whitelist failed, error: (sqlite3.IntegrityError) NOT NULL constraint failed: chatroom.chatroom_id[SQL: INSERT INTO chatroom (members, whitelist, llm_thread_id) VALUES (?, ?, ?)] 新版日志 1234567 ...
1. pair 的使用
1.1 特点与适用场景
特点: pair 是 C++
标准库中的一个模板类,用于存储两个不同类型的数据它提供了快速访问两个元素的接口
适用场景:
当需要同时存储两个相关数据时,比如键值对、二维点坐标、或者需要按某个字段排序时
1.2 典型操作
定义: pair<Type1, Type2> p;
初始化: pair<int, int> p(1, 2);
或 auto p = make_pair(1, 2);
访问元素: p.first 和
p.second
排序: pair 默认按 first
排序,first 相同时按 second 排序
1.3 使用实例
12345678910111213#include <iostream>#include <vector>#include <algorithm>using namespace std;int main() { vector<pair<int, string>> vec = {{3, ...
auto 你是我的神
1. vector
特点:动态数组,支持随机访问,插入和删除效率较低。
适用场景:需要频繁随机访问的场景。
典型操作:
push_back(): 添加元素到末尾。
pop_back(): 删除末尾元素。
size(): 获取当前大小。
capacity(): 获取当前容量。
resize(): 调整大小。
erase(): 删除指定位置的元素。
clear(): 清空容器。
1234567891011121314151617181920212223242526272829#include <iostream>#include <vector>using namespace std;int main() { vector<int> vec; vec.push_back(1); vec.push_back(2); vec.push_back(3); cout << "Vector size: " << vec.size() << ...
一、基础
基础
容器
vector
list
deque
set
map
stack
queue
算法
sort
binary_search
next_permutation
其他
pair
tuple
命名空间
λ表达式
pb_ds
算法复杂度分析
时间复杂度
空间复杂度
二、核心算法
算法基础
枚举
一维枚举
应用场景:遍历数组或列表
优化技巧:剪枝、减少冗余
二维枚举
应用场景:矩阵或二维数组
优化技巧:循环嵌套优化
多维枚举
应用场景:高维数据
优化技巧:降维处理
模拟
直接模拟
应用场景:按步骤模拟问题过程
优化技巧:减少不必要的计算
状态模拟
应用场景:状态变化问题
优化技巧:状态压缩
事件驱动模拟
应用场景:事件触发的动态过程
优化技巧:事件优先处理
递归 & 分治
递归
基本概念:函数调用自身
应用场景:树结构、回溯问题
优化技巧:记忆化递归、尾递归
分治
基本概念:分而治之
应用场景:排序、大规模数据处理
优化技巧:平衡子问题规模
贪心
基本概念:局部最优选择
应用场景:最优化问题
优化技巧 ...
数学基础
高等数学
极限与连续
导数与微分
积分
级数
线性代数
矩阵运算
向量空间
特征值与特征向量
奇异值分解
概率论与数理统计
概率分布
随机变量
参数估计
假设检验
最优化方法
线性规划
非线性规划
动态规划
机器学习
基础理论
监督学习
线性回归
逻辑回归
决策树
支持向量机
无监督学习
聚类算法
降维算法
强化学习
算法实现
传统机器学习算法实现
机器学习框架使用(如scikit-learn)
深度学习
基础理论
神经网络基础
卷积神经网络
循环神经网络
变分自编码器
生成对抗网络
框架与工具
TensorFlow
PyTorch
Keras
计算机视觉
图像处理基础
图像增强
图像滤波
边缘检测
图像分割
目标检测与识别
目标检测算法
人脸识别
行为识别
自然语言处理
文本处理基础
词法分析
句法分析
语义分析
语言模型
传统语言模型
Transformer模型
预训练模型(如BERT、GPT)
近期在学数学基础, AI学习笔记先暂置
系统文档请参见ReadtheDocs
欢迎
当你看到这个页面, 说明你很关注LegendWechatBot,
或已进入交流群, 那么恭喜你, 你已经迈出了第一步, 接下来,
让我们开始吧!
使用须知
本文仅对LegendWechatBot项目使用方式作介绍,
任何二次开发的项目请移步其自己的文档
微信群中的机器人虽说是机器人,
但实现方式是作者请了7个人后台随时在线并实时回复的! 并不是什么自动回复,
第三方插件等, 项目开源的仅仅是理想化机器人消息处理逻辑, 进攻学习交流,
请勿用于非法用途, 作者对此概不负责
本项目严禁用于商业用途
本项目处于开发状态,请密切关注使用文档以获取最新信息
使用方法
别漏空格
私聊
发送菜单即可查看所有支持的功能
群聊
同私聊, 但须先@机器人
命令格式
谁不加空格忘加一级命令来问我啊怎么没反应啊我笑他三万年
在发送菜单后, 会得到一级命令(如中药)
若想获得插件具体使用方法,
则发送一级命令即可(如发送中药即可获得中药插件的使用方法)
若想要使用插件相关功能, 则不能缺少一级命令
如签到功能中有查看运势的功能, 对应的命令是签到 查 ...
系统功能更新
消息处理协程锁
由于在先前的版本中, 为了避免风控检测,
在处理消息前加了协程锁LegendSemaphore,
导致消息处理在有的时候会抽风堵塞, 因此在本次更新中,
移除了每条消息前的锁, 改为了在发送文字消息前的随机延迟等待
1time.sleep(random.randint(1, 3) / random.randint(2, 10))
那协程锁白写了吗?当然不是, 改成AI消息处理限制, 防止api爆炸
消息处理逻辑优化
由于积分系统和黑白名单系统的加入,
因此在消息处理前增添了判断逻辑以及自动踢人 123456789101112# utils/LegendBot.pyif ( (msg.from_group() and self.DB.get_chatroom_whitelist(to) and self.DB.get_black(msg.sender) <= config.RobotConfig['black']) # 群聊且满足条件 or (not msg.from_group() and self.DB.get ...
博客快捷键
shift K
关闭快捷键功能
shift A
打开/关闭中控台
shift M
播放/暂停音乐
shift D
深色/浅色显示模式
shift S
站内搜索
shift R
随机访问
shift H
返回首页
shift F
友链鱼塘
shift L
友链页面
shift P
关于本站
shift I
原版/本站右键菜单
数据库加载中
通知
你好呀

