Sensei Sudoku! [Flutter Game, Now Available on AppStore]
This is how I built a beautiful sudoku game from scratch using Flutter! Let's become a sudoku master!
4 min read
Watch the Video
Yet Another Sudoku Game. Why?
Sudoku: Number placing (Japanese),
Sensei: Master, the one with the wisdom (Japanese)
When I was a kid, I didn't know that sudoku has nothing to do with maths. The classic look of a sudoku game is good. That's why it is classic but on the other hand, I see that it draws people away because it makes people think that to solve a sudoku puzzle, one has to have great math skills. So I wanted to create a new design that is especially alluring for kids!
Although it looks simple; after doing some market research, I figured out that even the most downloaded sudoku games lack lots of features. Moreover, some of them show unsolvable puzzles or puzzles that have more than one solution (aka non-unique puzzles),
Learning from the people of sudoku, I have decided to start developing another game project with Flutter before finishing --> Bi Kelime. Because... Bi Kelime needs considerably more time and resources to release because the scope of it is way bigger.
I wanted the sudoku game to be simple. Yet, I added lots of other features in the end :)
Visit the website:
Download from AppStore:
Coding a successful sudoku game can be way more difficult than developing a finance-crypto trading app because the business logic of the sudoku game is more complex.
I have used GetX (only the Rx and Obx part of it) in this project too. So far so good :)
I have used my Flutter navigation package in this project too. By the way, I wrote that navigation package from scratch. It solves lots of issues of the default in-app navigation system, and it has some features that I believe that no other navigation package on "pub.dev" has at the moment.
I have developed a fancy game button that works like a 3D button and changes its shape when pressed.
The game state is always saved so that the users can undo their moves. I made it to record each and every move.
Taking notes of the candidates, automatic notes, inverting notes, auto-handling notes by moves, direct input, and isolated input are the important features of Sensei Sudoku.
I couldn't find a good spotlight-showcase-tutorial package on the pub.dev. So I built one for myself and thankfully, it worked flawlessly.
I also added a monetization flow for this app using rewarded video ads. I have successfully implemented some of the most popular ad delivery networks such as Google AdMob, Appodeal, Unity Ads, and Facebook Ad Network. To be honest, the best one among these is AdMob. However, Google applies really weird policies and can suspend your account for any reason for 1 big month.
That happened to me. And it happened after I released the game on the AppStore. Since I had never thought that my AdMob account can be suspended or deactivated, I didn't implement a flow to overcome the problem and let people play without needing to watch the ads. Because the ads cannot be loaded from Google AdMob, people cannot watch ads and thus, they cannot play the game. What a developer mistake... I should have prepared for such scenarios.
So for the next build, I added lots of things to my "let's keep it simple" sudoku game. One of them is Firebase Remote Config. It helps change the behavior of the app remotely and you can define as many variables as you want to consume. For example, I can change how many minutes a player can play unlimited games without needing to refill their lives. Or I can change if I want to use test IDs for the AdMob service or the real ones.
As I said above, I faced a 1-month AdMob account suspension. Although it drove me crazy, it let me create a new video ad viewer package. The package basically cuts through the app, shows a video ad that reads the URL from Remote Config, when the ad is finished it shows a "reward is earned" button, and finally closes the ad view. Of course, using that will not earn you any money, unless someone is willing to pay for views. The more appropriate use-case of such a package is for showing sponsored ads where you are paid directly from a sponsor.
Finally, I implemented Firebase Analytics and created some good events to trigger.