我的第一份工作是 2012 年在一家开发网页游戏的公司的服务器开发人员。后来也做了部分客户端开发的工作。从第一份工作离开后,我就离开了游戏行业。使用 Ruby on Rails 作为一名 “CRUD” 工程师做了接近 6 年的工作。2020年,我从上海回到了老家。与自己的女朋友(现在的老婆),以及另一位朋友一起开了一家咖啡馆。到目前为止艰难挺过了 5 年。

1 年前,我从店铺的工作中退出,开始去思考接下来想做什么。

从很早之前,我就一直想自己开发游戏,当然在大学的时候我并没有去做这件事。这也是毕业之后第一份工作进入游戏公司的原因。 去年我在听一个播客的时候,无意间知道了 King 这家公司。我一直不是一个休闲游戏玩家,在青少年时期,是红白机玩家,偏向于爱好 RPG 游戏。在红白机上,重度完了很多早起的盗版游戏卡带,印象最深的是《吞食天地》,《封神榜》,《重装机兵》等游戏。同学之间也热衷于讨论和交换不同的卡带来玩。后来街机流行了起来,开始在游戏厅玩格斗游戏。接着网吧开始兴起,整日泡在网吧玩《CS》,《魔兽争霸3》,《红色警戒》,《帝国时代》,《古墓丽影》等游戏。在高中的时候,我才获得了自己的第一台电脑。当然,我装了很多游戏。整个寒暑假都在玩《GTA》,《暗黑破坏神2》,《NBA 2K》。确实,这是每个典型的男性青少年时代的缩影。 我自己也总是自我催眠说,希望之后开发游戏。但我总是从来没有开始。在知道了 King 这家公司以及它的主力产品《Candy Crush》后。在离开游戏开发接近 10 年之后,我终于鼓起勇气尝试开始做一个三消游戏。 我以为,这是一个简单的开始,因为三消游戏嘛,一个看上去游戏机制如此简单的游戏。

于是我开始了。

我给自己定的第一个目标:是了解一个游戏引擎,并通过它实现基本的类似《Candy Crush》那样的匹配,消除,下落,填充的效果。

我选择了 Godot,早起我调研了多种不同的引擎。更早的时候,我自己有使用过 libGDX 开发过一个平台游戏 Demo,我的第一份工作使用的是 GameBryo 游戏引擎,但是在查询了各种信息,考虑引擎易用性及周边配套工具后。在 Defold,Godot,Haxe,libGDX 中趋向于选择 Defold 与 Godot。同时我在 YouTube 上找到了一个非常好的游戏开发教程。来自Mister Taft CreatesMake a Match 3 Game like Candy Crush using Godot,这是一个非常棒的教程,我通过它重新熟悉和理解了三消游戏的基本机制与 Godot 引擎的基本结构。为我后来的开发提供了非常多的帮助。非常感谢 Mister Taft Creates。

从去年 7 月份开始。

第一阶段(1个月):

看 Mister Taft Creates 的 Youtube 教程完成整个 Candy Crush Like 三消的开发。完成了整个三消 Demo 的开发。 主要实现了以下功能:

  1. 三消核心机制
    • 匹配,消除,下落,填充
    • 障碍:黑色方块,石头(不可下落),锁链
    • 特殊障碍:冰块,覆盖在其他元素上的特殊障碍。
  2. UI:实现了地图界面,菜单界面,游戏界面。成功与失败界面。
  3. 特效:消除粒子特效等。
  4. 声音:音乐与音效播放。

完成这些开发大概花费了我一个月的时间。这中间我并没有没日没夜的进行开发工作。现在看来我觉得花费的时间太长了。

第二阶段(1个月):

在第一阶段的基础上,简单尝试思考了一下可能想实现的游戏机制。并对整个代码逻辑做了优化。拆分出了管理各种功能的系统,下落,填充,粒子管理,网络请求管理,单独的动画管理等功能,然后实现了基于 CloudFlare Worker 的游戏后段的 API 接入,另一位朋友帮助我完成了网站的搭建,后端的开发。 这段时间实际上相当于是在重新打磨开发能力,同时为后续开发提供代码的健壮性。

第三阶段(1个月):

