public Highscore(ConsoleGraphics gr, Spielmodus spielmodus) { this.gr = gr; this.spielmodus = spielmodus; switch (this.spielmodus) { case Spielmodus.Normal: chosenHighscore = fileHighscoreNormal; break; case Spielmodus.Endlos: chosenHighscore = fileHighscoreEndlos; break; case Spielmodus.Hardcore: chosenHighscore = fileHighscoreHardcore; break; } if (!File.Exists(chosenHighscore)) { File.Create(chosenHighscore); } }
/// <summary> /// Speichert den Namen und den Score in die jeweilige Highscore Liste des Spielmodus /// </summary> /// <returns>false, wenn es nicht gespeichert werden konnte</returns> public static bool SaveScore(string name, int score, Spielmodus spielmodus) { try { switch (spielmodus) { case Spielmodus.Normal: File.AppendAllText(fileHighscoreNormal, string.Format("{0}:{1}\n", name, score)); break; case Spielmodus.Endlos: File.AppendAllText(fileHighscoreEndlos, string.Format("{0}:{1}\n", name, score)); break; case Spielmodus.Hardcore: File.AppendAllText(fileHighscoreHardcore, string.Format("{0}:{1}\n", name, score)); break; } return(true); } catch { return(false); } }
/// <summary> /// Initialisiert alles und startet das Spiel /// </summary> /// <param name="spielmodus">Beschreibt welcher Spielmodus gespielt werden soll</param> public void Start(Spielmodus spielmodus) { this.spielmodus = spielmodus; timer.Start(); superman = new Superman(gr, new Size(GAME_WIDTH, GAME_HEIGHT)); stars = new Stars(gr, new Size(GAME_WIDTH, GAME_HEIGHT)); kryptonite = new Kryptonite(gr, new Size(GAME_WIDTH, GAME_HEIGHT)); powerups = new Powerups(gr, new Size(GAME_WIDTH, GAME_HEIGHT)); if (this.spielmodus == Spielmodus.Normal) { // Normalmodus etwas schneller machen damit es nicht zu langweilig wird this.speed = 3; } else if (this.spielmodus == Spielmodus.Endlos) { this.speed = 3; } else if (this.spielmodus == Spielmodus.Hardcore) { this.speed = 6; } stars.SpawnStars(this.speed, spielmodus); kryptonite.SpawnKryptonite(this.speed, this.level, this.spielmodus); powerups.SpawnPowerup(); Draw(); }
/// <summary> /// Erstellt mehrere Sterne an zufälligen Position und speichert sie in einer Liste ab /// </summary> /// <param name="speed">Die Geschwindigkeit die jetzt gespielt wird</param> /// <param name="spielmodus">Der Spielmodus der zurzeit gespielt wird</param> public void SpawnStars(int speed, Spielmodus spielmodus) { this.speed = speed; this.listPoints.Clear(); int amount = 0; if (spielmodus == Spielmodus.Normal) { // Fester Wert damit es im Normalmodus wegen der Zeit immer für jeden fair ist und nicht der eine nur 10 einsammeln muss under andere mehr amount = 20; } else if (spielmodus == Spielmodus.Endlos) { // Im Endlosmodus soll random zwischen 10 und 20 Sternen sein amount = ConsoleGraphics.rnd.Next(15, 31); } else if (spielmodus == Spielmodus.Hardcore) { amount = 50; } int xOffset = ((gr.CONSOLE_WIDTH - this.gameSize.Width) / 2) + 1; int yOffset = ((gr.CONSOLE_HEIGHT - this.gameSize.Height) / 2) + 1; for (int i = 0; i < amount; i++) { int tries = 0; Point p; do { // Versuche einen neuen Punkt zu erstellen, wenn dieser jedoch besetzt ist soll maximal 20 mal versucht werden. // Wichtig für den Endlosmodus, bei dem es bei höheren Leveln sehr viel mehr Kryptonit auf einer Fläche gibt if (tries > 20) { return; } int x = ConsoleGraphics.rnd.Next(2, gameSize.Width - 2) + xOffset; int y = ConsoleGraphics.rnd.Next(2, gameSize.Height - 2) + yOffset; p = new Point(x, y); } while (listPoints.Contains(p)); listPoints.Add(p); } }
/// <summary> /// Erstellt mehrere Krptonite an zufälligen Position und speichert sie in einer Liste ab /// </summary> /// <param name="speed">Die Geschwindigkeit die jetzt gespielt wird</param> /// <param name="level">Das Level das jetzt gespielt wird</param> public void SpawnKryptonite(int speed, int level, Spielmodus spielmodus) { this.speed = speed; this.listPoints.Clear(); int amountParam = 0; switch (spielmodus) { case Spielmodus.Normal: amountParam = 200; break; case Spielmodus.Endlos: amountParam = 200; break; case Spielmodus.Hardcore: amountParam = 50; break; } // Je nach Spielgröße soll mehr oder weniger Kryptonit spawnen (200 -> kleiner = mehr Kryptonit in einem Bereich, höher = weniger Kryptonit) int amount = ((gameSize.Width * gameSize.Height) / amountParam) + level; // jedes level 1 kryptonit mehr int xOffset = ((gr.CONSOLE_WIDTH - this.gameSize.Width) / 2) + 1; int yOffset = ((gr.CONSOLE_HEIGHT - this.gameSize.Height) / 2) + 1; for (int i = 0; i < amount; i++) { int tries = 0; Point p; do { // Versuche einen neuen Punkt zu erstellen, wenn dieser jedoch besetzt ist soll maximal 20 mal versucht werden. // Wichtig für den Endlosmodus, bei dem es bei höheren Leveln sehr viel mehr Kryptonit auf einer Fläche gibt if (tries > 20) { return; } int x = ConsoleGraphics.rnd.Next(2, gameSize.Width - 2) + xOffset; int y = ConsoleGraphics.rnd.Next(2, gameSize.Height - 2) + yOffset; p = new Point(x, y); } while (listPoints.Contains(p)); listPoints.Add(p); } }