The Gravyzone

This is where I regularly irregularly post about game dev and tangental subjects

Home

Completed CS50x!

Jan. 18, 2026 | Categories: Misc

It's been a few years since I graduated from UWM with a BS in Computer Science (with a double major in Philosophy), so I wanted to give myself a good refresher in the fundamentals (I also completed the CS50 AI course too a tthe same time, with a verified certificate in that as well ;) (humble brag))

The following is from the read me of my final project for CS50 (which was a small game I made.

Here is a video of a quick run down of it:
https://youtu.be/AwCB4yvJTF4

The first design choice I made was to choose either handcrafted maps or a procedural generated one. I chose procedural as I wanted a ‘rogue-like’ game. I found one that I had to make some edits to work in the current version of Godot (as of writing this, it is 4.5). I had to get it to work with TileMapLayers (TileMap is deprecated) and several other built-in functions the script originally used interfaces had changed so I had to get them working. I made all the graphics by hand myself (in Aseprite).

Next decision was movement. I went with a grid based movement simply because that’s what I enjoy. In order to get grid based movement to work I had to have a variable that has knowledge of the entire map and what is or isn’t passable, I chose a dictionary for this that is available as a global variable (in world_state.gd, which has important information that many aspects of the code need to share knowledge of). Then the player (player.gd) and enemy (enemy.gd) can use that shared knowledge to walk around and not pass through the walls. There is also a global variable that has knowledge of where every entity is, and like the geometry information, everyone can access it...

You can read the rest of my post on my github submission to Harvard's CS50x here:
https://github.com/me50/D-R-Faust/tree/e3796761becbe1401e91204cac624b7db2f8b29b