static void Main()
    {
        Knight sirKnigt = new Knight(4, 100);

        sirKnigt.AbilityUsedEvent += UseAbility;
        sirKnigt.AddXP(10);
        Wolf doge = new Wolf(sirKnigt.Level);

        Console.WriteLine(sirKnigt);
        Console.WriteLine(doge);
        Console.WriteLine();

        while (sirKnigt.IsAlive && doge.IsAlive)
        {
            var knightAttackLog = sirKnigt.DealDamage(doge);
            if (knightAttackLog.AttackPassed)
            {
                Console.WriteLine("{0} Remaining HP: {1}", knightAttackLog, doge.CurrentHitPoints);
            }

            var dogeAttackLog = doge.DealDamage(sirKnigt);
            if (dogeAttackLog.AttackPassed)
            {
                Console.WriteLine("{0} Remaining HP: {1}", dogeAttackLog, sirKnigt.CurrentHitPoints);
            }

            Console.WriteLine();

            sirKnigt.Update();
            doge.Update();
        }

        Console.WriteLine();
        Console.WriteLine(sirKnigt);
        Console.WriteLine(doge);

        Party newParty = new Party(sirKnigt, doge);

        newParty.AddToParty(new PetDog(2, 50));

        EnemyParty <Wolf> enemyParty = EnemyParty <Wolf> .GenerateParty(3, 2);

        Console.WriteLine(enemyParty[0]);

        SaveLoadSystem.LoadGameState();
    }