I did this project as a learning exercise. Objectives were to understand SPI and refresh my C++ coding skills, much atrophied amidst daily use of C#, Python, and SQL in my day job. Although there are libraries that make it easy to interface with the MAX7219 by abstracting its SPI interface, I specifically wanted to get an understanding of SPI and programming the MAX via its registers.
It's a bit glitchy but at this point I've pretty much gotten what I wanted out of the project.
I've learned that my code for this (and a subsequent project) was apparently sub-optimal for microcontroller programming. Despite being conscious of the scope and duration of my variables, it seemed that iteratively creating and destroying variables in a loop was somehow running the UNO out of memory. That's why my Tetris game (and scrolling Marquee, now fixed) would suddenly stop after just a few iterations.
I like it, continue this project, it's very interesting. I also think you can fix the memory issue. Good job!