Exemplo n.º 1
0
        /// <summary>
        /// Prüft, ob der Befehl "EINHEIT einheitennr" passt und die entsprechende Faktion
        /// berechtigt ist, diese Einheit zu befehligen.
        /// Liefert bei Erfolg die passende Einheit zurück, sonst null.
        /// </summary>
        /// <param name="teile">Ein string-Array mit den vier Bestandteilen des Befehls</param>
        /// <param name="f">Die aktive Faktion</param>
        /// <returns>Die passende Einheit, sonst null</returns>
        static Einheit PrüfeBefehlEinheit(string[] teile, Faktion f)
        {
            if (teile.Length < 2 || f == null)
            {
                return(null);
            }
            int einheitennummer = -1;

            if (!int.TryParse(teile[1], out einheitennummer))
            {
                return(null);
            }
            Einheit einheit = SpaceGame.FindeEinheit(einheitennummer);

            if (einheit == null)
            {
                return(null);
            }
            if (einheit.Faktion != f)
            {
                Console.WriteLine("Falsche Faktion für Einheit " + einheit.Nummer);
                return(null);
            }
            return(einheit);
        }
Exemplo n.º 2
0
        static void TestdatenErzeugen()
        {
            SpaceGame.Daten.Sektoren               = new List <Sektor>();
            SpaceGame.Daten.Faktionen              = new List <Faktion>();
            SpaceGame.Daten.NächsteFaktionsNummer  = 1;
            SpaceGame.Daten.NächsteEinheitenNummer = 1;

            Sektor s0 = new Sektor();

            s0.Name     = "Milchstrasse";
            s0.X        = 0;
            s0.Y        = 0;
            s0.Metall   = 100000;
            s0.Spookies = 20000;
            s0.Bewohner = 3244;

            Sektor s1 = new Sektor();

            s1.Name     = "Beteigeuze";
            s1.X        = 0;
            s1.Y        = 1;
            s1.Metall   = 100000;
            s1.Spookies = 200;
            s1.Bewohner = 30;

            Sektor s2 = new Sektor();

            s2.Name     = "Rigel";
            s2.X        = 1;
            s2.Y        = 0;
            s2.Metall   = 50;
            s2.Spookies = 1000;
            s2.Bewohner = 300;

            SpaceGame.Daten.Sektoren.Add(s0);
            SpaceGame.Daten.Sektoren.Add(s1);
            SpaceGame.Daten.Sektoren.Add(s2);

            Faktion polizei = new Faktion("poli", "zei", "Raumpolizei");
            Faktion piraten = new Faktion("pi", "raten", "FiesRaumPiraten");

            SpaceGame.Daten.Faktionen.Add(polizei);
            SpaceGame.Daten.Faktionen.Add(piraten);

            Einheit streifealpha = new Einheit(polizei, "Weltraumstreife Alpha");

            streifealpha.Mitglieder = 10;
            streifealpha.Metall     = 1000;
            streifealpha.Spookies   = 1000;
            s0.Einheiten.Add(streifealpha);

            Einheit pirat1 = new Einheit(piraten, "Raumbart der Schreckliche");

            pirat1.Mitglieder = 1;
            pirat1.Metall     = 100000;
            pirat1.Spookies   = 333333;
            s0.Einheiten.Add(pirat1);

            Einheit pirat2 = new Einheit(piraten, "Quatschibus Crew");

            pirat2.Mitglieder = 8;
            pirat2.Metall     = 10;
            pirat2.Spookies   = 80;
            s0.Einheiten.Add(pirat2);

            Einheit pirat3 = new Einheit(piraten, "Schutzcrew Beteigeuze");

            pirat3.Mitglieder = 10;
            pirat3.Metall     = 100;
            pirat3.Spookies   = 800;
            s1.Einheiten.Add(pirat3);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Liest die Befehle ein, prüft Logindaten und ordnet die Befehle den richtigen Einheiten zu.
        /// Zeilen, die mit # beginnen, sind Kommentarzeilen. Leere Zeilen werden ignoriert.
        /// </summary>
        /// <param name="dateiname">Dateiname der Befehlsdatei</param>
        static void LeseBefehle(string dateiname)
        {
            StreamReader befehle      = File.OpenText(dateiname);
            Faktion      f            = null;
            Einheit      e            = null;
            int          zeilennummer = 0;

            while (!befehle.EndOfStream)
            {
                string zeile = befehle.ReadLine();
                zeilennummer++;
                // Ersetze allen Whitespace (Tab, Leerzeichen) durch ein einzelnes Leerzeichen
                zeile = System.Text.RegularExpressions.Regex.Replace(zeile, @"\s+", " ");
                // Entferne Leerzeichen am Anfang und am Ende der Zeile
                zeile = zeile.Trim();
                if (zeile.Length == 0)
                {
                    // Überspringe leere Befehlszeilen
                    continue;
                }
                string[] teile = zeile.Split(' ');

                string befehl = teile[0].ToUpper();
                if (befehl.StartsWith("#"))
                {
                    // Kommentar überspringen
                    continue;
                }
                switch (befehl)
                {
                case "FAKTION":
                    f = PrüfeBefehlFaktion(teile);
                    if (f == null)
                    {
                        Console.WriteLine("Fehler in Befehlszeile " + zeilennummer + ". Der Befehl war: " + zeile);
                    }
                    break;

                case "FAKTIONSENDE":
                    // Logout als Faktion
                    f = null;
                    break;

                case "EINHEIT":
                    // Einheit auswählen
                    e = PrüfeBefehlEinheit(teile, f);
                    if (e == null)
                    {
                        Console.WriteLine("Fehler in Befehlszeile " + zeilennummer + ". Der Befehl war: " + zeile);
                    }
                    break;

                case "NACH":
                    // Einheit bewegen
                    if (e != null)
                    {
                        e.LangerBefehl = (string[])teile.Clone();
                    }
                    else
                    {
                        Console.WriteLine("Fehler in Befehlszeile " + zeilennummer + " (Keine Einheit ausgewählt). Der Befehl war: " + zeile);
                    }
                    break;

                case "REKRUTIERE":
                    if (e != null)
                    {
                        e.Befehle.Add((string[])teile.Clone());
                    }
                    else
                    {
                        Console.WriteLine("Fehler in Befehlszeile " + zeilennummer + " (Keine Einheit ausgewählt). Der Befehl war: " + zeile);
                    }
                    break;

                default:
                    Console.WriteLine("Unbekannter Befehl in Zeile " + zeilennummer + ". Der Befehl war: " + zeile);
                    break;
                }
            }
        }