Лучший способ сделать это, как вы сказали, это иметь «глобальный» массив сущностей (хотя, пожалуйста, инкапсулируйте их в класс обработчика, иначе вы, возможно, захотите убить себя в конце концов: p)
Имейте сущность базового типа, получайте различные вещи из таких, как клеть, враг и прочее, и, возможно, разные классы, полученные из тех, которые специализируются на разных типах (например, у grue и bat могут быть отдельные классы? Это может превратиться во множество разных классы, поэтому лучше всего иметь параметры для каждого объекта (например, для врага у него будет здоровье, урон, скорость и т. д.)).
Храните их все в одном массиве и используйте функцию виртуального обновления, которую вы вызываете для каждого из них каждый кадр,