My next step into the world of game development is Snake.
I have fond memories of playing Snake on my flip phone growing up, so re-creating this classic is something I want to make sure I do right.
Snake may seem simple, but this project has taught me that it is filled with little nuances. Those challenges make it a great next step in my game development journey.
Why Snake?
Like Pong before it, Snake offers a relatively simple design with some interesting complexity hiding underneath. How do you detect collisions with the snake’s own body? How should movement across a grid work? What is the difference between detecting a key press and detecting a key being held down? These are all problems I have encountered while building Snake.
Unlike Pong, Snake is a single-player game where the goal is to survive, grow, and achieve the highest score possible. That brings me a little closer to my eventual goal of building strategy games, where the player interacts with a larger game system rather than directly competing against another person.
Building it
I built Snake using the same approach I used for Pong: C++ with raylib. raylib continues to be a joy to work with. It abstracts away much of the lower-level graphics programming without introducing the weight and complexity of a large game engine.
I am also doubling down on using Codex through JetBrains CLion as a guide and tutor while I build these games. This process has shown me how useful AI can be as a learning tool when I treat it less like something that writes code for me and more like a mentor or professor helping me work through unfamiliar problems.
That approach has reignited my excitement for learning and experimenting with new areas of software development.
What I learned
One of the biggest lessons from this project has been understanding how different types of keyboard input affect a game. Simply checking whether a key was pressed works well in some situations, while others require knowing whether a key is still being held down. Something as simple as moving a snake around a grid quickly turns into a lesson about input handling, timing, and game state.
This project has also taught me a lot about how I want to work alongside AI.
I have never enjoyed simply being handed a solution. I want to understand why something works, and I want to feel ownership over the code I write. What I have discovered, though, is that AI can be incredibly useful when learning a new topic if I explicitly ask it to behave like a mentor, tutor, or professor rather than simply solving the problem for me.
While building Snake, I have been using Codex to give me small exercises that move the project toward its next development goal. I write the implementation myself, and when I encounter a concept I do not fully understand, I stop development and ask questions before continuing.
That workflow has been a game changer for how I learn. Instead of AI replacing the process of figuring something out, it helps me stay in that process longer. It has made learning game development feel much more approachable while still allowing the project to feel like my own.
What’s next?
There is still quite a bit of work to do on Snake. It is an active project, after all, and for now I am focused on making sure my little snake friend can keep growing and eat as much food as I can point him toward.
After Snake, though, I want to take another step forward with something a little larger. I would like to build a game that introduces mouse input and more involved grid-based interactions. Maybe that means something inspired by Minesweeper, or perhaps Battleship.
Whatever I choose, the goal remains the same: take what I learned from the last game, add a few new problems to solve, and keep building.