乐于分享
好东西不私藏

我用AI作为工具做了两个小游戏,附保姆级技术分享

我用AI作为工具做了两个小游戏,附保姆级技术分享

昨天突发奇想,花了整整一天时间,从零到一完成了两个小工具,没有复杂的框架,没有高额的成本,全程自己动手,顺利上线。今天就把整个开发过程、思路和踩坑经验整理出来,给想动手做小工具的朋友避坑,哪怕你是新手,也能跟着学、跟着做。
说实话,开发过程比我预想中顺利太多,从早上规划需求、选型技术,到下午完成开发、部署上线,全程没遇到太大的坑。趁热打铁,把这份干货分享给大家,希望能点燃你动手的热情——技术不用多厉害,敢动手、能落地,就是最棒的开始。

一、算命小游戏:用最简单的方式,做一个“玄学”轻工具

1.1 需求来源:朋友的一句随口提议

这个小工具的想法,完全是偶然来的。朋友来家里玩,随口说了一句“能不能做个简单的算命工具,无聊时能玩一玩”,我转念一想,这个需求太合适做轻量级工具了——门槛低、容易传播,而且微信生态里,这类“玄学”小工具本来就很受欢迎。
最开始的第一版特别简单,就是输入姓名,点击测算,就能出结果。但玩了两次觉得太枯燥,于是加了联系方式展示位(毕竟做工具,也希望能带来一点实际价值),简单优化后,体验就好了很多。

1.2 技术选型:拒绝复杂,纯前端就够了

很多朋友做工具时,第一反应就是“要不要用后端?要不要弄数据库?”,其实对于这类轻量级工具来说,完全没必要,纯前端就能搞定,还能省不少事。
我最终的选型特别简单,全程零成本:
前端:原生HTML + CSS + JavaScript,没有任何框架依赖,新手也能看懂、能修改
部署:GitHub Pages,完全免费,不用自己买服务器
域名:GitHub自带的免费子域名(hareclaw.github.io),不用额外花钱注册
这样选型的好处,懂的都懂:零成本、维护简单(改完代码直接推送,不用部署后端)、加载速度快(纯静态资源,打开几乎不耗时),特别适合独立开发者做小工具试水。

1.3 核心功能实现:重点做好3个交互细节

