/// <summary>
        /// Funkcja realizująca atak jednego gracza na drugiego
        /// </summary>
        /// <param name="atakujący">Obiekt który jest atakujący</param>
        /// <param name="cel">Obiekt który jest atakowany</param>
        private void Atak(Zwierzę atakujący, Zwierzę cel)
        {
            Random r = new Random();
            var d = r.NextDouble();

            // mówi czy atak nastąpił, czy mamy testować dalej
            bool czyAtakował = false;

            // dla Zwierzęcia Magicznego 20% szans ataku magicznego
            if ((atakujący is ZwierzęMagiczne) && (d > 0.8))
            {
                // spróbuj zaatakować magicznie
                try
                {
                    (atakujący as ZwierzęMagiczne).AtakujMagicznie(cel);

                    Debug.WriteLine(atakujący.Imię + " zaatakował magią!");
                    czyAtakował = true;
                }
                // jeżeli wystąpi wyjątek NoManaException, przechwyć go
                // i pokaż w liście zdarzeń odpowiedni komunikat
                catch (NoManaException)
                {
                    Debug.WriteLine("Nie ma już many!");
                }
            }

            // jeżeli nie udało się, a atakujący lata, to może zużyć swój ruch
            // na start do lotu z 40% szans na powodzenie - start też jest uznawany
            // za atak, mimo, że nie zadaje obrażeń
            if (!czyAtakował && (atakujący is ILatający) && (d > 0.6))
            {
                if (!(atakujący as ILatający).CzyLata)
                {
                    (atakujący as ILatający).Lataj();
                    Debug.WriteLine(atakujący.Imię + " odleciał!");
                    czyAtakował = true;
                }
            }

            // jeśli nie zaatakował w żaden specjalny sposób, gryzie
            if (!czyAtakował)
                atakujący.Gryź(cel);
        }
        /// <summary>
        /// Obsługa kolejnej tury - gracz atakuje graczDrugi, losując typ ataku w zależności od jego umiejętności
        /// </summary>
        /// <param name="gracz">Gracz atakujący</param>
        /// <param name="graczDrugi">Gracz atakowany</param>
        private void Tura(Zwierzę gracz, Zwierzę graczDrugi)
        {
            Random r = new Random();
            var w = r.Next(10);
            var zaatakował = false;

            if (gracz is ZwierzęMagiczne)
            {
                // 30% szans na atak magiczny
                if (w >= 7)
                {
                    (gracz as ZwierzęMagiczne).AtakujMagicznie(graczDrugi);
                    Debug.WriteLine("{0} zaatakował magicznie {1}!", gracz.Imię, graczDrugi.Imię);
                    zaatakował = true;
                }
            }

            if (gracz is ILatający)
            {
                // 20% szans na odlot
                if (w >= 8 && !zaatakował)
                {
                    try
                    {
                        (gracz as ILatający).Lataj();
                        Debug.WriteLine(string.Format("{0} odleciał!", gracz.Imię));
                    }
                    catch (HorseCannotIntoSkyException) // jeżeli wystąpił wyjątek, że koń nie może polecieć
                    {
                        Debug.WriteLine("Koń za słaby, aby latać!"); // pokazujemy komunikat
                    }
                    finally
                    {
                        zaatakował = true; // niezależnie, czy poleciał, czy nie, uznajemy, że jego tura się kończy
                    }
                }
            }

            // jeżeli nie zaatakował wcześniej w inny sposób, to po prostu gryzie
            if (!zaatakował)
            {
                gracz.Gryź(graczDrugi);
                Debug.WriteLine("{0} ugryzł {1}!", gracz.Imię, graczDrugi.Imię);
            }
        }