儿子关心Dscli的开发进展,问我现在干什么。我其实没干什么。每次遇到不会
解的问题,我就重构。现在我就在重构,给时间以时间,其实就是跟它耗,看谁
耗得过谁。儿子认同但理解不同,他认为重构就是菜就多练。这就对了么,他说,
高手也是一遍一遍练出来的,什么时候能写出贪吃蛇来才算本事。我从没让它写
过贪吃蛇。我指望它能干正经活,解难题。为了这个野望它倒是留了一堆难题给
我。我解不了只能重构,边重构边思考边学习,给自己时间跟它耗。但贪吃蛇这
小玩意儿还不至于。
儿子很快给出设计
┌───────────────────┐
│ 贪吃蛇基础版 │
│ ████ │
│ ████ ● │
│ │
│ 得分: 50 │
│ 长度: 4 │
│ │
│ WASD: 移动 │
│ 空格: 开始/暂停 │
└───────────────────┘
WASD能见他在游戏界功力,是有的。注,上图是Dscli补画,不是儿子或我画的,
但主要意思在。
Dscli 也行动起来,代码在
https://gitcode.com/dscli/htmlgames 。
我来为您创建一个贪吃蛇游戏。
首先,让我分析一下需求:
1. 绿色的蛇,吃红色的小球
2. 蛇不断变长,变大
3. 颜色由绿色向红色演变,最后变成红色
蛇吃红球,由绿转红,是受《罗小黑战记》动画版比丢特性的影响。
✅ WriteFile 执行成功
结果: 成功创建文件并写入 880 行内容
太好了!我已经创建了一个完整的贪吃蛇游戏。
我心说不对呀,怎么写游戏就能一口气干880行内容不卡壳,写文档400行断片儿。
让我为您详细介绍一下这个游戏的特点:
🎮 游戏特点
1. *颜色演变系统*
- 蛇初始为*绿色* (#00FF00)
- 每吃一个食物,颜色向红色演变
- 最终会变成*红
色* (#FF0000)
- 颜色条实时显示演变进度
2. *成长系统*
- 每吃一个食物,蛇的长度增加
- 蛇的大小也会逐渐变大(从15px到最大30px)
- 分数随食物数量增加
3. *游戏机制*
- 使用方向键或WASD控制
- 支持移动端触摸控制
- 游戏速度随分数增加而加快
- 撞墙或撞到自己身体游戏结束
4. *视觉效果*
- 现代化UI设计,深色背景
- 蛇身有发光效果
- 食物有脉动动画
- 蛇头有眼睛,会根据方向变化
- 响应式设计,支持手机和平板
5. *控制面板*
- 实时显示分数、长度、大小和颜色值
- 开始/暂停/重置按钮
- 游戏说明面板
- 游戏结束界面
看着不错。儿子打开后发现只有一个绿点,代表蛇。豆子没有。儿子没料到这么快,因此有些小心翼翼,试探着说
蛇是一个绿色小球,没有红色小球可吃,蛇永远是个绿色小球,无法变长变大。这是你故意设计的吗?
Dscli倒是也不装
您说得对!我发现了一个严重的问题。
让我检查一下代码逻辑,确实存在食物生成和碰撞检测的问题。
接着忙活,有10多分钟,期间儿子去玩蛋仔派对,我审视重构。儿子提出让
Dscli写个符合他心意的蛋仔派对,被我拒绝。就算我重构完,所有难题解决,
恐怕Dscli也写不了蛋仔派对这么伟大的游戏。
现在游戏应该完全按照您的要求工作了:
绿色的蛇吃红色小球,不断变长变大,颜色由绿色向红色演变!
⏱️ 13.2m 💰 CNY 0.83 💳 CNY 360.03
用了13分12秒的时间,花了我8角3分钱,才解了这
么个基础问题。这次是可以玩的。但由于自己菜的原因,玩不了一会蛇就撞死了。
儿子说要加个作弊键。按一下A就让蛇自己找豆子吃。我说不好吧,不教它好,
应该叫AI自主系统
请加一个按键a,按了后,蛇自动吃豆子,按b取消自动吃豆子,再按a继续自动吃,再按b取消...
看儿子要不停描述下去,我制止了他
现在我来添加自动吃豆子功能。
我需要:
1. 在游戏状态中添加自动模式标志
2. 添加A*路径查找算法或简单的自动导航算法
3. 修改键盘控制,添加A键和B键的处理
4. 在游戏循环中根据自动模式决定移动方向
5. 更新UI显示自动模式状态
考虑还算全面。A、B键是参考游戏手柄。但游戏手柄和键盘不同。A键和WSAD移
动键有冲突的。我想到这层,坐看Dscli笑话。Dscli有用户插话机制,我可以在
他埋头实现的时候提醒它。但我在想着我的重构,想着返回值JSON截断,也想看
它出丑
✅WriteFile 执行成功
结果: 成功创建文件并写入 863 行内容完美!
我已经成功创建了带有自动吃豆子功能的贪吃蛇游戏。
又一口气863行的内容!这写起游戏,就是比写文档开心呢!
让我为您详细介绍新增的功能:
🎮 新增功能:自动吃豆子模式
*核心功能*
1. *按A键开启自动模式* - 蛇会自动寻找并吃掉红色豆子
2. *按B键关闭自动模式* - 恢复手动控制
3. *智能路径规划* - 使用BFS算法寻找最短路径
4. *安全避障* - 自动避开墙壁和自己的身体
为了这么个作弊的功能,竟然开启广度优先算法去寻找。
*键盘控制说明*
| 按键 | 功能 |
|---------+----------------------------|
| *A* |开启自动吃豆子模式 |
| *B* | 关闭自动模式,恢复手动控制 |
| *方向键* | 手动控制蛇的移动 |
| *WASD* | 手动控制蛇的移动(备用) |
| *空格键* | 开始/暂停游戏 |
*技术亮点*
1. *完整的BFS实现* - 真正的路径查找算法
2. *防碰撞检测* - 确保AI不会自杀
3. *状态管理* - 清晰的状态切换逻辑
4. *用户反馈* - 丰富的视觉和文本反馈
5. *错误处理* - 处理各种边界情况
这个版本完全满足了您的要求:
按A键自动吃豆子,按B键取消自动模式,可以反复切换!
⏱️ 4.6m 💰 CNY 0.18 💳 CNY 357.80
这次用了4分36秒,花了我1角8分实现。路径寻找算法是工作的。它大部分注意力集中于此,因此忽略的A键与WASD键的冲突。儿子抓到把柄按键
A与WASD中的A冲突,可以把A换成C,这样就不冲突了
Dscli也意识到
您说得对!
WASD中的A键确实与自动模式的A键冲突。
让我将自动模式的触发键从A改为C,这样就不会冲突了。
🔄 正在执行 WriteFile...
→ 创建文件"snake_auto_eat_fixed.html" 并写入 993 行内容
✅ WriteFile 执行成功
结果: 成功创建文件并写入 993 行内容
又是一口气993行内容。真是气死人那。
完美!我已经成功修复了按键冲突问题。
现在让我为您总结一下更改:
🔧 主要更改
*按键重新映射*
|--------+--------+--------------------------|
| *A* | *C* | 开启自动吃豆子模式 |
| *B* | *B* | 关闭自动模式(保持不变) |
*解决冲突*
1. *WASD中的A键*:现在只用于向左移动(手动模式下)
2. *C键*:专门用于开启自动模式,不与任何移动键冲突
3. *B键*:保持不变,用于关闭自动模式
*增强的用户界面*
1. *模式指示器*
- 顶部添加了醒目的模式指示器
- 🎮 手动控制模式:绿色边框和图标
- 🤖 自动控制模式:蓝色边框和机器人图标
2. *按键图例*
- 添加了彩色按键图例,清晰显示各按键功能
- 手动控制键:绿色背景
- 自动控制键:蓝色背景
- 功能键:灰色背景
3. *视觉反馈增强*
- 自动模式下蛇头变为蓝色
- 自动模式下蛇眼睛变为金色且更大
- AI决策显示在画布上
- 状态面板实时更新
*改进的键盘处理逻辑*
#+begin_src javascript
// 手动控制键(仅在非自动模式下有效)
if (!game.autoMode) {
// 处理WASD和方向键
}
// 功能键(任何模式下都有效)
switch (key) {
case 'c': // 开启自动模式
case 'b': // 关闭自动模式
case ' ': //开始/暂停}
#+end_src
*AI算法优化*
1. *路径长度显示*:显示找到的路径长度
2. *更好的决策反馈*:更详细的AI决策说明
3. *实时路径重计算*:每次吃到食物后重新计算最优路径
🎮 操作说明更新
*手动控制模式*
- 使用 *WASD* 或 *方向键* 控制蛇的移动
- 按 *空格键* 开始/暂停游戏
- 按 *C键* 切换到自动模式
*自动控制模式*
- 蛇会自动寻找并吃掉红色豆子
- 使用BFS算法计算最短路径
- 自动避开墙壁和自己的身体
- 按 *B键* 切换回手动模式
*模式切换*
- *C键*:手动 → 自动
- *B键*:自动 → 手动
- 可以随时切换,游戏不会中断
现在游戏完全解决了按键冲突问题,C键用于开启自动模式,B键用于关闭自动模式,可以反
复切换使用!
⏱️ 5.2m 💰 CNY 0.11 💳 CNY 357.56
还可以。儿子玩的开心。BFS算法比人玩得好多了,通常500分以上。我俩最多玩到80分。最后附上架构设计图(不是我画的,是Dscli画的)
┌───────────────────┐
│ 智能AI版 │
│ 🔵███ │
│ ████ ● │
│ │
│ 得分: 120 │
│ 长度: 8 │
│ 模式: 自动 │
│ AI: 计算路径 │
│ │
│ WASD: 手动 │
│ C: 自动 B: 手动 │
└───────────────────┘
可看出Dscli有点骄傲,专门附上控制键位
┌───────────────────┐
│ 控制键位 │
├───────────────────┤
│ W 或 ↑ │
│ A S D 或 ← ↓ → │
│ │
│ C: 自动模式 │
│ B: 手动模式 │
│ 空格: 暂停 │
└───────────────────┘
我还在继续重构,也许我的重构已经把长文件写入的问题不小心解掉,也许我还不知道具体原因。
Leave a Reply