Making fun educational games (Part 1/N)
A devlog about trying to make an educational game about programming that will hopefully turn out good.
One day I was watching a video titled The Tragic Tale of the Professor Layton Series when an idea striked me.
Professor Layton is a series of game where players follows a narrative while solving various puzzles. I thought to myself what if we had a Professor Layton game but instead of solving puzzles you would solve coding questions.
However programming/coding is a niche skill. It's not as widely understood as logic or writing. If I wanted to make such a game, I would have to teach players programming.
Thus begin my quest to try to make an educational game. Those types of games don't have a great reputation. They often feel very forced.
I had a lot of doubts going in. For example, what's the point of having a game teaching you programming when you could just follow a free tutorial online.
But another part of me still thinks that I could maybe pull it off. Make an actually great educational game. However, from the get go I wanted to make a game that is fun first teaching second as opposed to what is currently available on the market.
Speaking of the market. I went on Steam (The number one platform for selling and buying PC games in case you didn't know.) to look for games that taught you coding just to see what the competition is like.
And... It's not great. A lot of I'm sure smart people have tried and as we say in french, destroyed their jaws (Se sont casser la gueule).
Good games about software dev exists but they don't really teach you programming and are more tycoon type games.
Conclusion? No one had tried making a Professor Layton type game but for programming.
Seeing that there is an opportunity to do something unique I started exploring the various tools I could use to make a game like this.
The technology stack
In this section I will explain why I choose a particular set of technologies for the project.
Earlier this year I started learning a really simple game programming library called Kaboomjs. In order to not waste time learning another engine/framework/library for making games I decided to stick with it for this project.
Because the game involves writing code I naturally needed a code editor. I chose to use CodeMirror. There isn't a particular reason as to why as opposed to the rest. I just heard about it and started using it.
Because I want the game to be something that you download and can play offline, I decided to use neutralinojs to package what would be a web game into a desktop app. I chose to go with this instead of Electron because it's much more simple and doesn't require me to use a node based build system which is overcomplicated for my purposes.
Because I wanted the game to teach you Python (because it's the most accessible programming language for beginners) I decided to use a library called Skulpt which allows execution of python in the browser. (I think that it's python implemented in javascript).
I started to set things up and this is the layout I settled with.
Game Design
Now the time has come to speak about game design. If you see the screenshot above you can see that on the right side you're going to write some code.
On the left side is where you move around in the world. One of the first design decision I had to make was on how I could reduce the friction between switching from the editor where you use the keyboard to the game world.
I settled on using the mouse to move the character.
This way we avoid having a situation where the user presses the WASD keys to move but instead it write those letters in the editor instead of moving the character.
Earlier I talked about how I was inspired by the Professor Layton franchise to start this project. However, after reflecting a bit I decided that it would be a bad idea to follow in the footsteps of this game franchise.
The idea of making a Professor Layton style of game for programming is genuinely interesting but I have some reservations. Mainly :
The games are too linear which means that people could just watch a let's player play the game and not have/want to play the game themselve anymore. (Also, the Layton games are just not entertaining to watch. They're not very popular compared to other type of games.)
There is no way I'm going to be able to make cinematics like the ones in those games which is a pretty big part of why people play the games.
I think I have found a better fit which I'm going to explain right now.
Zelda but the puzzles are programming problems
The main challenge of an educational game is that it must be fun in addition to learning you things. We often see educational games focusing too much on the learning with not much fun.
By having programming as just one of many gameplay mechanics we can offer variety in gameplay. So if I confine programming to the puzzle sections and the rest is just a normal zelda game the player will not feel bored (hopefully).
Here below is a prototype dungeon I have designed.
So now solving coding questions allows the player to unlock doors, move items and progress in the dungeon. However the player still have to explore, move around, fight against ennemies and bosses like a normal game.
Solving a coding question will make the player earn money in game which can be spent to buy certain items. I even thought about allowing the player to buy editor themes. For example buying the Darcula theme in game.
Each coding question is supposed to make you learn a bit more about programming.
Now my goal is to implement this small dungeon and see if my idea works well in practice. This is going to be the MVP.
It's time to get the job done!
If you find this devlog interesting feel free to subscribe to this newsletter and follow my progress.