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

科学休息,我用AI写了个vscode养鱼插件:DevFish发布

1、前言

程序员这个职业,真是个全能的职业,上的厨房下的机房。每天的“运动”就是手指从 A 键挪到 Z 键。每天的常态是不断 Ctrl+C、Ctrl+V ,越忙越粘键盘,效率反而掉成狗。
于是我把“摸鱼”两个字正经写进了 OKR,目标很单纯:把划水变成合法行为,定时休息,bug 减半
但是一旦陷入头脑休息期间,就会发现脑袋空空,手指不知道干嘛。于是就用AI帮我写了个vscode插件,名副其实的摸鱼插件。
这里全程近乎没有自己手撸的代码,只是给到了AI创意想法,AI帮我实现。不得不感叹,危已~

2、项目到底干啥

Dev Fish 就是一款把“休息”包装成“养鱼”的插件。装完之后,VSCode 侧边栏会多一个鱼缸:
  • 里头的鱼会围观你写代码,你敲得快它们就加速游,Debug 时集体装死。
  • 番茄钟到点,鱼会冒泡提醒你“该起来倒水了”。
  • 通过Ctrl+Shift+p,可以键入指令,添加鱼苗,喂养,或清洁鱼缸等互动。

3、演示下效果图(装个13)

首页图:
Ctrl+shift+P唤起指令输入框:
添加鱼:
智慧信息流:

4、技术栈一句话说完前端

TypeScript + VSCode Webview + Canvas

4.1、核心代码

4.1.1、MVC

Model (数据层)├── Fish.ts          - 鱼的数据和行为├── Tank.ts          - 水缸的数据和管理└── StorageService   - 数据持久化View (视图层)├── AquariumProvider - Webview 提供者├── HTML/CSS         - UI 结构和样式└── Canvas           - 动画渲染Controller (控制层)├── fishCommands     - 鱼的命令处理├── breakCommands    - 休息的命令处理└── wisdomCommands   - 智慧的命令处理

4.1.2、 鱼的运动算法

class Fish {private baseVelocityX: number;private baseVelocityY: number;private speedMultiplier: number = 1.0;update(deltaTime: number): void {// 计算实际速度 = 基础速度 × 状态乘数const actualVelocityX = this.baseVelocityX * this.speedMultiplier;const actualVelocityY = this.baseVelocityY * this.speedMultiplier;// 更新位置this.x += actualVelocityX * deltaTime;this.y += actualVelocityY * deltaTime;// 边界检测和反弹this.handleBoundaryCollision();// 更新状态this.updateHappiness(deltaTime);this.updateHunger(deltaTime);this.updateBubble();}private handleBoundaryCollision(): void {const tankWidth = 800;const tankHeight = 600;if (this.x < 0 || this.x > tankWidth) {this.velocityX *= -1;this.x = Math.max(0, Math.min(tankWidth, this.x));}if (this.y < 0 || this.y > tankHeight) {this.velocityY *= -1;this.y = Math.max(0, Math.min(tankHeight, this.y));}}
}

4.1.3、泡泡显示算法

class BubbleStateMachine {private state: 'showing' | 'hiding' = 'hiding';private lastStateChangeTime: number = Date.now();private showDuration: number = 3000;    // 显示 3 秒private hideDuration: number = 5000;    // 隐藏 5 秒update(): void {const now = Date.now();const elapsed = now - this.lastStateChangeTime;if (this.state === 'showing') {if (elapsed > this.showDuration) {this.state = 'hiding';this.lastStateChangeTime = now;}} else {if (elapsed > this.hideDuration) {this.state = 'showing';this.lastStateChangeTime = now;this.bubble = this.getRandomBubble();}}}isVisible(): boolean {return this.state === 'showing';}
}

4.1.4、事件节流

// 防止事件处理过于频繁
class EventThrottler {private lastExecutionTime: number = 0;private throttleInterval: number = 100;  // 100msthrottle(callback: () => void): void {const now = Date.now();if (now - this.lastExecutionTime >= this.throttleInterval) {callback();this.lastExecutionTime = now;}}
}// 使用
const throttler = new EventThrottler();vscode.workspace.onDidChangeTextDocument(() => {throttler.throttle(() => {tank.fish.forEach(fish => fish.onTyping());});
});

5、开始养鱼吧

插件已经发布到vscode插件市场,目前支持最新版vscode 1.105版本以上。

5.1、下一步计划

  • 把成就数据扔 GitHub Gist,换电脑也能同步。
  • 给鱼写个最原始的 FSM,让它偶尔自己发呆、偶尔追鼠标。
  • 欢迎提 PR,最好顺带给我写单元测试,我实在懒得动。
记住:Ctrl+S 之前,先喂鱼。
http://www.dtcms.com/a/573244.html

相关文章:

  • Spring Boot 项目 GitLab CI/CD 自动构建并推送到 Harbor 教程
  • 彻底理解传统卷积,深度可分离卷积
  • 使用VSCode进行SSH远程连接时无法与xxx建立连接
  • 宁波建设工程报名网站陕西省住房与建设厅网站
  • Rust 练习册 6:生命周期与闭包
  • 公司网站开发的流程高端企业网站公司
  • 第二届中欧科学家论坛暨第七届人工智能与先进制造国际会议(AIAM 2025)在德国海德堡成功举办
  • 微硕WSF3085 MOSFET,汽车电动尾门升降强效驱动
  • 5 Prompt Engineering 高阶技巧:构建智能对话系统的核心技术
  • 汽车系统可靠性与技术融合:智能动力总成及机电一体化诊断
  • 网站建设对企业的重要性线上营销的优势和劣势
  • JavaScript 正则表达式全方位解析:从基础到实战
  • 工业相机成像核心参数解析,帧率与曝光时间的权衡关系
  • Kodiak Perps:Berachain 原生永续合约平台上线
  • 分布式版本控制系统Git的安装和使用
  • 用.echarts文件快速实现日历饼图
  • 影刀RPA一键生成竞品分析!AI智能监控,效率提升100倍[特殊字符]
  • 从卡顿到秒查:Java 项目引入 Elasticsearch 实现亿级地址数据的复杂查询实战
  • 国外可以做推广的网站有哪些广州品牌形象设计
  • 【MySQL】SQL语法详细总结
  • 宿迁华夏建设集团网站下列什么软件不能用于设计网页
  • vue笔记(第一天)
  • cursor和传统idea的区别是什么?
  • SSM--MyBatis框架SQL映射文件获取一对一或者一对多关系值
  • 网站开发实验报告总结阿里云是不是做网站的
  • 1000元级投影选哪款?大眼橙C3D实测体验闭眼入
  • 第一章 函数与极限 2.数列的极限
  • 用ps网站首页怎么做做a免费网站有哪些
  • 多因子量化模型预警:美元强势因子压制金价失守4000关口,ADP数据能否重构黄金趋势?
  • Mac 安装 Xcode 及qt 环境安装