Итак, я работаю над текстовым приключением, чтобы улучшить свои навыки программирования (только новичок), и я работал над новой боевой системой, потому что старая была очень скучной. Таким образом, я наткнулся на систему ножниц для каменной бумаги, но мне нужно было что-то, что использовало ножницы для каменной бумаги, такие как система с 5 вариантами для игрока на выбор, а также противник или монстр, атакующий игрока.Есть ли способ сделать это более эффективным?
Я использовал множество утверждений if, которые на самом деле не занимали слишком много времени, но мне интересно, есть ли лучший способ сделать это, чтобы мой код был более эффективным и не таким большим.
public static void ResultsOfMoves(string PlayerMove, string MonsterMove, Monster CurrentMonster, Weapon CurrentWeapon, Armor CurrentArmor, Player CurrentPlayer)
{
//Monster Responses to Player
if (PlayerMove == "dodge" && MonsterMove == "heavy"||MonsterMove == "stealth")
{
if (MonsterMove == "heavy") { MonsterHeavyAttack(); }
if (MonsterMove == "stealth") { MonsterStealthAttack(); }
}
else if (PlayerMove == "charge" && MonsterMove == "dodge"||MonsterMove == "stealth")
{
if (MonsterMove == "dodge") { MonsterDodge(); }
if (MonsterMove == "stealth") { MonsterStealthAttack(); }
}
else if (PlayerMove == "block" && MonsterMove == "charge" || MonsterMove == "dodge")
{
if (MonsterMove == "charge") { MonsterChargeAttack(); }
if (MonsterMove == "dodge") { MonsterDodge(); }
}
else if (PlayerMove == "heavy" && MonsterMove == "block" || MonsterMove == "charge")
{
if (MonsterMove == "block") { MonsterBlock(); }
if (MonsterMove == "charge") { MonsterChargeAttack(); }
}
else if (PlayerMove == "stealth" && MonsterMove == "heavy" || MonsterMove == "block")
{
if (MonsterMove == "heavy") { MonsterHeavyAttack(); }
if (MonsterMove == "block") { MonsterBlock(); }
}
//Players Responses To Monster
if (MonsterMove == "dodge" && PlayerMove == "heavy" || PlayerMove == "stealth")
{
if (PlayerMove == "heavy") { MonsterHeavyAttack(); }
if (PlayerMove == "stealth") { MonsterStealthAttack(); }
}
else if (MonsterMove == "charge" && PlayerMove == "dodge" || PlayerMove == "stealth")
{
if (PlayerMove == "dodge") { MonsterDodge(); }
if (PlayerMove == "stealth") { MonsterStealthAttack(); }
}
else if (MonsterMove == "block" && PlayerMove == "charge" || PlayerMove == "dodge")
{
if (PlayerMove == "charge") { MonsterChargeAttack(); }
if (PlayerMove == "dodge") { MonsterDodge(); }
}
else if (MonsterMove == "heavy" && PlayerMove == "block" || PlayerMove == "charge")
{
if (PlayerMove == "block") { MonsterBlock(); }
if (PlayerMove == "charge") { MonsterChargeAttack(); }
}
else if (MonsterMove == "stealth" && PlayerMove == "heavy" || PlayerMove == "block")
{
if (PlayerMove == "heavy") { MonsterHeavyAttack(); }
if (PlayerMove == "block") { MonsterBlock(); }
}
}
Есть много способов сделать это более эффективным. Например, если вы использовали перечисления вместо строк, вы были бы гораздо более компактными. Также вы можете создавать таблицы указателей функций (делегаты в C#) и просто искать следующее действие в словаре и выполнять его в одной строке кода. Я позволю кому-то более актуальному на C# проиллюстрировать это с помощью кода. –
Это может быть лучше помещено в Exchange Programmers. –
@Makoto: Это может быть C++, чей 'std :: string class' поддерживает сравнения, используя' == '. OP, можете ли вы добавить языковой тег? –