我正在用 Rust 重建一款 90 年代的 LAN 游戏,以最终学会它

发布: (2026年3月30日 GMT+8 23:39)
6 分钟阅读
原文: Dev.to

I’m ready to translate the article for you, but I need the full text of the post (everything after the source line) in order to do the translation. Could you please paste the article content here? Once I have it, I’ll provide a complete Simplified‑Chinese translation while preserving the original formatting, markdown, and code blocks.

介绍

Cover image for I'm rebuilding a 90s LAN game in Rust to finally learn it

在90年代末,我的哥哥、表兄弟和我会围着一台电脑玩 Atomic Bomberman 好几个小时。方向键和WASD,肘部相碰,垃圾话飞来飞去。那既混乱又完美。

最近我经常想起那款游戏。不仅是怀旧,更是想再次和他们一起——这次通过互联网——玩它的念头。所以我决定自己动手实现它。

我的第一反应是直接敲代码:挑选一个框架,依赖 AI,周末就交付一个作品。但当我开始和 Gemini(以及后来成为我主要 AI 导师的 Claude)讨论这个想法时,我意识到我手里有更有意思的事:一个真正学习 Rust 的借口。

困难之路

我是一名资深全栈工程师。我的大部分职业生涯都在 JavaScript 生态系统中度过——浏览器、Node、React,整个技术栈。我完全可以用 TypeScript 把它写好,并在周日之前跑起来。

但我一直对自己平时工作的抽象层之下的东西感到好奇。如果我不必担心垃圾回收器在关键时刻介入会怎样?Rust 已经在我的候选列表上很久了——一个 60 Hz 服务器循环的多人游戏似乎是我终于下手的合适理由。

于是计划变成了:服务器使用 Rust,客户端使用 React 和 PixiJS,二者之间通过 WebSocket 连接。从第一天起就以多人模式为主——不做以后需要拆除的单人原型。

与 AI 学习,而不是通过 AI 学习

下面这部分让我感到意外。我在这个项目中以 Claude 作为我的 AI 导师开始,遇到的第一个问题并不是技术层面的——而是流程。

Claude 行动很快。太快了。它会在我还没消化完架构时就直接跳进代码。我最终得到的是我不理解的可运行代码,这正好违背了初衷。我们不得不停下来,退一步,制定规则。

我们最终形成了一个 mentor‑review loop:AI 设定目标并引入新概念,我编写代码,然后我们一起审查。除非我卡住并请求帮助,否则不会代我写代码。我们制定了保持进度的规则。

目标从来不是尽快完成游戏。目标是学习 Rust——真正学会它——同时构建我真的想玩的东西。

我正在构建的内容

这款游戏是一个多人 Atomic Bomberman 克隆版。以下功能已经可以使用:

  • 服务器: Rust + Tokio,使用 WebSockets 运行 60 Hz 的权威游戏循环
  • 客户端: React + PixiJS,渲染服务器下发的游戏状态
  • 游戏玩法: 玩家在 15×13 的网格上移动,放置炸弹,炸毁可破坏的墙体,收集强化道具,并在爆炸中死亡
  • 网络通信: 客户端发送意图(方向、放置炸弹),服务器决定真实结果。由于客户端不运行任何游戏逻辑,无法作弊

游戏可以在本地运行。两名玩家可以连接、四处奔跑并相互投炸弹。虽然画面并不精美——所有角色都是彩色方块——但机制已经完整。

Atomic Bomberman gameplay

前瞻

在“在本地可以运行”与“我真的可以和兄弟、表兄一起玩”的游戏之间,存在着巨大的差距。移动需要更顺畅的手感。当前没有大厅或游戏流程。还有最关键的一点:客户端预测,这样在真实的互联网连接下就不会感觉迟缓。

本系列将记录整个过程——我正在学习的 Rust、多玩家架构的抉择、灵感迸发的瞬间,以及死锁悄然冻结游戏、你只能盯着看似完美的代码耗上一个小时的时刻。

接下来:当你大部分职业生涯都在写 JavaScript 时,实际写 Rust 是怎样的体验。

0 浏览
Back to Blog

相关文章

阅读更多 »