/// <summary>
    ///  Main Game Loop
    ///  Zeichnet alles was auf der Konsole angezeigt werden soll,
    ///  solange man nicht abgebrochen oder verloren hat
    /// </summary>
    private void Draw()
    {
        // Game Loop
        while (!gameOver && !abbruch)
        {
            gr.ClearBuffer();

            GetKeyInput();
            powerups.SpawnPowerup();

            stars.MoveStars(kryptonite.listPoints);
            kryptonite.MoveKryptonite(stars.listPoints);

            DrawBorder();
            DrawUI();
            DrawLegend();

            stars.Draw();
            kryptonite.Draw();
            powerups.Draw();
            superman.Draw();

            CheckIntersection();

            gr.DrawBufferToConsole();
            Thread.Sleep((int)(1000 / FPS));
        }

        // Nur Game Over Screen zeigen, wenn nicht abgebrochen wurde
        if (gameOver)
        {
            // Spiel vorbei (Egal ob verloren oder gewonnen, selber Screen)
            GameOverScreen();
        }
    }
Beispiel #2
0
    /// <summary>
    /// Zeichnet das Hauptmenü auf die Konsole
    /// </summary>
    public void Show()
    {
        // Main loop
        while (true)
        {
            ConsoleKeyInfo kInfo;
            do
            {
                gr.ClearBuffer();

                // Positioniert das Logo mittig oben in der Konsole
                for (int i = 0; i < SUPERMAN_LOGO.Length; i++)
                {
                    int length = SUPERMAN_LOGO[i].Length;

                    for (int j = 0; j < length; j++)
                    {
                        // Offset 2 damit es nicht ganz oben am Rand ist sondern etwas drunter
                        gr.SetCursorPosition(((gr.CONSOLE_WIDTH - length) / 2 + j), i + 2);

                        if (SUPERMAN_LOGO[i][j] == 'ö')
                        {
                            // Hintergrund vom Superman Logo soll gelb sein
                            gr.WriteToBuffer('#', ConsoleAttribute.FG_YELLOW);
                        }
                        else
                        {
                            // Der Rest rot
                            gr.WriteToBuffer(SUPERMAN_LOGO[i][j], ConsoleAttribute.FG_RED);
                        }
                    }
                }

                // Menüpunkt anzeigen
                for (int i = 0; i < menuAuswahl.Length; i++)
                {
                    gr.SetCursorPosition((gr.CONSOLE_WIDTH - menuAuswahl[i].Length) / 2, (gr.CONSOLE_HEIGHT / 2) + i);
                    if (selectedIndex == i)
                    {
                        // Die Frabe des ausgewählten Menüpunkts ändern
                        gr.WriteToBuffer(menuAuswahl[i], ConsoleAttribute.FG_GREEN);
                    }
                    else
                    {
                        // Standard Farbe
                        gr.WriteToBuffer(menuAuswahl[i], ConsoleAttribute.FG_WHITE);
                    }
                }

                gr.DrawBufferToConsole();

                // Menüabfrage ob hoch oder runter bewegt wird
                kInfo = Console.ReadKey(true);
                if (kInfo.Key == ConsoleKey.UpArrow && selectedIndex > 0)
                {
                    selectedIndex--;
                    if (selectedIndex == 3)
                    {
                        selectedIndex = 2;
                    }
                    else if (selectedIndex == 7)
                    {
                        selectedIndex = 6;
                    }
                }
                else if (kInfo.Key == ConsoleKey.DownArrow && selectedIndex < (menuAuswahl.Length - 1))
                {
                    selectedIndex++;
                    if (selectedIndex == 3)
                    {
                        selectedIndex = 4;
                    }
                    else if (selectedIndex == 7)
                    {
                        selectedIndex = 8;
                    }
                }
            } while (kInfo.Key != ConsoleKey.Enter);


            switch (selectedIndex)
            {
            case 0:     // Normal
                Game game = new Game(gr);
                game.Start(Spielmodus.Normal);
                break;

            case 1:     // Endlos
                Game game2 = new Game(gr);
                game2.Start(Spielmodus.Endlos);

                break;

            case 2:     // Hardcore
                Game game3 = new Game(gr);
                game3.Start(Spielmodus.Hardcore);

                break;

            case 3: break;

            case 4:     // Highscore Normal
                Highscore highscore = new Highscore(gr, Spielmodus.Normal);
                highscore.Draw();

                break;

            case 5:     // Highscore Endlos
                Highscore highscore2 = new Highscore(gr, Spielmodus.Endlos);
                highscore2.Draw();
                break;

            case 6:     // Highscore Hardcore
                Highscore highscore3 = new Highscore(gr, Spielmodus.Hardcore);
                highscore3.Draw();

                break;

            case 7: break;

            case 8:     // Store
                Store store = new Store(gr);
                store.Draw();
                break;

            case 9:     // Werkeinstellungen
                ResetSettings();
                break;

            case 10:
                Environment.Exit(0);
                break;
            }
        }
    }
    /// <summary>
    /// Zeigt den Loginscreen auf der Konsole an
    /// </summary>
    public void Show()
    {
        while (!loggedIn)
        {
            gr.ClearBuffer();

            // Positioniert die Überschrift mittig in der Konsole
            for (int i = 0; i < STAR_OF_THE_UNIVERSE_SMALL.Length; i++)
            {
                gr.WriteToBuffer((gr.CONSOLE_WIDTH - STAR_OF_THE_UNIVERSE_SMALL[i].Length) / 2, i + 5, STAR_OF_THE_UNIVERSE_SMALL[i], ConsoleAttribute.FG_GREEN);
            }

            // Positioniert das wort "Passwort: " zentriert in Abhängigkeit von der Passwortlänge * 2
            gr.WriteToBuffer((gr.CONSOLE_WIDTH - ("Passwort: " + PASSWORD + PASSWORD).Length) / 2, (gr.CONSOLE_HEIGHT / 2) - 1, "Passwort: ");

            for (int i = 0; i < PASSWORD.Length; i++)
            {
                if (input.Length > i)
                {
                    // Für jedes eingegebene Zeichen soll ein "*" angezeigt werden
                    gr.WriteToBuffer("* ");
                }
                else
                {
                    // Für jedes leere Zeichen soll ein "_" angezeigt werden
                    gr.WriteToBuffer("_ ");
                }
            }

            // Schreibt den gesamten Buffer in die Konsole
            gr.DrawBufferToConsole();

            ConsoleKeyInfo kInfo = Console.ReadKey(true);
            if (kInfo.Key == ConsoleKey.Backspace)
            {
                if (input.Length > 0)
                {
                    // Das letzte Zeichen löschen
                    input = input.Remove(input.Length - 1, 1);
                }
            }
            else if (input.Length < PASSWORD.Length && kInfo.KeyChar >= 33 && kInfo.KeyChar <= 126)
            {
                // neues Zeichen hinzufügen
                input += kInfo.KeyChar;
            }
            else if (kInfo.Key == ConsoleKey.Enter)
            {
                if (input == PASSWORD)
                {
                    loggedIn = true; // Passwort richtig, gehe raus aus der Schleife
                }
                else
                {
                    input = "";
                }
            }
            else if (kInfo.Key == ConsoleKey.Escape)
            {
                Environment.Exit(0);
            }
        }
    }
