Witam wszystkich, chcę poprawić swój kod dotyczący wyboru poziomów, gdyż mam gigantycznego switcha, który składa się z 18 case-ów. Aktualnie działa to tak, że na każdy poziomie czyszczona jest lista w wrogami, dodaje wrogów do listy i broń jaka jest na danym poziomie, po zabiciu wszystkich wrogów, wywołuje funkcję klasy i przechodzę na case 2 i tak do case 18. Nie wiem, czy intuicja mi dobrze mówi, ale niezbyt dobrze taki switch wygląda. Dla poglądu sytuacji wrzucę kilka case-ów, żeby nie wrzucić 250 linii kodu
case 8:
{
Enemies.Clear();
Enemies.Add(new Wizard(this, GetRandomLocation(random)));
if(CheckPlayerInventory("Bow"))
WeaponInRoom = new Quiver(this, GetRandomLocation(random));
break;
}
case 9:
{
Enemies.Clear();
Enemies.Add(new Ghost(this, GetRandomLocation(random)));
Enemies.Add(new Ghoul(this, GetRandomLocation(random)));
if (CheckPlayerInventory("Bow"))
WeaponInRoom = new Shield(this, GetRandomLocation(random), 5);
else
WeaponInRoom = new Bow(this, GetRandomLocation(random));
break;
}
case 10:
{
Enemies.Clear();
Enemies.Add(new Wizard(this, GetRandomLocation(random)));
Enemies.Add(new Bat(this, GetRandomLocation(random)));
if (CheckPlayerInventory("Red potion"))
WeaponInRoom = new BattleAxe(this, GetRandomLocation(random));
else
WeaponInRoom = new RedPotion(this, GetRandomLocation(random));
break;
}
case 11:
{
Enemies.Clear();
Enemies.Add(new Wizard(this, GetRandomLocation(random)));
Enemies.Add(new Ghost(this, GetRandomLocation(random)));
if (CheckPlayerInventory("Battle axe"))
;
else
WeaponInRoom = new BattleAxe(this, GetRandomLocation(random));
break;
}
case 12:
{
Enemies.Clear();
Enemies.Add(new Bat(this, GetRandomLocation(random)));
Enemies.Add(new Ghost(this, GetRandomLocation(random)));
Enemies.Add(new Ghoul(this, GetRandomLocation(random)));
if (CheckPlayerInventory("Bow"))
{
if (CheckPlayerInventory("Quiver"))
;
else
WeaponInRoom = new Quiver(this, GetRandomLocation(random));
}
break;
}
Chciałbym uprościć nieco logikę i zastanawiałem się nad funkcjami dla każdego poziomiu typu void, ale jestem zbyt cienki w uszach i jeszcze i być może czegoś nie widzę, dlatego chciałbym się spytać, co o tym sądzicie, czy może są jakieś lepsze rozwiązania na takie gigantyczne switche? A może utworzyć oddzielną klasę dla każdego z poziomu? Z góry dziękuję za odpowiedź.