コード例 #1
0
 private static GraphicsPath AlsPfad(Control woBinIch, LevelArchitekturPfad architekturPfad)
 {
     return(architekturPfad.AlsGrafikPfad(
                woBinIch.ClientSize.Width / 2,
                woBinIch.ClientSize.Height / 2
                ));
 }
コード例 #2
0
        private void LevelDateiLaden(int levelNummer)
        {
            var levelDateiName = this.GetLevelDateiname(levelNummer);

            if (levelDateiName != null)
            {
                using (var levelDatei = Assembly.GetExecutingAssembly().GetManifestResourceStream(
                           typeof(RessourcenKlasse),
                           $@"Levels.{ levelDateiName }"
                           ))
                {
                    using (var levelReader = new StreamReader(levelDatei))
                    {
                        string levelZeile;
                        var    aktuellesMaterial = Medium.Berg;
                        while (!string.IsNullOrEmpty((levelZeile = levelReader.ReadLine())))
                        {
                            levelZeile = levelZeile.Trim();
                            if (!levelZeile.StartsWith(kommentarPrefix))
                            {
                                var levelZeileTeile = levelZeile.Split(' ');
                                if (Enum.TryParse <Medium>(levelZeileTeile[0], ignoreCase: true, out Medium neuesMedium))
                                {
                                    aktuellesMaterial = neuesMedium;
                                }
                                else
                                {
                                    this.Pfade.Add(LevelArchitekturPfad.AusLevelDatei(aktuellesMaterial, levelZeile));
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #3
0
        private static void ZeichneGras(Control woBinIch, Graphics zeichenFlaeche, LevelArchitekturPfad architekturPfad)
        {
            PointF grasPunktGenau;
            var    random     = new Random();
            var    grafikPfad = LevelZeichner.AlsPfad(woBinIch, architekturPfad);

            if (grafikPfad.PointCount == 2)
            {
                var sodeAnfang      = grafikPfad.PathPoints[0];
                var sodeEndpkt      = grafikPfad.PathPoints[1];
                var letztesBlatt    = PointF.Empty;
                var ueberLappung    = PointF.Empty;
                var ersterDurchlauf = true;
                foreach (var grasPunkt in LinienFolger.Bresenham(
                             (int)sodeAnfang.X,
                             (int)sodeAnfang.Y,
                             (int)sodeEndpkt.X,
                             (int)sodeEndpkt.Y
                             ))
                {
                    grasPunktGenau = new PointF(grasPunkt.X, grasPunkt.Y);
                    if (ersterDurchlauf)
                    {
                        letztesBlatt    = sodeAnfang;
                        ersterDurchlauf = false;
                    }
                    else
                    {
                        LevelZeichner.RechneBlattPosition(zeichenFlaeche, random, grasPunktGenau, ref letztesBlatt, ref ueberLappung);
                    }
                }

                ersterDurchlauf = true;
                foreach (var grasPunkt in LinienFolger.Bresenham(
                             (int)sodeEndpkt.X,
                             (int)sodeEndpkt.Y,
                             (int)sodeAnfang.X,
                             (int)sodeAnfang.Y
                             ))
                {
                    grasPunktGenau = new PointF(grasPunkt.X, grasPunkt.Y);
                    if (ersterDurchlauf)
                    {
                        letztesBlatt    = sodeEndpkt;
                        ersterDurchlauf = false;
                    }
                    else
                    {
                        LevelZeichner.RechneBlattPosition(zeichenFlaeche, random, grasPunktGenau, ref letztesBlatt, ref ueberLappung);
                    }
                }

                zeichenFlaeche.DrawPath(Pens.LimeGreen, grafikPfad);
            }
        }
コード例 #4
0
        private static void ZeichneEi(Control woBinIch, Graphics zeichenFlaeche, LevelArchitekturPfad architekturPfad)
        {
            var grafikPfad = LevelZeichner.AlsPfad(woBinIch, architekturPfad);

            if (architekturPfad.IstGefuellt)
            {
                zeichenFlaeche.FillEllipse(
                    Farbverwaltung.BuersteVonMedium(architekturPfad.terrainMaterial),
                    grafikPfad.PathPoints[0].X,
                    grafikPfad.PathPoints[0].Y,
                    Math.Abs(grafikPfad.PathPoints[1].X - grafikPfad.PathPoints[0].X) + 1,
                    Math.Abs(grafikPfad.PathPoints[1].Y - grafikPfad.PathPoints[0].Y) + 1
                    );
            }

            zeichenFlaeche.DrawEllipse(
                Farbverwaltung.StiftVonMedium(architekturPfad.terrainMaterial, architekturPfad.StiftDicke),
                grafikPfad.PathPoints[0].X,
                grafikPfad.PathPoints[0].Y,
                Math.Abs(grafikPfad.PathPoints[1].X - grafikPfad.PathPoints[0].X) + 1,
                Math.Abs(grafikPfad.PathPoints[1].Y - grafikPfad.PathPoints[0].Y) + 1
                );
        }
コード例 #5
0
        private static void ZeichneGummiband(Control woBinIch, Graphics zeichenFlaeche, LevelArchitekturPfad architekturPfad)
        {
            var grafikPfad = LevelZeichner.AlsPfad(woBinIch, architekturPfad);

            if (architekturPfad.IstRechteck || architekturPfad.IstGefuellt)
            {
                /* gefüllt geht nur als geschlossene kurva */
                if (architekturPfad.IstGefuellt)
                {
                    zeichenFlaeche.FillClosedCurve(
                        Farbverwaltung.BuersteVonMedium(architekturPfad.terrainMaterial),
                        grafikPfad.PathPoints,
                        FillMode.Alternate,
                        0.62f
                        );
                }

                zeichenFlaeche.DrawClosedCurve(
                    Farbverwaltung.StiftVonMedium(architekturPfad.terrainMaterial, architekturPfad.StiftDicke),
                    grafikPfad.PathPoints,
                    0.62f,
                    FillMode.Alternate
                    );
            }
            else
            {
                zeichenFlaeche.DrawCurve(
                    Farbverwaltung.StiftVonMedium(architekturPfad.terrainMaterial, architekturPfad.StiftDicke),
                    grafikPfad.PathPoints,
                    0.62f
                    );
            }
        }
コード例 #6
0
        private static void ZeichnePfad(Control woBinIch, Graphics zeichenFlaeche, LevelArchitekturPfad architekturPfad)
        {
            var grafikPfad = LevelZeichner.AlsPfad(woBinIch, architekturPfad);

            if (architekturPfad.IstPunkt)
            {
                zeichenFlaeche.DrawLine(
                    Farbverwaltung.StiftVonMedium(architekturPfad.terrainMaterial, architekturPfad.StiftDicke),
                    grafikPfad.PathPoints[0],
                    grafikPfad.PathPoints[0]
                    );
            }
            else if (architekturPfad.IstLinie)
            {
                if (architekturPfad.IstRechteck)
                {
                    if (architekturPfad.IstGefuellt)
                    {
                        zeichenFlaeche.FillRectangle(
                            Farbverwaltung.BuersteVonMedium(architekturPfad.terrainMaterial),
                            grafikPfad.PathPoints[0].X,
                            grafikPfad.PathPoints[0].Y,
                            Math.Abs(grafikPfad.PathPoints[1].X - grafikPfad.PathPoints[0].X) + 1,
                            Math.Abs(grafikPfad.PathPoints[1].Y - grafikPfad.PathPoints[0].Y) + 1
                            );
                    }

                    zeichenFlaeche.DrawRectangle(
                        Farbverwaltung.StiftVonMedium(architekturPfad.terrainMaterial, architekturPfad.StiftDicke),
                        grafikPfad.PathPoints[0].X,
                        grafikPfad.PathPoints[0].Y,
                        Math.Abs(grafikPfad.PathPoints[1].X - grafikPfad.PathPoints[0].X) + 1,
                        Math.Abs(grafikPfad.PathPoints[1].Y - grafikPfad.PathPoints[0].Y) + 1
                        );
                }
                else
                {
                    zeichenFlaeche.DrawLine(
                        Farbverwaltung.StiftVonMedium(architekturPfad.terrainMaterial, architekturPfad.StiftDicke),
                        grafikPfad.PathPoints[0],
                        grafikPfad.PathPoints[1]
                        );
                }
            }
            else
            {
                if (architekturPfad.IstGefuellt)
                {
                    zeichenFlaeche.FillPath(
                        Farbverwaltung.BuersteVonMedium(architekturPfad.terrainMaterial),
                        grafikPfad
                        );
                }
                else
                {
                    zeichenFlaeche.DrawPath(
                        Farbverwaltung.StiftVonMedium(architekturPfad.terrainMaterial, architekturPfad.StiftDicke),
                        grafikPfad
                        );
                }
            }
        }