2017-07-27 3 views
1

Ich erstelle eine Präsentation für mein Praktikumsprojekt und habe mir gedacht, was wäre ein coolerer und geeigneterer Weg als in einem Konsolenanwendung.Erstellen einer Methode, die wie ein Minispiel einen Text simulieren kann und den stillstehenden Text dynamisch verändert

I mit 2 Code Hilfe benötigen Schnipsel

  1. Dieser Code-Schnipsel prozedural Text schreibt und es funktioniert gut, aber läuft suboptimal (schweine Ressourcen)

    static void SleeperText(string text, int interval) 
    { 
        char[] SlowPrint = text.ToCharArray(); 
        foreach (char letter in SlowPrint) 
        { 
         Write(letter); 
         Thread.Sleep(interval); 
        } 
    
  2. Dieser Code-Schnipsel zu verstehen ist sei eine grafische Darstellung dessen, wie ein Salz aussehen würde (zu Demonstrationszwecken), flackert aber die gesamte Konsole.

    static char RandomAsciLetter() 
    { 
        char charsi = (ascii[r.Next(tempstring.Length)]); 
        return charsi; 
    } 
    static string RandomAsciCombo() 
    { 
        string stringsi = String.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}", RandomAsciLetter(), 
         RandomAsciLetter(), RandomAsciLetter(), RandomAsciLetter(), 
         RandomAsciLetter(), RandomAsciLetter(), RandomAsciLetter(), 
         RandomAsciLetter(), RandomAsciLetter(), RandomAsciLetter()); 
        return stringsi;  
    } 
    void Main() 
    { 
        do 
        { 
         while (!KeyAvailable) 
         { 
          Thread.Sleep(10); 
          Clear(); 
          Write("[ Esc ] to exit."); 
          Write("\r\n\r\n\r\n\r\n"); 
          WriteLine(String.Format("Salt:\t{0}{1}", RandomAsciCombo(), RandomAsciCombo())); 
    
         } 
        } while (Console.ReadKey(true).Key != ConsoleKey.Escape); 
        ReadLine(); 
    } 
    

Was ist ein besserer Weg, um den ersten Schnipsel zu laufen, und wie kann ich das Flimmern für die zweiten entfernen?

+0

Ich glaube nicht, es ist möglich, das Flimmern (die einzige Verbesserung entfernen ich denken könnte, ist das Drucken zu optimieren So aktualisiert man nur Zeichen, die noch nicht gedruckt sind (dies ist aber wahrscheinlich nicht sehr wichtig), da die Konsole nur für die Darstellung von Text und nicht für die Grafik gedacht ist. – MetaColon

+0

Ich stellte mir so etwas vor, oder überschrieb die 'Salz'-Anzeige mit einer leeren Zeichenfolge und überschrieb sie dann ständig in einer Schleife. Das würde das Flackern nur auf das Salz beschränken, was insgesamt zu einer saubereren Darstellung führen würde. –

Antwort

0

Um das Flackern zu entfernen, den Bildschirm nicht löschen, sondern die Cursorposition einstellen und dort schreiben.

Um die lästige Änderung der Cursorposition zu entfernen, verstecken Sie sie einfach.

using System; 

namespace ConsoleApp1 
{ 
    internal static class Program 
    { 
     private static readonly Random Random = new Random(); 

     private static void Main(string[] args) 
     { 
      Console.CursorVisible = false; 

      while (true) 
      { 
       if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape) 
        break; 

       Console.SetCursorPosition(10, 10); 
       Console.Write(GetString()); 
      } 
     } 

     private static char GetChar() 
     { 
      return (char) Random.Next(65, 92); 
     } 

     private static string GetString() 
     { 
      return $"{GetChar()}{GetChar()}{GetChar()}{GetChar()}{GetChar()}"; 
     } 
    } 
} 

Dies ist nur ein Skelett, werden Sie einige zusätzliche Helfer wahrscheinlich brauchen ...

+0

Was meinst du mit Helfern? extra Gewinde? –

+0

Ich meine, da ich den Bildschirm nicht lösche, muss man anders darüber nachdenken, wie man Dinge zeichnet. – Aybe

Verwandte Themen