As phase two of teaching myself the skill of finishing things, I’m going to be working on a well-defined project for a week or two, spending at least a couple hours each day. I plan to begin this project tomorrow, which means I need to get ready today.
So here’s the project: I’m going to be writing a Snake clone (and I’ll call it Serpent, because why not?). By itself, this is probably another Pong-level task that I could do in 48 hours. There are two ways I’d like to make it a bit more interesting:
- I want to use Idris’s Effects library to write a specification of the game’s rules as a type, which will then be checked by the compiler. I didn’t do this last time because I’d never used Effects before and I didn’t have time to learn it, but I really love the idea of the library and I think it could be a helpful tool for organizing programs!
- I will incorporate what I like to refer to as a “Bastion-style difficulty system”, which might require some explanation. In the game Bastion, there is a “shrine” at which you can defy various in-game deities, incurring their wrath and making enemies a bit stronger. The effects of this can range from just making enemies hit faster and harder, to making them phase through attacks randomly, to making them explode on death. This is a lot more interesting than the usual “easy/medium/hard” difficulty slider that you find in a lot of games, so I’d like to try something similar.
I’m going to spend today going over some of the lessons I learned from my Pong jam and practice taking advantage of them — I’ll write a simple library for describing the callback structure I was using and try to learn a bit more HTML. Tomorrow, I’ll try to write up a specification and translate it into Idris!