- Hello Udi. Please tell us a bit about yourself.
- Tell us more about 240
- How did you come up with the idea?
- Is there any special software that you use?
- This is your first mobile application. How was learning Objective-C and UIKit?
- Any funny stories about the development?
- What was your biggest “I wish I knew that before” moment?
- During your work did you encounter any specific complications that you didn’t expect?
- I hear that there’s an Android version in the works. There’s recently been a lot of fanfare about Android-first development, such as Marco Arment’s article. So, why did you develop for iOS first?
- How are you enjoying Android development so far?
- What’s next for you?
- For those who are more curious, can you explain the game in detail?
Hello Udi. Please tell us a bit about yourself.
Hello! I’m a 31-year-old retired software developer. After working for more than seven years in my previous workplace, which I loved, I decided to take some time off work and enjoy life as an unemployed individual. I’ve been living like this for a few months now and I can say that I enjoy every minute of it. Alas, profits are low in no-job-land, so I guess this arrangement cannot last forever. But during this time, I invested in a specific project called 240 that I really enjoyed.
Tell us more about 240
240 is an original puzzle/board game app for iOS. It has similarities to the successful 2048 game, mainly in the board structure and the main cell movement, but it’s a completely different game with a different dynamics.
To be more accurate, I believe it is more of a riddle rather than a game. The difference, as I came to understand during the development of the app, is that a game has a random factor or an opponent. 240 is for single players (like 2048 and Candy Crush), but it doesn’t have any random factor in it. This also means that once you figure out how to solve it, you can easily repeat the solution quite comfortably and quickly. I know this is not the humblest of comparisons, but I like to compare this game to the Rubik’s Cube - a difficult challenge in a rather compact structure.
How did you come up with the idea?
I was looking for a cool game app that I could develop myself in my free time. I wanted it to be something that people could really enjoy so it had to be something original. It was important for me that this app would look good, and I knew that I was very limited in terms of animation and graphics since I have zero experience in development for iOS, so my model app was definitely 2048. I admire the success of 2048 since it is such a simple and compact game, and I knew that I had to adopt this minimalistic style, so I started thinking in that direction.
Another app that one must always think about when designing apps is, of course, Candy Crush. 240 is nothing like that but the idea of the cells being blocked after every move came from the evil chocolate cells in Candy Crush – they increase in number after every wrong move, making you frustrated and wanting to try again. Combining these two concepts and after a lot of research, I thought about the idea for 240. I hurried to write a quick python code to verify it was solvable and it was :)
Is there any special software that you use?
I use some open source code for the option of rating the app in the App Store (voluntary from the menu with no pop-ups) and sharing it on Facebook. I also used Flurry analytics SDK to receive feedback on the app’s usage.
This is your first mobile application. How was learning Objective-C and UIKit?
Fun. I watched the excellent course from Stanford university “CS193P Fall 2013: Developing iOS 7 Apps for iPhone and iPad,” free in iTunes U. The presentations were very clear and this was exactly what I needed. For those of you who already know your C++ and wish to learn how to develop for iOS, I highly recommend this course.
Any funny stories about the development?
I guess the funniest story about this app is its sounds production. I asked my cousin Ami Eisen to take care of the app’s sounds. He’s into that stuff and very talented. I asked him for the following sounds:
- Single move
- Can’t move
- Level lost
- Level completed
- Game completed
- Level restarted
- Go back one level
He gave me several samples to choose from and eventually, the final choices that came out were perfectly suited to the app. He produced most of the sounds by himself. For example, the move sound is actually a snapping fingers sound. And if you listen closely, you can hear that the level lost sound is someone making a “ppfffrrrr” sound with his lips.
Another good story is when I had a preliminary version of the game and gave it to my friend who specializes in UI/UX. She was a key adviser for me in matters of UI design. It was one of the times that I just let her play and watched what she was doing. She played for a bit and got to a lost level scenario. Then, she started tapping on the board with her finger and nothing happened (the feature of retry level by tapping on the board in a lost level scenario was not yet implemented). She continued to tap on the board, knowing that it would do nothing, looked at me, and said: “Do you see what I’m doing? This is me expecting this level to restart and nothing happens.” “So true,” I had to agree. I added this feature shortly after I returned home that day :)
What was your biggest “I wish I knew that before” moment?
It was only after I had a preliminary version of the 240 app that I started to realize some of the game’s drawbacks. I knew it was not as good as 2048 (which I find really remarkable, specifically in the way that it puts you into some kind of meditative state while playing it, in my experience), but I wasn’t fully aware of its drawbacks early enough in the design and development process. For example, the fact that it is possible to reach a dead-end in the game is truly horrible. Not only is it possible, it is actually very probable if you play the game for the first time and don’t yet know what you’re doing. Who has ever heard of a game where you reach a level that you cannot pass? I really hate this feature of the game but at that point, I couldn’t do much about it - this is just the nature of 240. I believe I managed to salvage something out of the situation by adding the feature of showing the possible end-cells in every level (believe it or not, I only thought about this idea after realizing that a dead-end possibility is too probable. Now, I can’t understand how this game can be solved without it). This is an effective way to explain why this specific level cannot be solved, but more importantly, it helps you to plan your moves ahead from level to level in order to avoid a dead-end scenario so that you can complete the game successfully. So, I guess it turned out for the best in this case, but I still believe that I would have done things differently had I understood in the first place how problematic a dead-end scenario is.
Another thing that I wish I knew before is that this game is not so easy for first-timers. Some users find the first level to be too frustrating, which is not good news for the app. Now I understand how crucial it is for someone who just installed and opened the app to easily solve the first level with no complexity whatsoever. If I knew that from the beginning, I would have probably put more thought into making this game more friendly for first-timers, and to get a hold of them before they give up out of frustration. For example, maybe I would have developed the “singles” mode option earlier. It’s a new mode released in version 2.0 - a more light-weight variation of the original game where the levels are independent and there’s no dead-end scenario.
During your work did you encounter any specific complications that you didn’t expect?
There were some technical complications, but I suppose this was expected since it was the first app I developed for iOS. Regarding the game development itself, I must say that I didn’t expect how difficult it would be to communicate the rules of the game to the user. There are some quite non-intuitive rules in 240 (for example, the “can’t finish in a cell you already finished in” rule), and putting them into words was one of the tasks I worked hardest on. Personally, I believe in the IKEA model of explaining things - only visuals, no text. So clearly explaining the rules using animation was the best way to go, but at some point, I decided that all of this was becoming too much work so I chose the sub-optimal yet simpler option to implement: consecutive text messages. I have to say, phrasing these sentences was a difficult task. I still believe that I could have done a better job, but sometimes you just need to put the pen down and write.
I hear that there’s an Android version in the works. There’s recently been a lot of fanfare about Android-first development, such as Marco Arment’s article. So, why did you develop for iOS first?
A great question with no great answer. I suppose it was some kind of a coin-flip decision. I asked around and got to the conclusion that both approaches were fine, and since I personally own an iPhone, I decided to develop for iOS first. I suppose that if I had an Android-supported device, I would have developed for Android. I read that the best way of doing this was actually to develop in a cross-platform environment. I understand that this option exists and it would probably be fine since this app doesn’t consume a lot of CPU. But again, I’m still an amateur and I’m learning this methodology along the way, so I guess a lot of decisions could have been take in a more educated way.
Gilad: here’s Marco’s article
How are you enjoying Android development so far?
It’s nice, no complaints. Although, I must say that writing the same product again in a different language and environment lacks the excitement of making something new from scratch.
What’s next for you?
This experience was very satisfying and it was a great deal of fun. I suppose, however, that I can’t be unemployed forever, so maybe it’s time for me to get back to the day job routine. I will probably start looking for a job soon, and maybe thinking about the next hit game on my free time :)
For those who are more curious, can you explain the game in detail?
The app’s layout consists of the current score at the top of the screen showing that the goal is to reach 240 accurate moves in order to complete the game. The body of the screen is a 4x4 grid – the game board with the orange cell at some position, ready to be slid around the board. At the bottom of the board (not shown in these screenshots) is a menu button, a retry button, and the best score so far.