Beispiel #4
0
    /// <summary>
    /// Zeichnet den Store auf die Konsole
    /// </summary>
    public void Draw()
    {
        this.currentSelectionIndex = Settings.Default.SupermanAuswahl;

        ConsoleKeyInfo kInfo = new ConsoleKeyInfo();

        do
        {
            gr.ClearBuffer();

            // Zeichnet das "Store" Logo mittig oben
            for (int i = 0; i < STORE_LOGO.Length; i++)
            {
                // Offset 5 damit es nicht ganz oben am Rand ist sondern etwas drunter
                gr.WriteToBuffer((gr.CONSOLE_WIDTH - STORE_LOGO[i].Length) / 2, i + 5, STORE_LOGO[i], ConsoleAttribute.FG_YELLOW);
            }

            int xCenter = gr.CONSOLE_WIDTH / 2;
            int yCenter = gr.CONSOLE_HEIGHT / 2;

            gr.WriteToBuffer(xCenter - (preise.Length * 7 / 2) - "Preis: ".Length - 5, yCenter + 5, "Preis: ");


            // Geht durch jede Auswahl durch und Zeichne
            for (int i = 0; i < preise.Length; i++)
            {
                // 3x3 -> mit rand = 5x5
                // abstand von 2 px -> 7x5
                int xOffsetToLeft = (preise.Length / 2) - i;
                int x             = (xCenter - 2) - (xOffsetToLeft * 7);

                DrawSupermanAt(x, yCenter, colors[i]);

                // Jeweiligen Preis anzeigen
                if (!GetAuswahlByIndex(i))
                {
                    gr.WriteToBuffer(x, yCenter + 5, preise[i], ConsoleAttribute.FG_YELLOW);
                }
            }

            // Zeigt an welche Farbe zurzeit aktiv ist
            int xAuswahl = (gr.CONSOLE_WIDTH / 2) - (((preise.Length / 2) - Settings.Default.SupermanAuswahl) * 7) - 1;
            gr.WriteToBuffer(xAuswahl - ("Aktiv".Length / 2), yCenter - 3, "Aktiv", ConsoleAttribute.FG_RED);

            // Zeichnet das gerade ausgewählte Item mit einem Rechteck
            DrawRectangle();

            // Zeichnet die aktuelle Anzahl an Sternen
            string stars = Settings.Default.Stars.ToString();

            gr.WriteToBuffer((gr.CONSOLE_WIDTH - "Sterne: ".Length - stars.Length) / 2, yCenter + 15, "Sterne: ");
            gr.WriteToBuffer(stars, ConsoleAttribute.FG_YELLOW);

            // Zeichnet die Animation
            DrawAnimation();

            gr.DrawBufferToConsole();

            if (!Console.KeyAvailable)
            {
                continue;
            }

            kInfo = Console.ReadKey(true);
            if (kInfo.Key == ConsoleKey.Enter)
            {
                bool auswahlFreigeschaltet = false;

                switch (currentSelectionIndex)
                {
                case 0:
                    auswahlFreigeschaltet = Settings.Default.Superman1;
                    break;

                case 1:
                    auswahlFreigeschaltet = Settings.Default.Superman2;
                    break;

                case 2:
                    auswahlFreigeschaltet = Settings.Default.Superman3;
                    break;

                case 3:
                    auswahlFreigeschaltet = Settings.Default.Superman4;
                    break;

                default:
                    auswahlFreigeschaltet = Settings.Default.Superman5;
                    break;
                }

                // Wenn schon freigeschaltet, dann nur auswählen, ansonsten Kaufen
                if (auswahlFreigeschaltet)
                {
                    Settings.Default.SupermanAuswahl = currentSelectionIndex;
                    Settings.Default.Save();
                }
                else
                {
                    // Prüfen ob genug "Sterne" vorhanden sind
                    if (Settings.Default.Stars >= preise[currentSelectionIndex])
                    {
                        // Kaufen
                        Settings.Default.Stars          -= preise[currentSelectionIndex];
                        Settings.Default.SupermanAuswahl = currentSelectionIndex;
                        switch (currentSelectionIndex)
                        {
                        case 0: Settings.Default.Superman1 = true; break;

                        case 1: Settings.Default.Superman2 = true; break;

                        case 2: Settings.Default.Superman3 = true; break;

                        case 3: Settings.Default.Superman4 = true; break;

                        default: Settings.Default.Superman5 = true; break;
                        }
                        Settings.Default.Save();
                    }
                }
            }
            else if (kInfo.Key == ConsoleKey.RightArrow)
            {
                // Auswahlrechteck nach rechts bewegen
                if (currentSelectionIndex < preise.Length - 1)
                {
                    currentSelectionIndex++;
                }
            }
            else if (kInfo.Key == ConsoleKey.LeftArrow)
            {
                // Auswahlrechteck nach links bewegen
                if (currentSelectionIndex > 0)
                {
                    currentSelectionIndex--;
                }
            }
        } while (kInfo.Key != ConsoleKey.Escape && kInfo.Key != ConsoleKey.Backspace);
    }