For my final year project for my computer science course at the University of Hull, I created a 2D component-based game engine using C#. During the project, I wrote a series of reports, describing the current state of the project. The final report, along with the rest of the project is available on my GitHub profile. For a detailed breakdown of the project, I would recommend reading the final report. However, for a summary of the contents, I have provided the following sections from it:
“In standard object-oriented design, inheritance and subclasses are used to provide specific behaviours, data and logic for objects within a program. This is not a very practical approach for video games, because of the variety of different objects that are required – leading to an explosion of subclasses and as a result, redundant duplication of logic occurring even in objects which do not require that logic. […] This forces the software designer to move most functionality to the top, making the structure very ‘top heavy’. Methods need to be put in places of the hierarchy in illogical locations because of where they are in the class tree, rather than because of what they are. This can obviously lead to disorganized and messy code that is very difficult to work with.
“One solution to the problem of class explosion is the ‘Game Object Component System’. This system removes game logic from game objects and moves it into aggregated components, which are assigned to a simple game object. […]
“In this architecture, because logic is no longer held within game objects, components are used by ‘systems’ which implement behaviour based on the data found in components. For instance, a texture component simply holds the data required to render a texture. The Render system takes the texture information from the texture component and uses that to render the texture.”
This covers the basic concept of the project. This, along with other projects completed for my University course lead me to achieve a 2:1 in my degree.