这个工具的界面不算复杂,核心是做好交互,让用户用着舒服,不觉得敷衍。分享几个关键的实现代码(新手可直接复制套用),重点看细节:
1. 姓名输入和性别选择:最基础的功能,界面简洁,提示清晰,避免用户迷茫。
性别
姓名
2. 测算类型选中高亮:这是很多新手容易忽略的点——用户点击选择后,必须有明显的反馈,不然用户会不知道自己选没选上。
// 选中测算类型,添加高亮效果
const fortuneTypes = document.querySelectorAll(‘.fortune-type’);
fortuneTypes.forEach(type => {
type.addEventListener(‘click’, () => {
// 移除其他选项的高亮
document.querySelector(‘.fortune-type.active’)?.classList.remove(‘active’);
// 给当前选中的选项加高亮
type.classList.add(‘active’);
// 记录用户选择的测算类型
selectedType = type.dataset.type;
});
});
搭配简单的CSS,高亮效果更明显,视觉反馈更清晰:
.fortune-type {
padding: 10px 20px;
border: 2px solid#ddd;
border-radius: 8px;
cursor: pointer;
transition: all 0.2s;
}
.fortune-type.active {
border-color:#ff6600;
background: linear-gradient(135deg,#fff5eb,#ffe4cc);
box-shadow: 0 2px 8px rgba(255, 102, 0, 0.2);
}
3. 测算结果展示:要有仪式感,不敷衍:结果不能一闪而过,也不能太简陋,还要自然融入联系方式,不显得生硬广告。
// 展示测算结果,5秒后自动隐藏
function showResult(result) {
const resultBox = document.getElementById(‘result-box’);
// 结果内容,包含标题和详情,加上联系方式
resultBox.innerHTML = `
${result.title}
${result.content}
高端咨询:13691632004
高价收车,就找老李
`;
resultBox.style.display = ‘block’;
// 5秒后淡出隐藏,提升体验
setTimeout(() => {
resultBox.style.opacity = ‘0’;
setTimeout(() => {
resultBox.style.display = ‘none’;
resultBox.style.opacity = ‘1’;
}, 500);
}, 5000);
}

1.4 部署上线:3步搞定,全程免费

部署到GitHub Pages真的很简单,不用懂复杂的部署流程,3步就能搞定,全程免费,新手也能操作:

1. 本地创建仓库,提交代码

cd fortune
git init
git add .
git commit -m “Initial commit”

2. 去GitHub网页,创建一个同名仓库(fortune)

3. 关联远程仓库,推送代码,然后设置Pages

git remote add origin git@github.com:hareclaw/fortune.git
git push -u origin main

最后一步:GitHub仓库→Settings→Pages→Source选择main branch→保存

等待1-5分钟(不是即时生效),就能通过 https://hareclaw.github.io/fortune/ 访问你的工具了,是不是很简单?

二、儿童骰子闯关游戏:稍微复杂一点,但依旧轻量

2.1 项目背景:给小朋友做的“哄娃神器”

这个项目是临时加的。做算命工具的时候,朋友带孩子来家里,小朋友无聊闹腾,我就想着,不如做个简单的小游戏给孩子玩,既能哄娃,也能练手,一举两得。
没想到做出来的效果超出预期,小朋友玩了一下午,还一直喊着“再玩一局”,也算是意外的收获。

2.2 技术方案:不用游戏引擎,Canvas就够了

这个游戏比算命工具复杂一点,但我还是坚持“轻量”原则,没有用任何游戏引擎(比如Phaser),原因很简单:引擎太重,学习成本高,而且这类简单小游戏,用HTML5 Canvas就完全能搞定,还能保证加载速度。
最终技术选型:
渲染:HTML5 Canvas,负责游戏画面绘制
动画:原生requestAnimationFrame,实现流畅动画,不用额外引入插件
存储:localStorage,保存小朋友的游戏进度,下次打开还能继续玩
音效:Web Audio API,添加简单的背景音乐和掷骰子音效,提升游戏体验

2.3 核心功能:角色换装+地图闯关+进度保存

这个游戏的核心亮点,就是贴合小朋友的喜好,比如换装功能、彩虹地图、奖励系统,这些小细节,能让小朋友玩得更投入。
1. 游戏整体架构:很简单,分三个状态(菜单、游戏中、结果),循环渲染画面,新手也能看懂:
class Game {
constructor() {
this.canvas = document.getElementById(‘game-canvas’);
this.ctx = this.canvas.getContext(‘2d’);
this.state = ‘menu’; // 游戏状态:菜单/游戏中/结果
this.player = new Player(); // 玩家角色
this.map = new Map(30); // 30格彩虹地图
this.inventory = []; // 道具栏
}
// 开始游戏
start() {
this.state = ‘playing’;
this.loop(); // 启动游戏循环
}
// 游戏循环:更新状态+渲染画面
loop() {
this.update();
this.render();
requestAnimationFrame(() => this.loop());
}
}
2. 角色换装:小朋友的最爱:支持给角色换帽子、上衣、裤子、鞋子、背包,而且是“叠加”模式,不是替换——我问过小朋友,他们更喜欢“越多越好”的感觉,多戴一顶帽子、多背一个背包,都会觉得很开心,这个小细节真的很影响体验。
// 换装系统:支持装备叠加,不替换已有装备
const outfits = {
hat: null,      // 帽子
top: null,      // 上衣
bottom: null,   // 裤子/裙子
shoes: null,    // 鞋子
bag: null       // 背包
};
function equipItem(category, itemId) {
const item = allItems[category][itemId];
if (outfits[category]) {
// 已有装备,叠加显示
createOverlay(category, item);
} else {
// 没有装备,直接穿戴
outfits[category] = item;
renderOutfit(category, item);
}
// 保存换装进度,下次打开不丢失
saveProgress();
}
3. 地图与掷骰子逻辑:地图是30格的彩虹桥,每一格有不同的效果(普通格、加分格、陷阱格、前进格、终点格),掷骰子随机前进,增加趣味性:
// 地图格子配置:不同颜色,不同效果
const mapTiles = [
{ type: ‘normal’, color: ‘#ff6b6b‘ },  // 红色:普通格
{ type: ‘bonus’, color: ‘#ffd93d‘, stars: 2 },  // 黄色:加分格
{ type: ‘trap’, color: ‘#6bcb77‘, effect: ‘back’ },  // 绿色:陷阱格(退一格)
{ type: ‘special’, color: ‘#4d96ff‘, effect: ‘forward’ },  // 蓝色:前进格
{ type: ‘end’, color: ‘#9b59b6‘ }  // 紫色:终点
];
// 掷骰子逻辑
function rollDice() {
const dice = Math.floor(Math.random() * 6) + 1; // 1-6随机数
animateDice(dice); // 骰子动画,提升仪式感
// 1秒后更新玩家位置,处理格子效果
setTimeout(() => {
player.position += dice;
if (player.position >= 30) {
// 走到终点,通关
showVictory();
} else {
// 处理当前格子的效果(加分、退格、前进)
handleTileEffect(mapTiles[player.position]);
}
}, 1000);
}
4. 进度保存:localStorage实用技巧:小朋友玩游戏,最讨厌“重新开始”,所以加了进度保存功能,用localStorage就能实现,不用后端,简单又实用:
// 保存游戏进度
function saveProgress() {
const saveData = {
playerPosition: player.position, // 玩家位置
stars: player.stars, // 星星数量
coins: player.coins, // 金币数量
outfits: outfits // 已穿戴装备
};
// 存储到localStorage,转换成JSON格式
localStorage.setItem(‘kidsgame_save’, JSON.stringify(saveData));
}
// 加载游戏进度
function loadProgress() {
const data = localStorage.getItem(‘kidsgame_save’);
if (data) {
const save = JSON.parse(data);
// 恢复进度
player.position = save.playerPosition;
player.stars = save.stars;
player.coins = save.coins;
outfits = save.outfits;
}
}

三、开发一天,我总结的3个实用经验

这两个小项目,虽然简单,但让我收获很多,尤其是对于想动手做小工具的新手来说,这几点经验可能比代码更有用:

3.1 技术选型:适合的才是最好的,别陷入“技术焦虑”

很多新手做项目,总想着用最新的框架、最复杂的架构,觉得这样才“厉害”。但实际上,对于独立小工具来说,越简单越好。
分享我的经验:
单页面轻工具:纯前端HTML/CSS/JS完全够用,不用上Vue、React
需要简单数据存储:localStorage(前端)、LeanCloud(BaaS服务,免费额度够用)
需要后端逻辑:Cloudflare Workers,免费额度足够小项目使用,不用自己买服务器

3.2 用户体验:细节决定成败,别敷衍

这两个项目,能让用户愿意用、愿意分享,核心不是技术多厉害,而是细节做得好:
选中状态要明显:用户操作后,必须有反馈,不然会迷茫
结果展示要有仪式感:哪怕是简单的工具,也别太敷衍,比如算命结果的淡出效果、骰子的动画
加载要快:超过3秒,用户就会关掉页面,纯静态资源是最好的选择
要有保存机制:用户不希望每次打开都重新开始,localStorage就能解决

3.3 微信生态:轻工具的最佳传播场景

做这类小工具,最适合在微信里传播——一键转发、打开即用、不占手机内存,用户接受度很高。
所以在设计的时候,就要考虑微信分享场景,比如提前准备好分享封面图、标题、简介,让用户分享出去的时候,更有吸引力。

四、GitHub Pages部署踩坑记录(新手必看)

部署过程整体顺利,但有几个小坑,我踩过了,你们就不用再踩了:
1. 仓库名和访问地址的关系:如果仓库名是“username.github.io”,直接用这个地址访问;其他仓库名,访问地址就是“username.github.io/仓库名”(我的仓库名是fortune,所以地址是hareclaw.github.io/fortune/)。
2. 部署等待时间:不是提交代码就生效,通常需要1-5分钟,遇到404别慌,等一会儿再刷新。
3. 自定义域名:如果以后想用地自己的域名(比如xxx.com),GitHub Pages也支持,在仓库Settings里配置CNAME记录就行,很简单。

五、最后总结

一天时间,从零开始,完成了两个不同类型的小工具,总结一下核心信息,方便大家参考:

项目

复杂度

技术栈

部署方式

算命游戏

简单

HTML/CSS/JS

GitHub Pages

儿童骰子闯关

中等

HTML5 Canvas

GitHub Pages

其实做小工具,真的没有那么难,不用等“准备好”,不用怕技术不够,动手去做,遇到问题再解决,就是最快的成长方式。
最后,分享一下工具链接,大家可以去体验一下:
算命游戏:https://hareclaw.github.io/fortune/
GitHub仓库:https://github.com/hareclaw/fortune
如果你也有好玩的点子,欢迎在评论区交流~ 做技术分享,最重要的不是技术多厉害,而是敢于动手去实现的勇气。
有任何问题,也可以在评论区留言,我会尽量一一回复大家!
喜欢这篇分享的话,记得点赞、在看、转发,给我一点鼓励呀❤️