/// <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ę); } }