示例#1
0
 private void sprawdzWygrana()
 {
     plansza.uaktualnijTempPlanszy(plansza.stan);
     operacje.generujBiciaWilkow(1, plansza);
     operacje.generujMozliweRuchyWilkow(1, plansza);
     if (operacje.ListaBic.Count == 0 && operacje.ListaRuchow.Count == 0)
     {
         koniecGry kg = new koniecGry(true, this);
         kg.Show();
         this.Close();
     }
 }
        public void utworzDrzewo2(Wezel wezel, int poziom, int zawodnik, bool Min, bool Max)
        {
            operacje.ListaRuchow.Clear();
            operacje.ListaBic.Clear();

            int  przeciwnik = -1;
            bool Min2       = false;
            bool Max2       = true;

            if (zawodnik == 1)
            {
                przeciwnik = 2;
            }
            else if (zawodnik == 2)
            {
                przeciwnik = 1;
            }

            if (Min == false && Max == true && poziom != 0)
            {
                Min2 = true;
                Max2 = false;
            }
            else if (Min == true && Max == false && poziom != 0)
            {
                Min2 = false;
                Max2 = true;
            }

            if (poziom < ilePoziomow)
            {
                if (poziom == 0)
                {
                    operacje.generujBiciaWilkow(1, this.plansza_poczatkowa);
                    // dodajemy jako potomkow mozliwe bicia
                    for (int j = 0; j < operacje.ListaBic.Count; j++)
                    {
                        //Console.WriteLine("poziom "+poziom+" kulka: " + j + ": dodaje wezel bicia: [" + operacje.ListaBic[j].skad.x + "," + operacje.ListaBic[j].skad.y + "] -->" + "[" + operacje.ListaBic[j].dokad.x + "," + operacje.ListaBic[j].dokad.y + "]");
                        wezel.dodajWezel(operacje.ListaBic.ElementAt(j), false, true, zawodnik, operacje, 0);
                    }

                    if (operacje.ListaBic.Count == 0) //tylko jeśli nie ma bić to dodajemy jako potomkow mozliwe ruchy
                    {
                        operacje.generujMozliweRuchyWilkow(1, this.plansza_poczatkowa);
                        for (int j = 0; j < operacje.ListaRuchow.Count; j++)
                        {
                            //Console.WriteLine("poziom " + poziom+ " kulka: " + j + ": dodaje wezel ruchu: [" + operacje.ListaRuchow[j].skad.x + "," + operacje.ListaRuchow[j].skad.y + "] -->" + "["+ operacje.ListaRuchow[j].dokad.x + "," + operacje.ListaRuchow[j].dokad.y + "]");
                            root.dodajWezel(operacje.ListaRuchow.ElementAt(j), false, true, zawodnik, operacje, 0);
                        }
                    }
                    // wywolanie rekurencyjne dla potomkow
                    for (int i = 0; i < wezel.lista_potomkow.Count; i++)
                    {
                        utworzDrzewo2(wezel.lista_potomkow.ElementAt(i), poziom + 1, przeciwnik, true, false);
                    }
                }
                else
                {
                    operacje.ListaRuchow.Clear();
                    operacje.ListaBic.Clear();
                    //dla owiec
                    if (Min == true && Max == false)
                    {
                        //Console.WriteLine("poziom " + poziom + " pusty node na owiec");
                        Ruch r = new Ruch();
                        r.skad.x  = 1;
                        r.skad.y  = 0;
                        r.dokad.x = 1;
                        r.dokad.y = 0;
                        //wezel.plansza.pokazStanPlanszy();
                        wezel.dodajWezel(r, Min, Max, 2, operacje, 0);

                        for (int i = 0; i < wezel.lista_potomkow.Count; i++)
                        {
                            utworzDrzewo2(wezel.lista_potomkow.ElementAt(i), poziom + 1, przeciwnik, Min2, Max2);
                        }
                    }
                    //dla wilkow
                    if (Max == true && Min == false)
                    {
                        operacje.generujBiciaWilkow(zawodnik, wezel.plansza);

                        for (int j = 0; j < operacje.ListaBic.Count; j++)
                        {
                            //Console.WriteLine("poziom " + poziom + " kulka: " + j + ": dodaje wezel bicia: [" + operacje.ListaBic[j].skad.x + "," + operacje.ListaBic[j].skad.y + "] -->" + "[" + operacje.ListaBic[j].dokad.x + "," + operacje.ListaBic[j].dokad.y + "]");
                            wezel.dodajWezel(operacje.ListaBic.ElementAt(j), Min, Max, 1, operacje, 1);
                        }

                        if (operacje.ListaBic.Count == 0)//tylko jeśli nie ma bić to dodajemy jako potomkow mozliwe ruchy
                        {
                            operacje.generujMozliweRuchyWilkow(zawodnik, wezel.plansza);
                            for (int j = 0; j < operacje.ListaRuchow.Count; j++)
                            {
                                //Console.WriteLine("poziom " + poziom + " kulka: " + j + ": dodaje wezel ruchu: [" + operacje.ListaRuchow[j].skad.x + "," + operacje.ListaRuchow[j].skad.y + "] -->" + "[" + operacje.ListaRuchow[j].dokad.x + "," + operacje.ListaRuchow[j].dokad.y + "]");
                                wezel.dodajWezel(operacje.ListaRuchow.ElementAt(j), Min, Max, 1, operacje, 0);
                            }
                        }
                        for (int i = 0; i < wezel.lista_potomkow.Count; i++)
                        {
                            utworzDrzewo2(wezel.lista_potomkow.ElementAt(i), poziom + 1, przeciwnik, Min2, Max2);
                        }
                    }
                }
            }
        }