public void TestNormalElfCannotEvadeAttack() { Card normalElve = new Elve("elvgri", "Grimli Gohan", 60, ElementType.Normal); Card waterDragon = new Dragon("drasma", "Smaug", 180, ElementType.Water); bool evadesAttack = ((Elve)normalElve).EvadeAttackWhen(waterDragon); Assert.False(evadesAttack); }
public void TestFireElfCanEvadeAttack() { Card fireElve = new Elve("elverl", "Erlan Erhice", 50, ElementType.Fire); Card waterDragon = new Dragon("drabal", "Balrog", 150, ElementType.Water); bool evadesAttack = ((Elve)fireElve).EvadeAttackWhen(waterDragon); Assert.True(evadesAttack); }
public void TestWaterIsEffectiveAgainstFire() { // Arrange Card fireElve = new Elve("elverl", "Erlan Erhice", 70, ElementType.Water); Card waterDragon = new Dragon("drabal", "Balrog", 130, ElementType.Fire); double waterIsEffectiveAgainstFire = _elementService.CompareElements(fireElve.Type, waterDragon.Type); // Assert Assert.AreEqual(_effective, waterIsEffectiveAgainstFire); }
private string Round(ref CardDeck deck1, ref CardDeck deck2, string username1, string username2) { Card card1Deck = deck1.GetRandomCard(); Card card2Deck = deck2.GetRandomCard(); // create new cards instead of references Card card1 = card1Deck switch { Dragon d => new Dragon(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type), Elve e => new Elve(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type), Goblin g => new Goblin(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type), Knight k => new Knight(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type), Kraken k => new Kraken(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type), Orc o => new Orc(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type), Wizard w => new Wizard(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type), FireSpell f => new FireSpell(card1Deck.ID, card1Deck.Name, card1Deck.Damage), NormalSpell n => new NormalSpell(card1Deck.ID, card1Deck.Name, card1Deck.Damage), WaterSpell w => new WaterSpell(card1Deck.ID, card1Deck.Name, card1Deck.Damage), }; Card card2 = card2Deck switch { Dragon d => new Dragon(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type), Elve e => new Elve(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type), Goblin g => new Goblin(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type), Knight k => new Knight(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type), Kraken k => new Kraken(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type), Orc o => new Orc(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type), Wizard w => new Wizard(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type), FireSpell f => new FireSpell(card2Deck.ID, card2Deck.Name, card2Deck.Damage), NormalSpell n => new NormalSpell(card2Deck.ID, card2Deck.Name, card2Deck.Damage), WaterSpell w => new WaterSpell(card2Deck.ID, card2Deck.Name, card2Deck.Damage), }; //card1.Damage = card1.Damage * _elementEffectivenessService.CompareElements(card1.Type, card2.Type); //card2.Damage = card2.Damage * _elementEffectivenessService.CompareElements(card2.Type, card1.Type); card1.EnhanceDamage(_elementEffectivenessService.CompareElements(card1.Type, card2.Type)); card2.EnhanceDamage(_elementEffectivenessService.CompareElements(card2.Type, card1.Type)); // without special abilities /*int card1wins = card1 switch * { * IMonster monster => monster.CompareDamage(card2.Damage) ? 1 : -1, * ISpell spell => spell.CompareDamage(card2.Damage) ? 1 : -1, * _ => 0 * };*/ Random random = new Random(); bool boosterCard1 = (random.Next(1, 21) == 20); if (boosterCard1) { //card1.Damage = card1.Damage * 10; card1.EnhanceDamage(10); } int card1wins = card1 switch { IMonster _ when card2 is IMonster => FightMonsterMonster(card1, card2), IMonster _ when card1 is ISpell => FightMonsterSpell(card1, card2), ISpell _ when card2 is IMonster => FightSpellMonster(card2, card1), _ => FightSpellSpell(card1, card2) }; string roundLog; if (card1wins == 1) { deck1.AddCard(card2Deck, true); deck2.RemoveCard(card2Deck); if (boosterCard1) { roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") won with a booster against " + card2Deck.ToBattleString() + " (" + username2 + ")"); } else { roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") won against " + card2Deck.ToBattleString() + " (" + username2 + ")"); } } else if (card1wins == -1) { deck2.AddCard(card1Deck, true); deck1.RemoveCard(card1Deck); if (boosterCard1) { roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") lost although a booster to " + card2Deck.ToBattleString() + " (" + username2 + ")"); } else { roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") lost to " + card2Deck.ToBattleString() + " (" + username2 + ")"); } } else { if (boosterCard1) { roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") drew although a booster with " + card2Deck.ToBattleString() + " (" + username2 + ")"); } else { roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") drew with " + card2Deck.ToBattleString() + " (" + username2 + ")"); } } return(roundLog); }