麦田物语课程设计:Phaser3与TypeScript构建作物状态机与季节系统
简介面向高校游戏开发、数字媒体技术等专业的课程设计与毕业设计需求这套基于麦田物语主题的项目资源包提供了从场景搭建到角色动画的一体化参考方案可有效解决同类课设中项目结构混乱、素材不完整、动画状态机配置困难等问题。压缩包共含两千零七个文件整体约一百一十兆以动画片段、场景贴图、资源对象、配置文件为主并附有音效与少量脚本内容覆盖角色左右移动、旋转、下落以及树木春夏色彩变化等动画可直观了解Unity中动画状态机、资源引用与项目目录的组织方式。目前已有二百八十六人学习适合需要搭建休闲田园风格二维游戏或完成同类课设项目的学生可借鉴其中的动画绑定逻辑、素材管理与场景层次划分直接作为毕业设计的基础框架。此外资源包内还包含项目配置文件与序列化信息便于学习Unity资源的导入与关联流程。1. 麦田物语课程设计不是画一块田先看透这三个系统把“麦田物语”当课程设计题目接到手时最容易走偏的方向是先去堆美术资源。很多小组花两周抠像素地块、画角色侧身帧最后只交出一个能走路、能种小麦的静态画面答辩时被问到“季节切换后你的作物数据怎么办”就直接卡住。我指导过的小组里凡是翻车的项目几乎都有一个共同点把作物当成“画在屏幕上的东西”来设计而不是当成“不断被时间推进的状态机”来设计。这个标题真正要考的是把田园经营题材拆成三个能运作的系统地图与交互层、作物生长状态机、季节与任务驱动的数值循环。浏览器里能跑、答辩时能调参、逻辑上能自洽才算把这个课程设计立住。这篇笔记就按这个顺序用 Phaser 3开源 2D 游戏框架配合 TypeScript 走一条可复现的实现路径适合正在选型或者已经跑到一半、想回头重构数据层的小组。2. 搭好工程骨架从地图网格到像素坐标2.1 技术选型红线为什么用 Phaser 3 而不是手写 Canvas第一次拿到“麦田物语”这类模拟经营题目时很多同学第一反应是“我直接用一个 canvas 画矩形不就行了吗”。能画但课程设计的验收点通常不止是画面还包括“可扩展性”和“数据与表现分离”。手写 Canvas 意味着要自己管理渲染循环、帧率、输入、纹理和场景切换这些不是本项目的重点写多了反而把核心逻辑淹没在图形代码里。我这边带头做这类课题时的习惯是渲染框架用成熟开源方案业务逻辑全部自己写。Phaser 3 自带 Scene 管理、键盘鼠标输入、纹理生成、动画和摄像机系统文档充足社区例子多。配 TypeScript 是第二道保险作物种类、生长阶段、季节这种有明确枚举的数据用类型写死了比用字符串到处传更不容易在后期改崩。工程初始化走 Vite 就好几秒出一个可运行工程npm create vitelatest mian-tian-wu-yu -- --template vanilla-ts cd mian-tian-wu-yu npm install npm install phaser参数说明--template vanilla-ts生成的是最干净的 TypeScript 模板不引入 Vue 或 React后面挂 Phaser 时没有框架冲突。安装完 phaser 后直接在src/main.ts里创建 Phaser Game 实例即可。import Phaser from phaser; new Phaser.Game({ type: Phaser.AUTO, width: 960, height: 640, scene: [MainScene], render: { antialias: false, }, });逻辑说明type指定渲染方式AUTO让框架自己决定用 WebGL 还是 Canvasantialias: false是像素风地图的关键否则 32x32 的磁砖会被模糊成一片。这一步如果不设后面所有纹理都会发晕看着像没对准焦。2.2 最小可用场景与网格地图绘制课程设计里地图不需要做得大而全常见做法是把地图做成二维数组0 表示草地1 表示耕地2 表示水边。下面这段代码用 Phaser 的图形对象直接画色块避免去网上找磁砖图版权和像素风格问题一次性绕开。const TILE 32; const MAP [ [0, 0, 1, 1, 0], [0, 1, 1, 1, 0], [1, 1, 0, 1, 1], ]; this.grid this.add.group(); MAP.forEach((row, y) { row.forEach((tile, x) { const color tile 0 ? 0x4caf50 : tile 1 ? 0x6d4c2f : 0x2196f3; const rect this.add.rectangle( x * TILE TILE / 2, y * TILE TILE / 2, TILE, TILE, color ); rect.setOrigin(0.5); this.grid.add(rect); this.gridData.set(${x},${y}, tile); }); });逻辑说明gridData是一个Mapstring, number键是x,y字符串值是地形类型。为什么不用二维数组直接存在类里因为 Phaser 的 Group 遍历时拿对象容易回查数据需要坐标用字符串拼接键做映射最直白。后续作物系统也要挂在同样的x,y坐标上这套键不会变。参数说明TILE 32是像素尺寸适合 960x640 的画布。如果窗口改成 1920x1080只要地图数组和相机缩放配合调整这个值可以整体替换。地图数组里的1是耕地作物只能种在1上这块判断要写进交互逻辑否则会出现小麦长在水里的“灵异画面”。2.3 玩家移动与摄像机跟随的核心参数经营类游戏里玩家移动不需要物理引擎直接用速度乘法即可。我的经验是不要用physics.add.sprite因为碰撞体对网格游戏来说多余还会引发奇怪的回弹。用一个普通 Image 加键盘监听就够了const speed 180; // 像素/秒 const cursors this.input.keyboard.createCursorKeys(); const wasd this.input.keyboard.addKeys(W,A,S,D) as any; this.player this.add.image(0, 0, player).setOrigin(0.5); this.cameras.main.startFollow(this.player, true, 0.1, 0.1); this.cameras.main.setZoom(1.5); update(_time: number, delta: number) { const dt delta / 1000; let vx 0, vy 0; if (cursors.left.isDown || wasd.A.isDown) vx -speed; else if (cursors.right.isDown || wasd.D.isDown) vx speed; if (cursors.up.isDown || wasd.W.isDown) vy -speed; else if (cursors.down.isDown || wasd.S.isDown) vy speed; this.player.x vx * dt; this.player.y vy * dt; }逻辑说明delta由 Phaser 每帧传入单位是毫秒所以第一行要除以 1000 转成秒。速度 180 配合 1.5 倍缩放在 32px 磁砖地图上感觉正好不会一帧跑几格。startFollow的第三个参数0.1是跟随阻尼值越小越平滑但设成 0 会让镜头完全锁死顿挫感明显。参数说明如果后续加 NPC 需要判定交互距离以玩家位置和 NPC 位置做直线距离计算交互半径我一般给32 * 2也就是两格内触发。太小容易点不到太大会隔着一条河对话。3. 把“麦田”做进数据层作物生长状态机与季节日历3.1 作物三件套种子、土壤地块、生长阶段的数据结构要让麦田主题真正立起来作物定义不能是一张图片而是要包含“种类、阶段时长、产出价格、季节偏好”的配置对象。我在设计课题方案时习惯先建一个纯数据描述文件画面代码后面再挂export type CropKindId wheat | corn | tomato; export type CropStageId seed | sprout | growing | mature; export interface CropDef { id: CropKindId; label: string; season: spring | summer | autumn | winter; stageSeconds: number[]; // 每个阶段的秒数 baseYield: number; buyPrice: number; sellPrice: number; } export const CROP_TABLE: RecordCropKindId, CropDef { wheat: { id: wheat, label: 小麦, season: spring, stageSeconds: [30, 45, 60, 60], baseYield: 3, buyPrice: 5, sellPrice: 12, }, corn: { id: corn, label: 玉米, season: summer, stageSeconds: [30, 60, 90, 90], baseYield: 2, buyPrice: 8, sellPrice: 25, }, };这块数据是后面所有逻辑的中心。stageSeconds数组长度代表作物有几个阶段四个阶段对应田里的小苗、长高、抽穗、成熟。为什么用秒而不用帧因为帧率在不同显示器上差异极大120Hz 的屏幕上作物长得比 60Hz 快一倍这种 bug 答辩时很难解释。秒是绝对时间跨设备稳定。3.2 用状态机推进生长而不是叠 if-else收到数据后服务端或者前端主循环里要有一个作物管理器专门负责推进状态。很多小组把这段逻辑写在player.update里每一帧遍历所有地块条件一多就成了“面条代码”。我的做法是单独抽一个CropManager类对外只暴露tick方法interface PlotData { cropId: CropKindId; plantedAt: number; stageIdx: number; growAccum: number; cellX: number; cellY: number; } class CropManager { private plots new Mapstring, PlotData(); tick(dt: number, seasonFactor: number, timeScale: number) { for (const plot of this.plots.values()) { const def CROP_TABLE[plot.cropId]; plot.growAccum dt * timeScale * seasonFactor; const stageLimit def.stageSeconds[plot.stageIdx]; if (plot.growAccum stageLimit) { plot.growAccum - stageLimit; if (plot.stageIdx def.stageSeconds.length - 1) { plot.stageIdx; this.onStageChanged?.({ plotId: plot.cellX , plot.cellY, stage: plot.stageIdx }); } } } } }逻辑说明tick依赖外部传入的seasonFactor和timeScale前者由季节决定后者用来做演示加速。比如调试时把timeScale调成 10一季作物 3 分钟就能跑完不用守着屏幕等。growAccum累加的是“有效生长时间”季节不对就表现为因子变小甚至为 0作物的内部时钟不依靠不断累加的现实时间所以切季节不会瞬间涨满。参数说明seasonFactor我常用的数值是 春天 1.0、夏天 1.2、秋天 0.9、冬天 0.0。冬天不是“负增长”是停止作物会保持当前阶段不变。timeScale默认 1.0调试面板里用滑块改成 5 到 20 都行注意这个值不要放进存档否则玩家读档后游戏速度对不上。3.3 季节日历的挂接方式用真实时间驱动事件麦田物语里“季节”不只是背景颜色它必须推动作物规则和任务刷新。我在项目里会做一个极简的日历对象内部用毫秒累加const DAY_MS 60_000; // 1 分钟 1 天方便演示 const DAYS_PER_SEASON 28; class GameCalendar { private totalMs 0; private currentSeason: SeasonId spring; private lastDay 1; update(deltaMs: number) { this.totalMs deltaMs; const day this.currentDay(); if (day ! this.lastDay) { this.lastDay day; this.onDayChanged?.({ day, season: this.currentSeason }); } const seasonIndex Math.floor((this.totalMs / (DAY_MS * DAYS_PER_SEASON))) % 4; this.currentSeason [spring, summer, autumn, winter][seasonIndex] as SeasonId; } currentDay() { return Math.floor(this.totalMs / DAY_MS) % DAYS_PER_SEASON 1; } }逻辑说明日历只报数不直接改作物。外部监听onDayChanged在事件回调里决定是否触发“换季冻结作物”或“刷新 NPC 任务”。这样做的好处是作物管理器、任务系统、UI 各自订阅事件互不引用。参数说明60_000是 1 分钟一天28 天一个季节四个季节演示完大约不到 2 小时。如果答辩只有 10 分钟把DAY_MS改成15_00015 秒一天28 天一个季度刚好 7 分钟跑完。课程设计里这个参数最好做成常量放在配置文件里不要散落在代码里。4. 课程设计要能答辩NPC 交互与任务系统的轻量设计4.1 对话与好感度组件的最小设计NPC 系统在“麦田物语”题目里属于加分项但如果每个 NPC 写一套独立逻辑后期会崩。我建议把每个角色做成一个数据对象加一个渲染表现类。interface NpcProfile { id: string; name: string; affection: number; homeX: number; homeY: number; favoriteGift: CropKindId; } const NPC_LIST: NpcProfile[] [ { id: alice, name: A同学, affection: 0, homeX: 5, homeY: 3, favoriteGift: wheat }, { id: bob, name: B同学, affection: 10, homeX: 8, homeY: 6, favoriteGift: corn }, ];好感度规则我习惯做得极简每次对话 1送礼物的作物如果匹配favoriteGift8否则 2。数值阈值分三档0 到 10 是“普通”10 到 20 是“友好”20 以上是“信任”。每档对应不同的对话文本池。课程设计答辩时老师最常追问的就是“好感度怎么影响游戏循环”这个三档就能答得清楚。交互范围判定要在玩家移动后实时检查不需要每帧遍历全部 NPC。我通常只检查离玩家最近的三个距离排序后取最近const DIST Phaser.Math.Distance.Between; let nearest: NpcProfile | null null; let nearestDist 64; for (const npc of NPC_LIST) { const d DIST(player.x, player.y, npc.homeX * TILE, npc.homeY * TILE); if (d nearestDist) { nearestDist d; nearest npc; } }逻辑说明nearestDist初始设为 64即两格距离超过这个值就认为不在交互范围内。每次按 E 键时重新取一次最近对象这样玩家永远只会和一个 NPC 对话不会出现两个对话框同时弹出的冲突。4.2 任务模板与里程碑奖励如何设计才不臃肿任务系统最忌讳把每个任务写成独立函数比如“任务一完成小麦种植”“任务二收获支付”。一旦任务数量超过十个函数数量爆炸改需求要动十几个地方。正确做法是先定义任务结构体再用谓词函数做判定interface QuestDef { id: string; title: string; desc: string; isCompleted: (state: GameState) boolean; reward: { gold: number; item?: CropKindId }; } const QUESTS: QuestDef[] [ { id: first_plant, title: 春播开始, desc: 种下第一颗小麦种子, isCompleted: (state) state.plantedCount 1, reward: { gold: 50 }, }, { id: first_harvest, title: 金色的麦田, desc: 收获 5 个小麦, isCompleted: (state) state.harvestedWheat 5, reward: { gold: 200, item: corn }, }, ];逻辑说明每个任务只依赖一个state对象。这个GameState由全局管理器统一维护里面存plantedCount、harvestedWheat、currentSeason等变量。系统每帧检测当前正在进行的任务只要isCompleted返回 true就发放奖励并把它从队列里移出。参数说明奖励数值要卡住经济曲线。我的做法是让开局任务奖励刚好够买第二批种子比如第一个任务给 50 金币买两颗小麦种子正好花掉 40剩下 10 块做流动资金。经济崩盘是经营类课程设计答辩时的高频雷点老师一眼就能看出数值没有测算过。下表给出一套自洽的参考数值作物种子价格售价全周期秒数单块地利润小麦1512/个量产3195 秒21玉米2025/个量产2270 秒30番茄2518/个量产4300 秒47这套参数中小麦单产高但单价低适合开局回本玉米和番茄需要更长的生长时间收益高一截形成“风险越高收益越高”的基础循环。同一批作物的数值保持这样有梯度答辩时把这张表贴在演示文稿里计算逻辑一目了然。5. 麦田物语开发的 5 个高频坑位排查5.1 作物浇了水不生长进调试器一看数值纹丝不动现象浇水动画正常播放水槽数值也减了但小麦一直停留在育苗阶段。查了半天发现是CropManager.tick里的dt没有乘以timeScale或者乘了但timeScale在 UI 上被无意设成 0。原因调试面板的时间倍率滑块挂到了存档的监听器上读档时时间倍率被持久化的旧值覆盖另一个常见原因是我见过的小组用帧数frame来推进但帧率不稳定导致生长时快时慢。解决把时间推进统一收敛到dt * timeScale * seasonFactor并且倍率变化时打印日志确认数值。时间倍率不要和存档数据绑定只作为运行时调试参数。5.2 秋冬季节一切季节地图种下去的作物突然“蒸发”现象从秋季切换到冬季农田里所有作物一夜之间消失数据表里还能查到cropId但画面上没有。原因渲染层在场景切换时执行了this.children.removeAll()这个调用会把场景里所有游戏对象移出显示列表包括作物精灵。数据层认为作物还在渲染层却已经没有对应对象了之后每次更新都找不到精灵可更新。解决作物精灵不要裸挂在场景根节点上放进一个专用的cropLayer容器。换季时只清空cropLayer再根据数据层重新创建精灵。容器隔离是 Phaser 项目里最常见的修复手段而且对后续加天气特效也有帮助。5.3 NPC 对话弹窗出现后玩家还能走动还能再按 E 重复触发现象对话框只是普通图片玩家按住方向键角色在弹窗后面继续移动再按一次 E 会再叠加一个对话框弹窗层数越叠越多。原因没有统一的输入锁。我只给键盘绑定了一个按键事件但没在弹窗打开时把这个监听暂停。Phaser 的键盘监听是全局的不会因为 UI 显示就自动屏蔽。解决在 Scene 上维护一个inputLockCount弹窗打开时加一关闭时减一。每个按键监听回调里先检查这个计数大于 0 就return。手动检查比封装一层 UI 管理器省事得多不容易引入复杂的事件派发。5.4 玩家贴边走时画面抖动像素边缘有“碎碎”的毛边现象相机启动startFollow之后玩家在地图边缘移动画面整体颤得很明显地块接缝像锯齿。原因Phaser 默认的摄像机跟随会把坐标落在小数位上导致纹理采样在整数像素和半像素之间来回切换。加上antialias: false后毛边不是纹理问题是采样位置抖动。解决在 Game 配置里把roundPixels开起来或者直接在 camera 上设setRoundPixels(true)。另一个关联参数是zoom如果缩放倍数不是整数比如 1.5抖动概率更大优先把 zoom 调成整数比如 2 倍。这个坑我踩过一次最后是逐行对比 camera transform 才定位到。5.5 存档读取后季节对了但任务进度全丢现象localStorage 里能读到金币和物品但任务列表重置了已经完成的任务又出现在任务栏。原因任务完成状态存在单独一个对象里而存档写入只序列化了GameState里的部分字段漏掉了completedQuests数组。最常见的情况是任务完成时只改了内存变量没有同步到存档对象的字段。解决把存档对象的结构固定下来每次完成任务的回调里同时改写存档引用。我在项目里会做一个中间函数saveGame()它内部从全局状态里取所有字段并一次性写入调用的地方不允许自己操作 localStorage。这样漏字段的问题从根本上消失排查时只需要检查一个函数。6. 把项目从交作业变成作品存档、插桩验证与答辩演示技巧课程设计做到能玩通常不难难的是把“能玩”和“能讲清楚为什么这样设计”对齐。我最后这一步建议做三件事可靠存档、核心逻辑自动化验证、答辩演示加速器。存档格式只要一个档案版本号和一个游戏状态对象就够了interface SaveData { version: 1; savedAt: number; state: GameState; } function saveGame(state: GameState) { const payload: SaveData { version: 1, savedAt: Date.now(), state }; localStorage.setItem(mian-tian-save, JSON.stringify(payload)); }版本号是后悔药。课程设计开发周期短但状态结构很可能改好几次。没版本号时写错了就读不回档连为什么挂都查不到。用version字段后即使数据结构改名也可以写一段迁移函数把旧档转成新档。第二件事是给CropManager写一个独立于 Phaser 的纯逻辑测试。把CropManager抽成不依赖 Phaser 的 TypeScript 类这样 Node 环境下就能跑断言。我用过最简单的方案是在package.json里加一个test脚本调用tsx执行npx tsx src/core/cropManager.test.ts测试代码核心就是把timeScale调成 1seasonFactor调成 1推进固定秒数后断言阶段升级是否符合预期。这个测试的价值在于答辩前改任何代码只要跑一遍测试就知道作物生长有没有被误伤。我负责的课题小组里A 同学就是靠这条测试在答辩前 20 分钟拦下了一个季节因子相乘顺序被改错的致命 bug。第三件事是演示加速器。不要把倍率藏在代码常量里做一个全局键盘监听按 F2 把timeScale从 1 切成 10按 F3 切成 60再在屏幕角落显示当前倍率和季节名。这样演示到秋收任务时一键快进不用让老师盯着静止画面等作物长大。这些年我带的课程设计里能评上优秀的未必是美术最华丽的但一定是逻辑最经得起追问的。那些项目都有一个共同习惯先写一个纯逻辑模块再把画面挂上去。希望你也能把屏幕上的麦田做成一个老师问不倒的活系统。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