这个阶段我是实质上停止了开发工作,主要完成了一个完整的 UI 流程,同时在 App Store 的审核并发布。因为希望了解一下整个 App 提交审核的过程。很顺利,这个 Demo 在被退回一次,做了简单修改之后。就直接上架成功了。当然因为是 Demo,我实际上只上架了加拿大区的苹果商店。

第四阶段(IAP接入):

在前三个阶段基本了解了游戏机制,引擎使用后。我希望尝试来完成 IAP 的接入。这个阶段在技术上我遇到了一些困难。当我使用 Godot iap 插件来实现时,发现并没有办法实现这个工作。我花了大概 2 - 3 周左右的时间来处理这个问题。我按照官方的 plugin 尝试了几次没有成功,最终放弃了这个事情。但是我又非常希望实现与测试这个功能。于是我转投在 Defold 引擎上做了测试,结果很顺利的完成了。这时候我做了一个现在看来实际上是错误的决定。我将整个游戏逻辑从 Godot 切换到了 Defold 引擎上面,这又花费了我1个月的时间。

现在我在 Defold 引擎上完成了所有功能的开发,IAP 的接入。然后我停止了开发工作,同时围绕现在的游戏做了一些边边角角的开发,浪费了大量时间。

接下来是我自己对过去所做的事情的一些反思。

  1. 实际上三消游戏或者说 Candy Crush like 三消游戏并不简单。因为,越是简单的游戏机制。它的核心体验越是需要大量时间的开发和打磨。
  2. 三消游戏的核心除了优秀的核心体验外,最重要的实际上是关卡设计。而这也是需要大量时间来完成的。
  3. 游戏早期缺乏清晰的目标,我到底希望开发什么样的游戏?我开发这个 Demo 的目的是什么?如果是为了学习,应该极尽可能的去模仿和实现 Candy Crush 的核心体验,以此完全熟悉引擎的使用和细节的调试。
  4. UI 与美术能力的缺失,我开始有开发游戏的想法是 AI 大爆发的时期,我错误的以为可以通过 AI 来帮助我完成美术资源的生成与 UI 界面。

除此以外的其他问题,比如:缺乏对 Candy Crush 本身核心体验的足够多的分析,缺乏对自己能力的正确评估,以及缺乏对预期的管理。这些问题,实际上都是次要的。

所以,接下来我考虑暂时停下手头的工作。重新评估一下目前的情况,考虑下一步要做什么。


My first job was in 2012 as a server developer at a company developing web games. Later, I also did some client-side development work.After leaving my first job, I left the gaming industry. I worked as a “CRUD” engineer using Ruby on Rails for almost 6 years.In 2020, I returned to my hometown from Shanghai. Together with my girlfriend (now wife), and another friend we opened a coffee shop. We have struggled through for 5 years so far.1 year ago, I withdrew from the work at the shop and started to think about what I wanted to do next.

From a long time ago, I had always wanted to develop games myself, although I didn’t do this during university. This is also the reason why my first job after graduation was in a gaming company.Last year, while listening to a podcast, I accidentally learned about the company King. I have never been a casual gamer. In my teenage years, I was a Famicom/NES player, leaning towards a fondness for RPG games. On the Famicom, I heavily played many early pirated game cartridges. The most memorable ones are games like “Destiny of an Emperor,” “Fengshen Bang,” and “Metal Max.” My classmates were also enthusiastic about discussing and exchanging different cartridges to play. Later, arcade games became popular, and I started playing fighting games in arcades. Then internet cafes began to emerge, and I spent full days in internet cafes playing “CS,” “Warcraft 3,” “Red Alert,” “Age of Empires,” “Tomb Raider,” and other games. I didn’t get my first computer until high school. Of course, I installed a lot of games. My entire summer and winter holidays were spent playing “GTA,” “Diablo 2,” and “NBA 2K.” Indeed, this is a microcosm of the typical male teenage era.I also always hypnotized myself, saying that I hoped to develop games later. But I always never started. After learning about the company King and its flagship product “Candy Crush,” I finally plucked up the courage to try starting a match-3 game after leaving game development for nearly 10 years.I thought this would be a simple beginning, because, well, it’s a match-3 game, a game that looks like its mechanics are so simple.

