Automated Testing for Billiards

I’m working on a game, and I want to ship that game bug-free. The best way to ensure that is to test, test, and test. Game testing—sometimes called QA or quality assurance—is simple in theory: play the game, try to break it, fix what breaks. The problem is that you built the thing. You play it the way it’s meant to be played. Your players won’t. ...

January 26, 2026 · 8 min

Snake in C - Under 400 Lines (Full Tutorial)

Learn how to build the classic Snake game in C from scratch! In this tutorial, we’ll create a fully functional Snake game in under 400 lines of clean, readable code using C and Raylib. Perfect for beginners wanting to learn game programming in C or anyone interested in understanding the fundamentals of game development without unnecessary complexity. ...

November 20, 2025 · 1 min

Code Pong in 220 Lines of C | Raylib Game Programming

Learn to code the classic Pong game in C using Raylib in just 220 lines of clean, beginner-friendly code! Perfect for beginners wanting to learn game programming in C or anyone interested in Raylib development. Source Code: https://github.com/bi3mer/raylib-pong Raylib: https://www.raylib.com/

November 13, 2025 · 1 min

How Games Find The Shortest Path Between Two Points

Learn how pathfinding algorithms work through interactive visualizations. In this video, I implement and compare three fundamental search algorithms - Depth-First Search (DFS), Breadth-First Search (BFS), and A* - showing exactly how each one explores a grid to find the optimal path. We’ll cover how DFS explores deeply before backtracking, why BFS guarantees the shortest path in unweighted grids, and how A* uses heuristics to find paths efficiently. Everything is implemented in C using Raylib for visualization with terrain generation via Perlin noise. ...

November 6, 2025 · 1 min

From 100 Compiles to Zero: adjust.h (C Hot Reload)

Stop recompiling your C code just to change a number. adjust.h is a single-header library that lets you edit variables while your program is running - no rebuilds needed. Just include the header, mark your variables, and watch them update live as you edit your source file. In this video, I’ll show you how to set it up and demonstrate why this simple tool can save you time. ...

October 28, 2025 · 1 min

Hot Reloading Constants: Tweak Values Without Recompiling

Tired of the compile-restart-test loop when tuning parameters? In this video, I show you a clever technique for hot reloading hardcoded constants. By wrapping values in a TWEAK() macro, you can edit numbers directly in your source code and see them update in real-time while your program is running—no recompiling or restarting needed. ...

October 7, 2025 · 1 min

Boids With Raylib and C++

In this video, I implement a Boids flocking simulation using C++ and Raylib. Watch as autonomous agents exhibit emergent behavior through simple rules of separation, alignment, and cohesion, creating mesmerizing patterns that mimic real-world flocking behaviors found in birds, fish, and other animals. Source Code: https://gist.github.com/bi3mer/0017a28837bfa4f380364c6a4e089f68 Raylib: https://www.raylib.com/ ...

September 15, 2025 · 1 min

Creating a Sorting Visualization With C++ and Raylib

In this video, I build a real-time sorting algorithm visualizer using C++ and Raylib. Watch as the sorting process comes to life through smooth animations and colorful graphics, demonstrating how the algorithm works under the hood with visual feedback for each comparison and swap operation. ...

September 8, 2025 · 1 min

Sokoban

While I was TA’ing C++, the professor for the class asked all the TAs to record a forty minute long video on some topic related to C++. I figured it may be useful to see someone coding a game from scratch, so that’s what I did with part 1, which was Sokoban with bitboards. I enjoyed programming the game and making the first video, though, and I decided to keep going. The result was a 31 Part Youtube Series! ...

August 25, 2025 · 1 min

Block Randomization

Last month I ran an online study with 250 participants. There were 5 possible conditions, and assignment was random. You would expect there to be ~50 participants per condition. In my case, though, one condition had 36 participants, creating an unideal skew in the dataset in terms of participants per condition. The problem was random assignment. What I should have used instead was block randomization. Block Randomization Block randomization is super simple to implement, but it comes with a major downside when compared to random assignment. Random assignment is great when you’re running an online study because it does not require a server. Every client can call select a random condition on its own. Block randomization needs a server. ...

April 30, 2025 · 6 min