JVM Full GC频繁导致接口超时?一次完整的调优实战复盘

JVM Full GC频繁导致接口超时?一次完整的调优实战复盘

那是一个典型得不能再典型的周四下午。我刚准备合上电脑去茶水间接水,监控大屏上一条告警弹了出来:某核心服务的FGC(Full GC)频率突然从每几小时一次变成了每两分钟一次,接口平均响应时间从50ms飙到了1200ms&#xff0…

2026/10/10 6:31:56 阅读更多 →
渗透测试面试题精讲:从信息收集到内网渗透的攻击链思维

渗透测试面试题精讲:从信息收集到内网渗透的攻击链思维

上个月面试一位有三年工作经验的候选人,简历写得密密麻麻。我问他:“拿到一个只给你域名的授权目标,你会按什么顺序做信息收集,每一步想拿到什么结果?”他答得比较散,子域名、端口、指纹这些词都蹦出来了&a…

2026/10/10 6:31:56 阅读更多 →
VS Code前端插件实用指南:围绕工作流选型与配置

VS Code前端插件实用指南:围绕工作流选型与配置

1. 先把话说清楚:前端开发到底需要插件解决什么我用 VS Code 写前端项目已经有几年时间了,期间换过好几台电脑,也带着不同水平的同事一起做项目。每次有人问“有没有推荐的前端插件”,我都会先反问一句:你现在的痛点到…

