I’ve been creating a new game for the iPhone that I am calling Mondropop. The idea of the game is, like many other games, you have blocks in a grid that are all different colors. When you touch any of the groups of blocks of the same color, that group is removed from the board and all the pieces above those blocks fall into the open spaces.
You get points for clearing blocks using a specific formula where the larger the group, the more points you get. Towards the end of the game, if you clear a column, the columns will slide together to close the gap, allowing blocks on either side of the empty space to connect. At the end, you get a score to see how well you did.
One of the nice things about the game is the color scheme, which is based on Mondrian’s artwork. It uses the basic white-gray, red, blue, and yellow colors with black lines between, making a nice connection with the artist’s work.
What I like best about the game is that it allows you to apply part of your brain towards solving a puzzle while also being something you can look at while listening to an audiobook, which I often do. It’s useful to occupy that part of my brain when I’m sitting still.
One of the things the game does in the background is run a simulation about 100 times using different algorithms to figure out how well you can score. The actual best score is an NP-hard problem - there is no shortcut to computing the optimal score. For this reason, it runs those simulations and tries to get the best score it can. At the end of the game, it displays your score as a percentage of the best score from those simulations. This is actually a much better gauge of performance than the raw score because different randomly-created boards could naturally score higher than others.
I’ve been building all of this in React Native and using some AI tooling to help me. I’ve also employed the Expo library and set of tools to help build and run the React Native application. Recently, I made some update to React Native that broke builds on the Expo site, so I can no longer use Expo to build the application via the web. I’ve had to connect the IDE-based and command line tooling to use the Expo tools that launch Xcode so it can build a native app for iOS.
It’s been interesting learning React Native, the Expo tools, and how to build and deploy things for iOS via TestFlight. I have sent the TestFlight link to a handful of people for feedback on the game.
There are some drawbacks to building a game using React Native. I have not yet figured out how to use native libraries to connect my application to Game Center, which is a pretty big setback, since many test players have wondered why they can’t use the native tools for challenging opponents to score higher on a board.
I’m going to close out some of the unfinished loops in the game, like removing the Game Center button since there doesn’t seem to be a way to connect without writing native code. I’m not ready to start writing Swift code in Xcode at this point, since the bulk of my game is written in JavaScript with React Native.
If I remove that button and create a couple of things to encourage sharing and challenging of games, there’s only one major glitch left, regarding starting a game from a challenge. I need to fix that, but apart from those few little things to clean up, it’s about ready to go.
I will need to review Apple’s app release guidelines to avoid common rejection reasons, like having non-functional features in the game. If I pass the review process, I’ll be able to put my app in the App Store. I’m thinking of selling the game for $2, which is more than the $0.99 that many simple games sell for.
Hopefully I’ll get the game finished and released in the next month or so, and you can look for it on the App Store.