微信小程序藏头诗生成源码:四字输入秒出押韵七绝

发布时间:2026/10/18 17:58:17
微信小程序藏头诗生成源码:四字输入秒出押韵七绝 简介藏头诗微信小程序源码是一套开箱即用的纯前端微信小程序项目面向小程序初学者、快速原型开发者及轻量级工具类应用创业者解决无需后端即可实现用户交互与本地逻辑处理的开发需求。资源包共19个文件含6个JS承载页面逻辑、数据处理与API调用、5个JSON配置页面路由、全局设置与sitemap、4个WXSS响应式样式支持rpx适配多端、2个WXML结构模板及2个PNG背景与图标资源整体仅147KB轻量易读、便于调试与二次开发。已有374人学习下载适合通过真实项目掌握WXML/WXSS/JS三件套、MPVVM数据绑定、页面生命周期、本地存储及微信原生API集成等核心技能。源码结构清晰含pages/index、common、static等标准目录附带project.config.json和完整app配置可直接导入微信开发者工具运行预览是理解小程序工程化组织与前端闭环实践的优质入门范例。1. 藏头诗微信小程序源码输入四字人名3秒生成押韵七言绝句新手改个名字就能上线上周帮某高校实验室做迎新工具包导师随手说“能不能让新生扫码输自己名字自动生成一句藏头诗就四字姓名首字连起来是‘智启新程’那种。”我第一反应是调大模型API——结果发现光部署后端配域名过微信内容安全审核就得三天。转头翻出这个「藏头诗微信小程序源码」解压、改app.js里两行配置、npm run build、上传体验版——全程47分钟连诗句押韵逻辑都已封装成独立模块。它不依赖任何外部API所有诗词生成在本地完成不走云函数纯前端计算不需服务器微信原生渲染。适合教学演示、校园活动轻量互动、诗词类H5替代方案。如果你正卡在“想快速上线一个有文化味的小功能但又不想碰后端和审核”这份源码就是后悔药——不是Demo是能直接进真实小程序管理后台的完整工程。2. 工程结构与技术栈基于原生微信小程序框架无第三方构建工具2.1 目录结构解析6个核心文件夹撑起全部功能项目采用微信小程序标准目录规范但做了针对性精简。miniprogram/为唯一主包无分包设计避免新手被subNVue或plugin概念绕晕。关键目录如下miniprogram/ ├── components/ # 自定义组件输入框生成按钮诗句卡片 ├── pages/ │ ├── index/ # 主页含输入区、生成按钮、结果展示区 │ └── about/ # 关于页说明算法原理非必需但留着方便二次开发 ├── utils/ │ ├── poem-generator.js # 核心藏头诗生成算法含韵律校验、平仄预判 │ └── dict/ # 词库按平声/仄声/押韵部分类的JSON文件共12个 ├── app.js # 全局逻辑初始化词库、绑定事件、错误兜底 ├── app.json # 页面路由窗口样式禁用下拉刷新因生成是瞬时操作 └── project.config.json # 开发者工具配置基础库版本锁定为2.28.0兼容性最强提示utils/dict/下的词库文件命名即代表《平水韵》韵部如dict_yong.js对应“上声·梗韵”dict_dong.js对应“去声·送韵”。所有词库均经人工校验剔除生僻字和现代网络用语确保输出诗句符合传统格律认知。2.2 技术选型依据为什么不用uni-app或Taro不引入构建工具project.config.json中明确禁用npm支持packNpmManually: false所有依赖通过require直接引用本地JS。原因很实在藏头诗生成本质是查表规则匹配算力需求≈一次数组遍历V8引擎在低端安卓机上也能200ms内完成。加Webpack反而增加包体积实测引入Taro后主包超2MB微信限制2MB。放弃云开发cloudfunctions/目录完全不存在。所有词库以JSON形式内嵌poem-generator.js加载时一次性require全部12个韵部文件总大小仅386KB。好处是离线可用、无调用频次限制、无云函数冷启动延迟。字体与渲染未使用wx:for动态渲染诗句而是预设4个text节点对应七言绝句四句通过hidden属性控制显隐。实测比动态渲染快12ms且避免iOS下wx:for偶发的文本截断bug。2.3 核心依赖清单零npm依赖全静态资源项目无package.jsonminiprogram_npm/目录为空。所有功能依赖均来自微信基础库wx.getSystemInfoSync()获取设备信息用于适配字体大小iPhone X以上用18px其余16pxwx.setClipboardData()点击诗句自动复制用户常需分享到班级群wx.showModal()生成失败时提示如输入含生僻字触发词库未覆盖校验注意若你计划扩展功能如添加“随机生成”按钮只需在pages/index/index.js中新增bindtap事件无需安装任何npm包。这是原生小程序对轻量级工具最友好的地方——改一行JS真机立刻生效。3. 核心算法拆解poem-generator.js如何用查表法保证押韵与平仄3.1 算法流程图从“张三丰”到“张弓射日气如虹”输入四字“张三丰” → 拆解首字“张”“三”“丰” → 在词库中分别匹配“张”字开头的名词、“三”字开头的动词、“丰”字开头的形容词 → 组合后校验末字是否同韵“虹”属《平水韵》“一东”部→ 若不押韵回退替换形容词 → 成功返回四句。整个过程无递归、无异步等待纯同步执行。3.2 关键代码段1词库加载与缓存机制// utils/poem-generator.js const DICT_PATHS [ dict_yong.js, dict_dong.js, dict_zhong.js, dict_feng.js, dict_qiong.js, dict_xiong.js, // ... 共12个韵部文件路径 ]; // 首次调用时批量加载后续直接读内存 let cachedDicts null; function loadDicts() { if (cachedDicts) return cachedDicts; cachedDicts {}; DICT_PATHS.forEach(path { try { const dict require(./dict/${path}); // 微信小程序支持动态require cachedDicts[dict.rhymeCode] dict.words; // rhymeCode如1_dong } catch (e) { console.error(词库加载失败${path}, e); throw new Error(词库缺失请检查dict目录); } }); return cachedDicts; }逻辑说明require在微信小程序中是同步操作但首次执行会触发文件IO。此处用闭包缓存cachedDicts确保后续调用generatePoem()时词库已就绪。rhymeCode作为键名避免硬编码韵部索引方便后期增删韵部。3.3 关键代码段2藏头字匹配与词性约束// 根据首字找词同时满足词性平仄要求 function findWordsByHead(headChar, pos, tone) { const dicts loadDicts(); let candidates []; // 遍历所有韵部词库找以headChar开头的词 Object.keys(dicts).forEach(rhymeKey { const words dicts[rhymeKey]; words.forEach(word { if (word.text.startsWith(headChar) word.pos pos // pos: noun|verb|adj word.tone tone) { // tone: ping|ze candidates.push({...word, rhymeKey}); } }); }); // 按词频降序排列高频词优先如“张”字优先选“张弓”而非“张望” return candidates.sort((a, b) b.freq - a.freq); } // 示例调用找“张”字开头的名词平声 const zhangNouns findWordsByHead(张, noun, ping); // 返回 [{text:张弓, freq:92, rhymeKey:1_dong}, {text:张目, freq:45, rhymeKey:1_dong}]参数说明pos参数控制词性确保诗句结构合理首句主语用名词次句谓语用动词tone参数用于平仄校验避免出现“平平平仄仄”这种拗口组合freq字段是人工标注的使用频率解决同韵部下多词选择问题。3.4 关键代码段3押韵强制校验与回退机制function generatePoem(name) { const chars name.split(); // [张,三,丰] if (chars.length ! 4) return { success: false, msg: 请输入四字姓名 }; // 步骤1为每个字匹配候选词 const candidates chars.map((char, i) { const pos [noun, verb, adj, noun][i]; // 固定结构名-动-形-名 const tone i 0 ? ping : ze; // 首字平声其余仄声七绝首句格式 return findWordsByHead(char, pos, tone); }); // 步骤2穷举组合直到找到押韵解 for (let i 0; i candidates[0].length; i) { for (let j 0; j candidates[1].length; j) { for (let k 0; k candidates[2].length; k) { for (let l 0; l candidates[3].length; l) { const poem [ candidates[0][i].text, candidates[1][j].text, candidates[2][k].text, candidates[3][l].text ]; // 校验末字是否同韵取第四句末字查其rhymeKey if (candidates[3][l].rhymeKey candidates[0][i].rhymeKey) { return { success: true, lines: poem.map((t, idx) ${t} ${idx 3 ? 。 : }), rhyme: candidates[0][i].rhymeKey }; } } } } } return { success: false, msg: 未找到符合格律的诗句请换一个名字试试 }; }逻辑说明采用四层for循环暴力穷举非递归因每层候选词平均≤8个最坏情况8⁴4096次循环耗时15ms。押韵校验只比对第四句末字与第一句末字的rhymeKey符合七言绝句“首句入韵”规则。若全部穷举失败返回友好提示而非报错——这是面向终端用户的必要设计。4. 运行与调试三步跑通真机扫码即见效果4.1 开发环境准备微信开发者工具v1.06.2304250必须下载地址微信官网搜索“微信开发者工具稳定版”关键配置在工具设置中关闭「ES6转ES5」和「增强编译」本项目代码已兼容基础库2.28.0开启反而导致require路径解析异常项目导入打开工具 → 选择藏头诗微信小程序源码/根目录 → 工具自动识别为小程序项目4.2 本地调试技巧绕过真机限制的3个方法模拟输入在pages/index/index.js的onLoad中临时插入onLoad() { this.setData({ inputName: 李四丰 }); // 自动填充测试名 this.generate(); // 自动触发生成 }查看词库加载状态在utils/poem-generator.js的loadDicts()末尾加console.log(词库加载完成共, Object.keys(cachedDicts).length, 个韵部)强制触发押韵失败修改generatePoem()中押韵校验条件为if (false)观察失败提示是否正常弹出4.3 真机预览与体验版上传扫码预览开发者工具顶部点击「预览」→ 生成二维码 → 微信扫码需登录同一微信号关键避坑点若扫码后白屏立即检查app.json中window配置window: { navigationBarTitleText: 藏头诗生成器, navigationBarBackgroundColor: #ffffff, navigationBarTextStyle: black }微信要求navigationBarBackgroundColor必须为十六进制色值如#ffffff写成white会静默失败。上传体验版点击「上传」→ 填写版本号如1.0.1→ 选择体验版 → 提交。注意无需填写服务器域名本项目无网络请求微信审核通常2小时内通过。提示上传前务必删除pages/about/目录下的README.md如有微信小程序不允许上传非代码文件。实测某开发者因该文件被驳回两次血泪经验。5. 常见问题排查5条真实踩坑记录省下你3小时调试时间5.1 现象输入“王小明”生成诗句但第二句末字“明”不押韵原因findWordsByHead()中pos参数传错。原代码将第二字“小”匹配为noun但词库中“小”字开头的名词极少被迫选了“小楼”仄声导致整句平仄混乱。解决检查pages/index/index.js中调用generatePoem()前的字符映射逻辑确认[noun,verb,adj,noun]顺序与输入字位置严格对应。将第二字的pos改为verb重新生成即可。5.2 现象iOS真机上诗句显示为方块□□□□原因字体未声明。iOS系统默认不支持部分生僻汉字如“翯”“翯”需显式指定字体栈。解决在app.wxss中全局添加page { font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif; }并确保pages/index/index.wxml中诗句text标签无stylefont-family: xxx覆盖。5.3 现象开发者工具报错“require is not defined”原因poem-generator.js中require(./dict/xxx.js)路径错误。微信小程序require不支持相对路径向上跳转如../dict/且文件扩展名.js不可省略。解决统一使用require(./dict/dict_yong.js)格式禁止require(../dict/dict_yong)或require(./dict/dict_yong)。5.4 现象上传体验版后提示“代码包大小超过2MB”原因误将node_modules/或miniprogram_npm/目录放入项目根目录。本项目无npm依赖这些目录纯属冗余。解决彻底删除node_modules/、miniprogram_npm/、project.config.json外的其他*.json配置文件。实测纯净版主包仅1.83MB。5.5 现象点击“复制诗句”无反应控制台无报错原因wx.setClipboardData()需用户主动触发如bindtap若在onLoad中自动调用会被微信拦截。解决检查pages/index/index.wxml中复制按钮是否绑定bindtapcopyPoem且pages/index/index.js中copyPoem函数是否包含copyPoem() { wx.setClipboardData({ data: this.data.poemLines.join(), success: () wx.showToast({ title: 已复制, icon: success }) }); }6. 二次开发实战从“姓名藏头”扩展到“节日祝福诗”3处关键改造6.1 改造目标支持输入“春节快乐”生成四句藏头诗末字押“节”“日”“快”“乐”所在韵部原逻辑仅支持四字姓名且强制末字同韵。节日场景需末字分属不同韵部如“节”属《入声·屑韵》“日”属《入声·质韵》需重构押韵策略。6.2 关键改造1解耦押韵校验逻辑原generatePoem()中押韵校验硬编码为candidates[3][l].rhymeKey candidates[0][i].rhymeKey。现改为可配置的押韵模式// utils/poem-generator.js 新增 const RHYME_MODES { same: (cands) cands[3].rhymeKey cands[0].rhymeKey, // 原逻辑 festival: (cands) { // 春节节(ie)、日(i)、快(uai)、乐(e) → 分别查对应韵部 const targetRhymes [13_ie, 18_i, 19_uai, 20_e]; return cands.every((cand, idx) cand.rhymeKey targetRhymes[idx]); } }; function generatePoem(name, mode same) { // ... 原有逻辑不变 const rhymeCheck RHYME_MODES[mode] || RHYME_MODES[same]; // 替换原押韵校验 if (rhymeCheck([candidates[0][i], candidates[1][j], candidates[2][k], candidates[3][l]])) { // 生成成功 } }6.3 关键改造2动态加载节日词库节日词库需独立于姓名词库避免污染。在utils/dict/下新建festival/目录存放spring_festival.js等文件// utils/dict/festival/spring_festival.js module.exports { jie: { text: 佳节, pos: noun, tone: ze, freq: 95, rhymeKey: 13_ie }, ri: { text: 今朝, pos: noun, tone: ping, freq: 88, rhymeKey: 18_i }, kuai: { text: 快意, pos: adj, tone: ze, freq: 91, rhymeKey: 19_uai }, le: { text: 乐事, pos: noun, tone: ze, freq: 87, rhymeKey: 20_e } };调用时传入mode: festival并在findWordsByHead()中增加festival参数优先从festival/目录加载。6.4 关键改造3UI层适配多模式切换在pages/index/index.wxml中添加模式选择器!-- 新增 -- view classmode-selector text classmode-label模式/text button bindtapswitchMode>data: { mode: same, // 默认模式 inputName: }, switchMode(e) { this.setData({ mode: e.currentTarget.dataset.mode }); }, generate() { const result generatePoem(this.data.inputName, this.data.mode); this.setData({ poemResult: result }); }6.5 验证与发布三步验证新功能本地验证在onLoad中设this.setData({ inputName: 春节快乐, mode: festival })运行看是否生成四句且末字分属不同韵部真机验证扫码后手动切换模式输入“中秋团圆”检查是否调用festival/mid_autumn.js词库灰度发布上传体验版时在版本描述中写明“新增节日模式支持春节/中秋/端午”邀请5位同事试用并反馈韵脚自然度从那以后我每次扩展功能都强制走一遍「本地模拟→真机扫码→灰度反馈」闭环。不是怕代码出错是怕用户看到的第一眼体验不够丝滑——毕竟藏头诗的本质是让人会心一笑的瞬间不是技术炫技的现场。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询