Summary
In this chapter, we finished an important part of the game, the ending, both by victory or by defeat. We discussed a simple but powerful way to separate the different layers of responsibilities by using Managers created through Singletons to guarantee that there's no more than one instance of every kind of manager and simplifying the connections between them through static access (something to consider when you discover code testing). Also, we encountered the concept of events to streamline the communication between Objects to prevent problems and create more meaningful communication between Objects.
With this knowledge, you are now able not only to detect the victory and lose conditions of a game but also to do that in a better-structured way. These patterns can be useful to improve our game code in general, and I recommend you try to apply them in other relevant scenarios.
In the next chapter, we are going to explore how to create visual and audio feedback to respond...