2026/10/10 6:31:56 阅读更多 →

最新新闻

从环境到上线:Vue项目实战与踩坑全指南

从环境到上线:Vue项目实战与踩坑全指南

干 Vue 这些年,见得最多的就是新手把环境配到一半就卡住,然后跑来问“为什么我 npm run dev 直接报错”“为什么 devtools 不显示”。其实 Vue 本身不难,难的是把生态里的一堆配套工具摸清楚,再踩过几个经典的坑。这篇文章我就按实…

2026/10/11 8:52:41 阅读更多 →
弹性扩容实战:流量洪峰下如何弹性伸缩与避坑

弹性扩容实战:流量洪峰下如何弹性伸缩与避坑

“老板,客户那边流量爆了,凌晨三点服务器扛不住,赶紧想想办法!”做云渠道这些年,这种电话我接过不止一次。所谓“业务流量洪峰”从来不是某个固定时刻准时到来,它可能来自一次大促、一场直播、一个热点事件…

2026/10/11 8:52:41 阅读更多 →
天地图403排查实战:Vue3部署与Nginx反代避坑指南

天地图403排查实战:Vue3部署与Nginx反代避坑指南

上周把vue3项目部署到线上服务器,第二天同事就找过来:“地图白屏了,控制台一片403。”我看了一眼浏览器Network面板,天地图的瓦片请求齐刷刷返回403 Forbidden。这个场景我太熟了,本地开发时地图还好好的,一…