So I began.

The first goal I set for myself was: to learn a game engine and use it to implement basic effects similar to “Candy Crush” such as matching, destroying, falling, and filling.

I chose Godot. In the early stages, I researched various different engines. Even earlier, I had used libGDX to develop a platformer demo. My first job used the GameBryo game engine. However, after researching various information and considering the ease of use of engines and surrounding supporting tools, I leaned towards choosing Defold and Godot among Defold, Godot, Haxe, and libGDX. At the same time, I found a very good game development tutorial on YouTube. It’s Make a Match 3 Game like Candy Crush using Godot from Mister Taft Creates. This is a great tutorial. Through it, I refamiliarized myself with and understood the basic mechanisms of match-3 games and the basic structure of the Godot engine. It provided me with a lot of help for my later development. I am very grateful to Mister Taft Creates.

Starting from July last year.Phase 1 (1 month):Followed Mister Taft Creates’ YouTube tutorial to complete the development of a whole Candy Crush-like match-3 game. Completed the development of the entire match-3 demo.Mainly implemented the following features:

  1. Match-3 core mechanicsa.
    • Matching, destroying, falling, fillingb.
    • Obstacles: black blocks, rocks (non-falling), chainsc.
    • Special obstacles: ice blocks, special obstacles covering other elements.
  2. UI: Implemented the map screen, menu screen, game screen. Success and failure screens.
  3. Effects: Destruction particle effects, etc.
  4. Sound: Music and sound effect playback.

Completing these developments took me about a month. During this time, I wasn’t developing day and night. Looking back now, I feel the time spent was too long.

Phase 2 (1 month):Based on the first phase, I simply tried to think about possible game mechanics I wanted to implement and optimized the entire code logic. I split out systems managing various functions, such as falling, filling, particle management, network request management, separate animation management, etc. Then I implemented the integration of game backend APIs based on CloudFlare Worker. Another friend helped me with website setup and backend development.This period was essentially equivalent to refining my development capabilities and providing code robustness for subsequent development.

Phase 3 (1 month):In this phase, I essentially stopped development work and mainly completed a full UI flow, as well as App Store review and publishing. This was because I wanted to understand the entire App submission and review process. It was very smooth. The demo was rejected once, and after simple modifications, it was successfully listed directly. Of course, since it was a demo, I actually only listed it on the Canadian App Store.

Phase 4 (IAP integration):After basically understanding the game mechanics and engine usage in the first three phases, I wanted to try to complete the integration of IAP. In this phase, I encountered some technical difficulties. When I used the Godot IAP plugin to implement it, I found that I couldn’t do this work. I spent about 2-3 weeks dealing with this problem. I followed the official plugin and tried several times without success, and finally gave up on this matter. But I really wanted to implement and test this function. So I switched to testing on the Defold engine, and it was completed very smoothly. At this time, I made a decision that now seems to be actually wrong. I switched the entire game logic from Godot to the Defold engine, which again cost me 1 month.

Now I have completed the development of all functions on the Defold engine, including IAP integration. Then I stopped development work and spent a lot of time doing some peripheral development around the current game, which wasted a lot of time.

Next is some reflection on what I have done in the past.

  1. In reality, match-3 games, or Candy Crush-like match-3 games, are not simple. Because, the simpler the game mechanism, the more time its core experience needs to be developed and polished.
  2. Apart from an excellent core experience, the most important thing about match-3 games is actually level design. And this also requires a lot of time to complete.
  3. Lack of clear goals in the early stage of the game. What kind of game do I actually want to develop? What is the purpose of me developing this demo? If it is for learning, I should try my best to imitate and implement the core experience of Candy Crush to completely familiarize myself with the use of the engine and the debugging of details.
  4. Lack of UI and art skills. The time when I started thinking about developing games was during the AI big explosion period. I mistakenly thought that AI could help me complete the generation of art resources and UI interfaces.

Besides these other issues, such as: lack of sufficient analysis of Candy Crush’s own core experience, lack of correct evaluation of my own abilities, and lack of management of expectations. These issues are actually secondary.

So, next I am considering temporarily stopping the work at hand. Re-evaluating the current situation and considering what to do next.