14 July 2020 by A. O. Faruq

Emoji Crush Insight


Brief Intro

Emoji Crush is a fast-paced spot-and-match game. A random emoji is chosen to be spotted and you need to find that emoji from the grid and squash it with a tap. Try to spot and squash as fast as possible because there is a limited time to finish the whole set of levels in an arena. An arena is where you get to play with various grid layouts. There are three arenas each with different levels of difficulty. You can be the judge of which arena you find it difficult to complete and share with your friends.

First few hurdles

  • The first version of the code was very rigid and everything was hardcoded and the same functionalities were repeated many times. Over time maintaining and adding new features were getting so difficult that performance and user experience was taking a hit. So after one year of release, I started to modularise the functionalities into functions and it took a few weeks to create core functions that could be maintained very easily. This method of coding is not new and the DRY (Don’t Repeat Yourself ) principle in software development is well known. My first target was to move as fast as possible so that I could learn a lot and make mistakes. Rewriting the codebase also taught me a lot of things in terms of maintaining compatibility with previous versions of the game. The only thing that I can’t slack on around was the user experience.

  • Image optimizations! They are necessary but without care can bloat your apps or websites. In Emoji Crush there are over 300 images with various dimensions, luckily sprite sheet editors were available and saved quite a lot of time in managing them. Finding the optimum dimensions was another trial and error game. What I learned is that first finding the right image dimensions that work for the application and then compressing to 8-bit indexed color space saves quite a lot of space. I found TinyPNG very easy to use with great results. All the images on this website are optimized by TinyPNG.

  • Iterating multiple times. Once you spend hours coding and debugging a feature it breaks my heart if that feature is axed later on. Even with a no-compromise with user experience attitude, it took a while for me to work out that muscle. There were multiple times when I felt like giving up the whole project when a feature becomes irrelevant after it took a lot of time to ideate, code, and test it. Being an indie developer critiquing my work just becomes another hat that I need to wear to continue that developing drive.

Current state

After multiple rewrites and building the gameplay as I kept developing it over the 4 development period, I feel that the game is complete. This game taught me a lot about programming while helping me pass some time when I get some time. Now the game is in long-term support mode, where I will squash bugs if found and work to keep up to date with various API (Application Programming Interface) usages.