2026/10/11 8:52:41 阅读更多 →
OpenClaw开源重制引擎:让经典老游戏在现代系统上重生

OpenClaw开源重制引擎:让经典老游戏在现代系统上重生

作为一个从小在街机厅和奔腾MMX电脑前泡大的老玩家,我太清楚那些经典老游戏如今有多难伺候了。系统不兼容、分辨率撕裂、画面抖得像中风,更别提把手里的手柄映射到一堆莫名其妙DirectDraw错误上。今天要聊的OpenClaw(圈子里的朋友们喜欢叫它“…

2026/10/11 8:52:41 阅读更多 →
Unity C#进阶:从缓存、对象池到事件驱动的性能优化实战

Unity C#进阶:从缓存、对象池到事件驱动的性能优化实战

在 Unity 项目里,“代码能跑”和“代码能撑住项目”是两回事。很多人写了一阵子 C# 脚本,功能都做出来了,但项目一到真机就发热、掉帧,或者场景稍微复杂一点就卡顿。这时候回头看代码,往往能找到一堆Update里反复GetCo…

2026/10/11 8:52:41 阅读更多 →
2026年实时数据同步工具怎么选?GoldenGate、Striim、SeaTunnel、FineDataLink 5.0横评

2026年实时数据同步工具怎么选?GoldenGate、Striim、SeaTunnel、FineDataLink 5.0横评

实时数据同步,是这两年企业数据建设里绕不开的一环。业务对实时性的要求越来越高——库存要实时、订单要实时、设备状态要实时,T1 的离线数仓在很多场景下已经不够用了。于是选型的问题摆在了面前:GoldenGate、Striim、SeaTunnel、FineDataLi…

2026/10/11 8:51:41 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →