Jump'n Run in der Konsole

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Jump'n Run in der Konsole

    Hallo, ich möchte eine Art Jump'n Run in der Konsole programmieren. Jedoch habe ich das Problem, dass bei Bildänderungen mit Console.Clear() das Bild nicht schnell genug aubaut und es stark flimmert.

    Die Bedingung für einen neuen Bildaufbau sieht folgendermaßen aus, in diesem Fall, wenn die Spielfigur nach rechts bewegt wird.

    Quellcode

    1. if (key == ConsoleKey.RightArrow)
    2. {
    3. schritte++;
    4. LadeMap(map); //Neues Laden der Map, siehe unten
    5. map[positionx, positiony] = 'O'; //Position des Spielfigur
    6. Console.Clear();
    7. ZeigeMap(map); //Ausgeben des Arrays zur Anzeige
    8. System.Threading.Thread.Sleep(100);
    9. }


    Quellcode

    1. static void LadeMap(char[] map)
    2. {
    3. /* Laden der "Level-Map" aus einer Textdatei.
    4. * Anschließend wird das Array mit dem Textdateiinhalt
    5. * befüllt. Das Array umfasst nur das Konsolenfenster
    6. * in [23,78], wird die Figur weiterbewegt muss der
    7. * weitere Levelinhalt nachgeladen werden. Hier kommt
    8. * "schritte" ins Spiel und schließt beim Befüllen je
    9. * nach Größe immer die ersten Zeichen aus der Textdatei
    10. * aus. */
    11. }
    Alles anzeigen


    Hier ein Bild zur Veranschaulichung:

    [Blockierte Grafik: http://npshare.de/files/36/2000/map.PNG]

    Das Umhergehen in dem Level funktioniert mit diesem Konzept bereits tadellos, jedoch flimmert es wie gesagt sehr heftig. Daher möchte ich euch fragen was ich hier besser machen könnte und ob es eventuell eine bessere Alternative zu Console.Clear gibt.
  • Also ich denke es hat 3 Gründe, welcher der Hauptverurscher ist weiß nicht.


    Ersten:

    Quellcode

    1. System.Threading.Thread.Sleep(100);


    100ms ist wahrscheinlich zu lang.


    Zweitens:

    Ich weiß leider nicht dein Spielsystem, aber da es 2 Methoden gibt. Die eine zeigt die Karte an und die zweite Läd diese (neu).

    Die Karte jedes mal neu zu laden ist eigentlich total sinnlos, stell
    dir mal vor in irgendeinem Spiel musst du das ganze Level neu laden
    wenn du einfach nur einen Schritt nach rechts machen möchtest.



    Drittens:

    Die Console jedesmal neu zu leeren ist irgendwie logisch, aber es
    steigert die Performance wenn du einfach alles "nachoben schiebst".
    Nich dass du nur chars mit Leerzeichen einfügst sondern deine Map so
    arrangierts,
    dass es ebend nach oben geschoben wird. Ich bin mir aber so sicher ob,
    Console.Clear() das auch tut... musste es einfach mal probieren.





    Aber meine persönliche Meinung ist, dass du es nicht mir .NET machen
    sollst, weil die Performance sounso eigentlich grottig ist, aber wenn
    dann würde ich es in einer Form realisieren. Und dann mit Bildern, so
    wie im "Soldat" Spiel Stil. Falls du das kennst.



    Ich hoffe das hilftt :D