public Einheit(Faktion faktion, string name) { FaktionsNummer = faktion.Nummer; Name = name; Nummer = SpaceGame.Daten.NächsteEinheitenNummer; SpaceGame.Daten.NächsteEinheitenNummer++; }
/// <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); }
/// <summary> /// Prüft, ob der Befehl "FAKTION faktionsnr username passwort" passt. /// Liefert bei Erfolg die neue Faktion zurück, ansonsten null. /// </summary> /// <param name="teile">Ein string-Array mit den vier Bestandteilen des Befehls</param> /// <returns>Die passende Faktion, sonst null</returns> static Faktion PrüfeBefehlFaktion(string[] teile) { if (teile.Length != 4) { return(null); } int faktionsnummer = -1; if (!int.TryParse(teile[1], out faktionsnummer)) { return(null); } Faktion kandidat = SpaceGame.FindeFaktion(faktionsnummer); if (kandidat == null) { return(null); } if (kandidat.Benutzername != teile[2] || kandidat.Passwort != teile[3]) { Console.WriteLine("Falsche Logindaten für Faktion " + kandidat.Nummer); return(null); } return(kandidat); }
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); }
public override string ToString() { return(" Einheit " + Name + " (" + Nummer + "), " + Faktion.ToString() + ", " + Mitglieder + " Personen, " + Spookies + " Spookies, " + Metall + " Metall." + System.Environment.NewLine); }
/// <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; } } }