Last year I published my first app on the Google Play Store. The road there was bumpy, starting many years ago to publish a simple game. It took multiple breaks and restarts. Most of them because I thought too simple about some of the basic parts during app development. However, I also learned a lot from it and will probably not make the same mistakes again. I will discuss some of the pitfalls I fell into.
Dealing with different screen sizes
My adventure started a long time ago. The idea to create a little game has been in my head for a while. One of the first problems was the different screen sizes of different. Of course, it is a trivial issue during application development. However, hexagons are no standard component, so you have to make sure the implementation is working on all screen sizes. The dimensions of the screen and the rotation should determine the placement of the hexagons. My first implementation was not really able to scale with different sizes. As I said, it was many years ago, and it started as a hobby project. I would not have chosen to create a game with non-standard components when starting over since you have to take into account a lot of details. If you really need some custom components, early testing on different screen sizes can prevent many troubles.
Testing with real devices
After finally fixing the problems with the different screen sizes, it was time to test the application on a real device. However, when putting the app on a real device, the app did not register all clicks on the screen. I never really solved this problem. Finally, after too many hours of debugging, I switched from React-Native to Flutter. My colleague already suggested Flutter multiple times, and I decided to give it a try. During the development of the app in Flutter, I started testing on a real device from the start to make sure this did not happen again.
Implementing the AI
After switching to Flutter, the implementation of the game was quite easy. Of course, this had something to do with starting for the fourth time. What I did not implement yet was the AI. I underestimated this step. I am comfortable with machine learning, but most have been on data sets with quite similar solutions. Of course, some games are similar to the game I implemented. However, I have less experience with creating an AI for those. The big difference here is, you do not want your AI to be perfect because that would be no fun for the human players.
After implementing one of the solutions, there were some issues with the performance. As the number of possible options is exponentially rising, the performance took a big hit. After taking some shortcuts, it was finally doable again. The AI was smart but not always taking the best move to make sure the human player had a chance to win. However, it was still pretty smart and sometimes knew the human player would win if he would play perfectly. Because of the shortcuts, the AI made a random move as he thought it would not matter anymore. The human player, however, had not realized this yet. Finally, I decided to switch to a heuristic approach which seemed to work good enough.
Finishing the app was a huge milestone for me. However, there are still a lot of things for me to learn and to improve while working on future apps. For the next app, the focus will be on improving marketing and promotion. Creating and publishing an app is one thing, but with so many apps in the Play Store, you have to make sure people know your app is there.