Основная цель, которую вы должны иметь здесь, - это централизовать логику для получения значений, связанных с различными уровнями. Предоставляя одно место для хранения этих значений, вы минимизируете количество мест в коде, которое необходимо изменить, если вы добавите другой уровень, добавите другие значения и т. Д.
Интерфейс класса - хороший выбор для этого решения. Однако, если у вас есть ограниченное количество параметров конфигурации, представленных классом, нет причин для использования наследования. Вы можете начать с одного класса, который инкапсулирует логику. Если остальная часть вашего кода извлекает свои настройки через интерфейс класса, вы можете позже представить более сложный дизайн, такой как подклассы для каждого режима, если это будет необходимо с ограниченными изменениями для остальной части вашей игры.
Например, первая реализация может быть что-то вроде
enum mode {
MODE_EASY = 0,
MODE_NORMAL = 1,
MODE_DIFFICULT = 2,
};
class gameSettings {
public gameSettings(mode GameMode) {
m_mode = GameMode;
}
public int getMaxWeaponNumber() {
int maxWeaponNumber;
switch(m_mode) {
case EASY_MODE:
maxWeaponNumber = 100;
break;
// Other mode settings.
}
return maxWeaponNumber;
}
// Other game settings....
private mode m_mode;
}
Это объединяет прямолинейность оператора switch () с преимуществами интерфейса класса. Вы также можете поменять оператор switch () с помощью таблицы поиска, как это было предложено другим автором, или каким-либо другим механизмом, соответствующим вашему приложению.