public void PunktBędącyNieckąNieMaNastępnika()
        {
            var aktualizator = new AktualizatorNastepstwaMapyWysokosci();
             IPunkt punktPoczatkowy = _mapa.Komorki.ElementAt(2).Punkt;
             punktPoczatkowy.Wysokosc = 0; // niecka
             _mapa.ZastosujPrzetwarzanie(aktualizator);
             IGeneratorRzeki generatorRzeki = new GeneratorRzeki(punktPoczatkowy);

             generatorRzeki.PunktPoczatkowy.Nastepnik.ShouldBeNull();
        }
        public void GdyDwieRzekiSi꣹cząTaKrótszaSięKończyADłuższaPłynieDalejGrubsza(bool najpierwKrotsza)
        {
            var aktualizator = new AktualizatorNastepstwaMapyWysokosci();
             IPunkt punktPoczatkowyKrotszej = _mapa.Komorki.ElementAt(3).Punkt;
             IPunkt punktPoczatkowyDluzszej = _mapa.Komorki.ElementAt(4).Punkt;
             _mapa.Rogi.ElementAt(1).Punkt.Sasiedzi.Remove(_mapa.Rogi.ElementAt(0).Punkt);
             _mapa.Rogi.ElementAt(2).Punkt.Sasiedzi.Remove(_mapa.Rogi.ElementAt(0).Punkt); // usuwamy te sąsiedztwa, żeby rzeka płynęła przez k2
             IPunkt ujscie = _mapa.Komorki.ElementAt(1).Punkt;
             ujscie.Wysokosc = 1.5f; // żeby mieć pewność, że z r3 spływa do k2, a nie do r2
             IRog brzeg = _mapa.Komorki.ElementAt(0).Rogi.First();
             brzeg.Dane.Brzeznosc = BrzeznoscRogu.Brzeg;
             _mapa.ZastosujPrzetwarzanie(aktualizator);

             IGeneratorRzeki generatorKrotszejRzeki = new GeneratorRzeki(punktPoczatkowyKrotszej);
             IGeneratorRzeki generatorDluzszejRzeki = new GeneratorRzeki(punktPoczatkowyDluzszej);
             IRzeka krotsza;
             IRzeka dluzsza;
             if (najpierwKrotsza)
             {
            _mapa.ZastosujPrzetwarzanie(generatorKrotszejRzeki as IPrzetwarzaczMapy);

            krotsza = _mapa.Rzeki.ElementAt(0);
            generatorKrotszejRzeki.UdaloSieUtworzyc.Value.ShouldBeTrue();
            krotsza.Odcinki.Last().PunktB.ShouldEqual(brzeg.Punkt);

            _mapa.ZastosujPrzetwarzanie(generatorDluzszejRzeki as IPrzetwarzaczMapy);
            dluzsza =  _mapa.Rzeki.ElementAt(1);
             }
             else
             {
            _mapa.ZastosujPrzetwarzanie(generatorDluzszejRzeki as IPrzetwarzaczMapy);

            dluzsza = _mapa.Rzeki.ElementAt(0);
            generatorDluzszejRzeki.UdaloSieUtworzyc.Value.ShouldBeTrue();
            dluzsza.Odcinki.Last().PunktB.ShouldEqual(brzeg.Punkt);

            _mapa.ZastosujPrzetwarzanie(generatorKrotszejRzeki as IPrzetwarzaczMapy);
            krotsza = _mapa.Rzeki.ElementAt(1);
             }

             generatorDluzszejRzeki.UdaloSieUtworzyc.Value.ShouldBeTrue();
             _mapa.Rzeki.Count().ShouldEqual(2);
             krotsza.Odcinki.Last().PunktB.ShouldEqual(ujscie);
             dluzsza.Odcinki.Last().PunktB.ShouldEqual(brzeg.Punkt);
             krotsza.Odcinki.Count.ShouldEqual(2); // k4-r3-k2
             dluzsza.Odcinki.Count.ShouldEqual(4); // k5-r4-r2-k2-r1
             krotsza.Odcinki.ToList().ForEach(o => o.Grubosc.ShouldEqual(GeneratorRzeki.GruboscJednostkowa));
             dluzsza.Odcinki.Take(3).ToList().ForEach(o => o.Grubosc.ShouldEqual(GeneratorRzeki.GruboscJednostkowa));
             krotsza.Odcinki.Skip(3).ToList().ForEach(o => o.Grubosc.ShouldEqual(GeneratorRzeki.GruboscJednostkowa*2));
        }
 public ProstyModyfikatorWysokosci()
 {
     Nastepnik = new AktualizatorNastepstwaMapyWysokosci();
 }
 public void UstawPunktomNastepstwaMapyWysokosci()
 {
     var aktualizator = new AktualizatorNastepstwaMapyWysokosci();
      aktualizator.Przetwarzaj(Poziom._mapa);
 }
        public void RzekaSpływającaDoNieckiNieTworzySię()
        {
            _mapa.Komorki.ElementAt(1).Punkt.Wysokosc = 0; // niecka
             var aktualizator = new AktualizatorNastepstwaMapyWysokosci();
             IPunkt punktPoczatkowy = _mapa.Komorki.ElementAt(2).Punkt;
             IGeneratorRzeki generatorRzeki = new GeneratorRzeki(punktPoczatkowy);
             _mapa.ZastosujPrzetwarzanie(aktualizator);

             _mapa.ZastosujPrzetwarzanie(generatorRzeki as IPrzetwarzaczMapy);

             generatorRzeki.UdaloSieUtworzyc.Value.ShouldBeFalse();
             _mapa.Rzeki.Count().ShouldEqual(0);
        }
        public void RzekaSpływającaDoMorzaPrzezKomorkeTworzySięPoprawnie(Podloze podlozeK2, TypKomorki typK2)
        {
            var aktualizator = new AktualizatorNastepstwaMapyWysokosci();
             IPunkt punktPoczatkowy = _mapa.Komorki.ElementAt(2).Punkt;
             _mapa.Komorki.ElementAt(1).Dane.Podloze = podlozeK2;
             _mapa.Komorki.ElementAt(1).Dane.Typ = typK2;
             IRog brzeg = _mapa.Komorki.ElementAt(0).Rogi.First();
             brzeg.Dane.Brzeznosc = BrzeznoscRogu.Brzeg;
             _mapa.ZastosujPrzetwarzanie(aktualizator);

             IGeneratorRzeki generatorRzeki = new GeneratorRzeki(punktPoczatkowy);
             _mapa.ZastosujPrzetwarzanie(generatorRzeki as IPrzetwarzaczMapy);

             generatorRzeki.UdaloSieUtworzyc.Value.ShouldBeTrue();
             _mapa.Rzeki.Count().ShouldEqual(1);
             _mapa.Rzeki.First().Odcinki.Last().PunktB.ShouldEqual(brzeg.Punkt);
             _mapa.Rzeki.First().Odcinki.Count.ShouldEqual(2); // k3-r2-r1
             _mapa.Komorki.ElementAt(2).Punkt.ZawieraRzeke.ShouldBeTrue();
             _mapa.Rogi.ElementAt(1).Punkt.ZawieraRzeke.ShouldBeTrue();
             _mapa.Rogi.ElementAt(0).Punkt.ZawieraRzeke.ShouldBeTrue();
        }