嘿,r/SoloDevelopment,来自伊斯坦布尔的独自开发者。 我刚刚软发布了 CozmoGame,这是一个完全在浏览器内运行的多人空间策略游戏。 没有引擎,没有团队,只有我和一个比我开始时想象的要庞大的代码库。 它是什么,简要概述: 玩家建造行星,研究技术,构建舰队,打斗,形成联盟,进行间谍活动,发送远征。 持久的宇宙,你的帝国在你离线时仍在运作。 会话时间短(5-30分钟),每天检查多次。 OGame-inspired,但有许多我自己设计的机制(智力联盟,感应干扰器,学院技能树系统取代了经典军官等)。 独自开发的部分: 堆栈: Laravel 12(PHP 8.4),Blade + Tailwind 4 + Vite,MySQL。 目前范围: ~25个Eloquent模型, ~25个服务,确定性种子战斗引擎与可复制的战斗报告 + 战斗模拟器,基于队列的建筑,游戏内维基,Paddle付款集成,GDPR账户删除,联盟系统,朋友系统,实时聊天,支持票系统…… 8种语言, EN/DE/FR/PL/ES/TR/IT/RU。 我自己处理EN和TR;其他语言使用LLM辅助,但我阅读每个关键字。 没有图形团队:我购买了精灵包并使用CSS-精灵化了所有内容(单个sheet每种实体类型,建筑,舰船,防御,研究等)。 没有前端框架,没有React,没有Vue。 只有Blade + Tailwind + ~20个小型内联脚本。 一人值班:我是开发者,GM,支持人员,调度员,以及在凌晨2点修复队列工作者的人。 一些我通过实践学习到的困难东西: 原子写入对于竞争的数字列。 Eloquent的$model->save()会在两个请求访问同一资源列时默默地覆盖并发写入。 在生产中遇到一个真正的“DM丢失但资源从未交付”的bug,让我完全理解了这一点。 现在,每个竞争数字列(资源,船只数量,暗物质,碎片)都通过原子SQL UPDATE 帮助在模型中进行。 一条规则,应用于所有地方。 死锁预防的锁顺序。 两个事务在不同的迭代顺序下访问相同一组行时,InnoDB下会死锁。 解决方案:始终在获得锁之前按类型列排序迭代。 令人乏味的修复,生产中遇到的1213错误让我找到了。 舰队处理顺序是关键。 同一秒舰队事件必须在所有用户中严格按照分发顺序解决,以便OGame-style timing play(暗杀反击,收集机器人竞争)才能正常工作。 按用户批处理会破坏它。 我重新设计了工作者以解决这个问题。 当前状态: 两周前软发布。 在beta宇宙中有活跃的玩家,故意保持小,以便我可以平衡系统并实时追踪bug。 首次正式宇宙在beta结束后启动;所有玩家都从零开始,没有老玩家领先。 我仍然每天发现bug,代码库仍在快速移动。 beta宇宙开放,如果有人想去探索。 链接:https://cozmogame.com/en Discord:https://discord.gg/AwMrEgFG 我很乐意回答任何问题,架构问题,“如何一个人完成X”,收入决策,疯狂迁移的故事,什么都行。 AMA风格。
独立开发了一款多人在线浏览器策略游戏在Laravel / 软启动的经验教训
评论 (0)