如何设计一款 JavaScript 游戏?(13KB 或更小)(2019)
又一个Js13K过去了。这是我第三次参加这个游戏开发大赛了。我觉得我总能从中学到一些东西。(你可以在这里玩游戏)
游戏主题
今年的主题“回归”公布后,我决定做一款游戏,讲述一艘沉船在岛上的船员们试图返回家园的故事。他们需要收集资源重建船只,游戏风格融合了《Cookie Clicker》、《我的世界》以及那款经典的Flash游戏《Grow》。
原型设计
我立即开始设计一个岛屿生成算法的原型。它涵盖了所有元素:海洋、沙地、草地、树木、矿石、动物、淡水湖泊,甚至河流(我最喜欢的原型设计工具是https://codepen.io/)。
但我以前从来没做过这种事。两天的成绩都让人沮丧,我放弃了游戏,去睡觉了。
第二天,我意识到我花在失败的岛屿生成器上的时间根本无法让我更接近我最初想要打造的游戏。所以我放弃了一切,重新开始。我到底想做什么?我坐下来,拿着笔记本,开始写。
- 我想要一个点击器。这个游戏的核心就是点击获取资源。所以我给它加了按钮。点击就能获得资源。
- 我希望资源具有流动性。而且,它们不能只是免费的。所以我设计成每天都有人吃这些食物。而且,每个人需要花几秒钟去拿食物。
- 最后,我想要一些戏剧性。如果不喂人会怎么样?
最终我把“有人死亡时+5食物”这个设定去掉了。就算没有吃人,游戏本身也已经够病态的了。你可以在这里测试我的最终原型。
- 我想要为游戏添加的第四个元素是一系列“项目”,你必须在最终建造船只之前完成它们。受“成长”的启发,我希望玩家完成这些项目的顺序能够影响最终目标。例如,如果你早期开发了钓鱼功能,你会获得更多食物,但之后准备工作的人会减少,因为现在有一个人已经是专门的钓鱼者了。
平衡进度和难度
我提出的大多数项目都是为了尝试平衡和重新平衡游戏而产生的。
-
一直点击觅食和狩猎会留下很少的空闲时间来阅读游戏信息和项目描述;所以我创建了钓鱼来自动收集食物。
-
完成钓鱼项目后,快速储存大量食物真的很容易;所以我创造了野生动物死亡来削弱狩猎行动。
-
储存木材也很容易。所以我也认为伐木存在被动物袭击的风险,但风险很小。
-
现在动物袭击事件太严重了!所以我发起了“武器”项目来解决这个问题,降低动物袭击致死的概率。
-
我当时还在囤积很多木柴。所以我想让人们每天都烧一点木柴(用于取暖和做饭)。
-
经历了这一切之后,我意识到,游戏结束时,你根本不会死。有了稳定的食物供应,输掉游戏几乎是不可能的。所以我偷偷加了一个“上帝之怒”的参数。如果你不为上帝建造一座教堂并经常祈祷,他就会击沉你那艘逃亡的船。🙏🙏🙏
用户界面
我完全放弃了地图生成器的计划。但我想要某种用户界面。我决定保留原型中的日志,并创建一个类似小“地图”的东西来提示玩家正在发生的事情。我给游戏元素和控制添加了动画,让一切看起来更赏心悦目(当然也有点混乱,但没关系(我希望如此))。我用 SVG 制作了岛屿。在 HTML5 时代,SVG 既是福音,也是祸患。关于这一点,我会在另一篇文章中详细介绍。
这个游戏一开始让人一头雾水。你开始玩,两天后你的玩家就死了,因为一切都发生得太快了;所以你对着屏幕大喊,刷新页面。你再试一次,却因为阅读项目描述而分心;每个人都饿死了。你刷新页面,再试一次。刷新页面重新开始游戏真是太烦人了。快速死亡游戏也需要非常快速地重启。所以我添加了一个重启按钮来重置游戏。添加重置按钮也是一个非常复杂的重构练习,因为它迫使我把所有游戏数据都收集到同一个地方,并正确地初始化它们。
计算分数
最后,我的游戏需要奖励。我觉得胜负结果太过悲惨,缺乏吸引力。所以我设计了一个分数公式:
-
每个没死的人都会给你很多积分
-
您完成的每个项目也会为您带来一些积分
-
最终成绩与完成所需的天数成反比
-
分数也与上帝的愤怒成反比
-
只要离开该岛,您就会获得奖金。
如果你想知道的话,我迄今为止的最佳成绩是 349 分
我相信我已经成功制作了一个有趣的小游戏,并期待明年的挑战。如果你能在30天内完成,请告诉我!我相信这是有可能的!
书呆子统计数据
我使用 Typescript 开发游戏,但一直没时间真正使用类型。我用 gulp 来构建游戏并压缩文件。
我在 VSCode、Ubuntu 和 XPS13 上编码。
从比赛第一天起,我每周工作 5 到 6 天,每周工作大约 15 个小时。
除了 Gulp 项目构建器之外,我从零开始制作了这个游戏,没有使用任何库。我仍在撰写一篇更具技术性的事后分析报告。
鏂囩珷鏉ユ簮锛�https://dev.to/lopis/how-to-design-a-javascript-game-in-13kb-or-less-59kn