Well if you wanted to take a step back in time and make a non-OOP [Standard] Pascal program, don't declare any classes or lists. Instead use records and arrays alone. This had proved memory intensive for large arrays of records so you could instead allocate a raw chunk, or chunks of memory and then count your data as you go along, this however is instruction intensive, but you have to weigh the benefits of the one to fit the needs of the other. Starting to see one of the reasons why the object oriented approach to allocating 'objects' was something of a breakthrough?

Also instead of having a triggered reoccurring method (a nono in the pre-OOP world) where your application would cycle, you'll have to keep your code executing inside of a single repeating loop. This means of structuring is still useful today, though it will negate the ability to use multi-threading, a now mainstay in most desktop or laptop computing. Probably not something a super-3D engine would want, but for some smaller and more independent scale games, this works just fine too.

OOP is great and it adds all kinds of benefits, --such as more organized code, more optimized memory allocation and multi-threading-- however it is still possible to over-objectify all your project code and add more work to what should be a small or quick and dirty game project. As programmers we're allowed to cheat a little to get the job done, like my old highschool CS teacher used to say "programmers are lazy, so we should always try to do things in a way so that we can be lazy." It's a weird way of putting it, but the idea behind it was to code to make your job easier not harder. At least I sure hope that was his message.