几个大厂小伙,有产品策划、有设计师、有程序员,单干发明游戏,48小时,能开发出什么游戏?

背景

上个周末,咱们几个人,从周五早晨到周日早晨,酣战了48h,游戏策动、游戏美术、游戏开发全都从0开始!发明了一款全新玩法的游戏,并加入了一个较量GMTK Game Jam 2022,当初较量已完结,参赛作品有6217个。

赛事介绍

The GMTK Game Jam is an annual game making marathon, where individuals and teams try to make a game that fits a theme, in just 48 hours.

人工翻译:GMTK Gam Jam是一个年度的游戏制作马拉松流动,集体或团队须要在仅仅48小时内制作一款合乎主题的游戏。

本期主题

The theme is "Roll of the Dice". That theme might immediately spark ideas of randomness and probability, or board games and casinos, but as always - you can interpret this theme however you like.

人工翻译:本期主题是摇骰子。这可能会让你想到随机,概率,或者桌游等等,当然你也能够依照你的形式来解读这个主题。

游戏体验地址

这是第一次参赛GMTK game jam2022,但我也不拉票了,因为注册后评分10个作品能力给任意作品评分,比拟麻烦,
游戏如下,点开Dice Crush's itch.io page 就能够玩: https://itch.io/jam/gmtk-jam-2022/rate/1622181

我也部署到了我服务器上: https://game.hullqin.cn/dice

day1凌晨:游戏思路

主题非常灵活,很容易利用到各种类型的游戏上。

思路一:只有想想现有的游戏类型,但但凡退出摇骰子随机因素,都能符合主题。例如:王者光荣摇骰子选英雄、射击游戏摇骰子选武器、超级玛丽摇骰子选关卡等等。

思路二:思考把骰子作为外围元素的游戏。例如大富翁、飞行棋等。引入很多随机事件,但这种状况很容易造成整个游戏都是随机的,用户没有参与感。所以须要用户能够做主观的抉择,影响游戏过程,取得可玩性。

下面这两种,应该是把骰子融入游戏的常见思路。但咱们认为游戏是须要翻新的,下面这两种思路,次要规定都是安分守己,没什么新意。而咱们心愿发明一种具备可玩性的玩法,所以下面两种思路都pass掉了。

最终咱们想到这种玩法:

灵感来源于俄罗斯方块,然而不同的玩法。设置6*10的游戏区域,每个格子搁置一个骰子,每个骰子有个数字(1-6),如果横向骰子的数字加起来、或者竖向骰子的数字加起来,等于某一个数字,就能够打消掉。

大家统一认为这个玩法很不错,就朝这个方向搞了。这时候,咱们花了8个小时(凌晨1点出题,凌晨3点提出该想法,早上9点达成共识)

day1上午:产品策划

咱们达成共识后,2位策动同学立马一起写策划书,定了外围玩法:

这时候10点多了,程序员(我)起床了。真幸福啊,刚起床就有了策划案。

day1下午:MVP版本

作为程序员,是时候做技术选型了,明天要给大家一个MVP版本,让大家体验一下,看玩法是否要适当调整。与此同时其他同学就忙着去定美术格调、找音效、BGM了~

技术选型

因为团队有另一个开发同学,但他是算法,对JS不太理解,须要新学,所以我论断是:不必cocos creator等游戏框架、也不必React等前端框架、不必PixiJS等渲染框架。争取用原生JS实现,用dom来展现各个游戏元素,不便他也能疾速看懂改代码。(因为他这周看了点原生JS做的游戏的代码)。

当然应用原生JS,也是须要编译环节的,也是须要引入类型定义的,能够大幅度提高开发效率。所以我用Vite作为打包框架。

具体怎么做?用Vite以React-ts为模板,再把React相干依赖和配置删掉即可。就能够用typescript写原生JS的代码了~

开发

这是commit记录,右侧展现了最后2个commit的文件列表:

玩法细节探讨

开发的时候,还是有些小细节之前没思考到的,比方:

咱们论断是都要打消掉。

又比方打消两头某排后,呈现了空间,下面的骰子是否要落下来。作为程序员,为了给本人缩小工作量,找了这种借口压服产品:

如果着落,之前的数字布局变了,有人可能按法则摆的,就乱了。如果让玩家预判打消后的连锁,这个不像对对碰,连锁很直观。咱们骰子数独是不直观的。玩家这种连锁更容易靠运气、而不是实力。如果有靠实力的,那肯定是十分多数了

MVP初体验

因为是MVP,所以没有引入任何音效和图片。我优先实现了外围玩法,不便给产品测试游戏可玩性。成果如下:

day2凌晨:真正的MVP

这时候,素材也根本定下来了,我把外围玩法加上了骰子素材,给大家体验。还加了一些音效。

关上体验时,纷纷感觉很好玩,很上瘾。更动摇了咱们持续做的信心。

day2白天:产品与开发的抵触

产品同学疯狂画素材,一个又一个素材发群里,产品曾经画了5-6个页面了:

然而我明天的工作量特地大,包含:

  • 路由逻辑要从0开发(用原生的害处就是,没有React Router这种不便的工具了),我利用window.history手写了一个SPA。
  • 很多素材,只是作为background放上去的,间隔须要手动调整。例如我须要实现一个固定比例的button,保障button和图片的尺寸统一。
  • Button的点击态、Hover态,也须要通过改background来实现。
  • 让游戏屏幕适配各种宽度高度的设施,必须本人写款式。
  • 音效播放、BGM切换,须要手动实现,我没有用其它的库。
  • 按键事件的响应,须要手动实现,我没有用其它的库。

产品同学十分NICE,当我群里提前告知做不完的「危险」后,立马跟我电话沟通,我表白了具体起因,以及提出了本人的倡议:

产品交互越简略越好。我倡议是结尾一个首页,点击后间接选关卡,点击关卡后间接开始游戏,不再设置简单的两头页面了。

产品同学承受了,并且依照这个思路绘制了新的原型图,给出了设计稿。

有这样的团队,体验真棒!

day2早晨:群策群力提交

提交前还是遇到了一些问题的,比如说我用Vite打包构建后,在他们的零碎上无奈运行。

通过排查,发现是零碎上的作品的所有资源会有前缀(https://v6p9d9t4.ssl.hwcdn.net/html/6180032/),然而我的打包构建都是绝对路径,很多资源都是/xxx门路,这样就导致404了。

解决方案

计划一:通过Vite的配置文件的target.base能够指定绝对路径前缀。然而发现每次打包后上传,资源前缀都数字都会扭转,这个数字是无奈预知的。只好放弃。

计划二:通过相对路径打包,调整所有动态资源的引入形式。

最终,花了半个多小时,我用计划二胜利的上传了动态资源~撒花~

欢送来玩噢:https://game.hullqin.cn/dice

我还加了贴心的性能:暂停、缓存。暗藏浏览器后,游戏暂停(并暂停BGM)。敞开页面后,记录也会保留在localStorage中,下次玩同一关卡,能够持续刷分!

昨晚我用Target=26,在飞机上玩到了11170分~你玩到多少分呢?快发游戏截图到评论区吧!

写在最初

我是HullQin,独立开发了《联机桌游合集》,是个网页,能够很不便的跟敌人联机玩斗地主、五子棋等游戏,绝不免费,绝无广告。喜爱能够关注我噢~我有空了会分享做游戏的相干技术。