コード例 #1
0
        /// <summary>
        /// Konstruktor, uruchamia się przy tworzeniu okna
        /// </summary>
        public MainPage()
        {
            this.InitializeComponent();
            Debug = new TextBoxTraceListener(debug);

            // tworzenie nowego obiektu i nadawanie jego cech poprzez konstruktor
            // domyślny lub z parametrami. konstruktor może rzucić ArgumentOutOfRangeException
            // i z tego powodu obejmujemy to w blok try..catch i pokazujemy komunikat
            // w razie wyjątku
            //try
            //{
            //    zwierze1 = new ArmiaChomików(100);
            //}
            //catch (ArgumentOutOfRangeException ex)
            //{
            //    MessageDialog m = new MessageDialog("błąd, wyjątek! " + ex.Message);
            //    m.ShowAsync();
            //}

            zwierze1 = new ChomikSzaman("Pucuś", 10);
            zwierze2 = new Jednorożec("Rafał", 5);

            // subskrybowanie zdarzenia, że zwierzę jest martwe i uruchamianie wtedy
            // odpowiedniej funkcji
            zwierze1.ZwierzęMartwe += OnZwierzeDead;
            zwierze2.ZwierzęMartwe += OnZwierzeDead;
        }
コード例 #2
0
        /// <summary>
        /// Konstruktor klasy głównego okienka aplikacji
        /// </summary>
        public MainWindow()
        {
            // to jest standardowa metoda ustawiająca komponenty
            InitializeComponent();

            // tutaj się dzieje nieistotna magia - przekierowywany jest strumień informacji testowych
            // do pola tekstowego w okienku aplikacji
            TraceListener debugListener = new Ktos.Common.TextBoxTraceListener(tbLog);
            Debug.Listeners.Add(debugListener);

            // tworzone są nowe instancje walczących zwierzątek
            ////gracz1 = new ChomikSzaman("Pimpuś", 100);
            gracz1 = new ArmiaChomików(300);
            gracz2 = new Jednorożec("Rafał", 15);

            // subskrybujemy zdarzenie Zmarł - kiedy jednorożec padnie,
            // będziemy pokazywać komunikat
            // tutaj użyta jest wersja z funkcją anonimową
            gracz2.Zmarł += (sender) =>
            {
                MessageBox.Show(string.Format("{0} nie żyje!", sender.Imię));
            };

            // wersja alternatywna - z oddzielną funkcją obsługującą zdarzenie
            gracz2.Zmarł += Gracz2_Zmarł;
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
 private void OnZwierzeDead(Zwierzę sender)
 {
     MessageDialog m = new MessageDialog("Padło nam :(\n" + sender.Imię);
     m.ShowAsync();
 }
コード例 #5
0
 /// <summary>
 /// Funkcja obsługująca zdarzenie śmierci jednego z graczy
 /// </summary>
 /// <param name="sender">Obiekt, który wysłał zdarzenie Zmarł</param>
 private void Gracz2_Zmarł(Zwierzę sender)
 {
     MessageBox.Show(string.Format("{0} nie żyje!", sender.Imię));
 }
コード例 #6
0
        /// <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ę);
            }
        }