Exemplo n.º 1
0
        public IList <Zauber> KlerikerZauberErstellen(int stufe, int glueck, bool launenDerMagie, Random random)
        {
            if (stufe < 1 || stufe > 10)
            {
                throw new ArgumentOutOfRangeException(nameof(stufe), "Muss zwischen 1 und 10 liegen.");
            }

            Func <ZauberTemplate, Zauber> zauberErstellen = x =>
            {
                var zauber = new Zauber(x)
                {
                    Manifestation = GetManifestation(x)
                };
                if (launenDerMagie)
                {
                    zauber.LaunenDerMagie = CreateLaunenDerMagie(glueck);
                }
                else
                {
                    zauber.LaunenDerMagie = new List <LauneDerMagie>();
                }
                return(zauber);
            };

            var anzahlZauber = AnzahlKlerikerZauber(stufe);

            return(Enumerable.Range(1, 5).SelectMany(x => Shuffle(ZauberTemplate.Get(Zaubertyp.Klerikerzauber, x), random).Select(zauberErstellen).Take(anzahlZauber[x])).ToList());
        }
Exemplo n.º 2
0
        public IList <Zauber> ZauberkundigenZauberErstellen(int stufe, int glueckMod, int intelligenz, Random random)
        {
            if (stufe < 1 || stufe > 10)
            {
                throw new ArgumentOutOfRangeException(nameof(stufe), "Muss zwischen 1 und 10 liegen.");
            }

            Zauber zauberErstellen(ZauberTemplate zt) => new Zauber(zt)
            {
                LaunenDerMagie = CreateLaunenDerMagie(glueckMod),
                Manifestation  = GetManifestation(zt)
            };

            var anzahlZauber = AnzahlZauberkundigenZauber(stufe, intelligenz);
            var zg1          = Shuffle(ZauberTemplate.Get(Zaubertyp.Zauberkundigenzauber, 1), random);
            var zauberGrad1  = zg1.Select(zauberErstellen).Take(anzahlZauber.Stufe1).ToList();

            // Anrufung und Pakt zählen als ein Zauber
            var patron = zauberGrad1.Where(x => x.Wurf == 1 || x.Wurf == 14).Sum(x => x.Wurf);

            if (patron == 1)
            {
                zauberGrad1.Add(zg1.Where(x => x.Wurf == 14).Select(zauberErstellen).First());
            }
            else if (patron == 14)
            {
                zauberGrad1.Add(zg1.Where(x => x.Wurf == 1).Select(zauberErstellen).First());
            }
            else if (patron == 15)
            {
                zauberGrad1.Add(zg1.Skip(zauberGrad1.Count).Select(zauberErstellen).First());
            }
            else if (zauberGrad1.Any(x => x.Wurf == 27)) // Patronzauber ohne Patron. Ein neuer Zauber wird gewürfelt
            {
                var neuerZauber = zg1.Skip(zauberGrad1.Count).Select(zauberErstellen).First();
                if (neuerZauber.Wurf == 1)
                {
                    zauberGrad1.Add(zg1.Where(x => x.Wurf == 14).Select(zauberErstellen).First());
                }
                else if (neuerZauber.Wurf == 14)
                {
                    zauberGrad1.Add(zg1.Where(x => x.Wurf == 1).Select(zauberErstellen).First());
                }
                zauberGrad1.Add(neuerZauber);

                zauberGrad1 = zauberGrad1.Where(x => x.Wurf != 27).ToList();
            }

            var grad2bis5 = Enumerable.Range(2, 4).SelectMany(x => Shuffle(ZauberTemplate.Get(Zaubertyp.Zauberkundigenzauber, x), random).Where(x => x.Wurf != 99 || patron > 0).Select(zauberErstellen).Take(anzahlZauber[x])).ToList();

            return(zauberGrad1.Concat(grad2bis5).ToList());
        }
Exemplo n.º 3
0
        public IList <Zauber> ElfenZauberErstellen(int stufe, int intelligenz, Random random)
        {
            Zauber zauberErstellen(ZauberTemplate zt) =>
            new Zauber(zt)
            {
                LaunenDerMagie = CreateLaunenDerMagie(0),     // Glück wird erstmal nicht angerechnet bei Elfen. Das Regelwerk ist da nicht ganz eindeutig.
                Manifestation  = GetManifestation(zt)
            };


            if (stufe < 1 || stufe > 10)
            {
                throw new ArgumentOutOfRangeException(nameof(stufe), "Muss zwischen 1 und 10 liegen.");
            }

            var anzahlZauber = AnzahlElfZauber(stufe, intelligenz);
            var zg1          = Shuffle(ZauberTemplate.Get(Zaubertyp.Zauberkundigenzauber, 1), random);
            var patronZauber = zg1.Where(x => x.Wurf == 1 || x.Wurf == 14).Select(zauberErstellen);
            var zauberGrad1  = zg1.Where(x => x.Wurf != 1 && x.Wurf != 14).Select(zauberErstellen).Take(anzahlZauber.Stufe1);
            var grad2bis5    = Enumerable.Range(2, 4).SelectMany(x => Shuffle(ZauberTemplate.Get(Zaubertyp.Zauberkundigenzauber, x), random).Select(zauberErstellen).Take(anzahlZauber[x])).ToList();

            return(patronZauber.Concat(zauberGrad1).Concat(grad2bis5).ToList());
        }
Exemplo n.º 4
0
 public Zauber(ZauberTemplate zauberTemplate) : this(zauberTemplate.Wurf, zauberTemplate.Seite, zauberTemplate.Name, zauberTemplate.Beschreibung)
 {
 }