English 中文(简体)
为青少年申请/C#用户申请设计“低案文”
原标题:Designing "Flowing Text" For Console Applications/C# User Applications
  • 时间:2012-01-13 17:45:02
  •  标签:
  • c#
  • .net

我对我的新情况表示歉意,但请与我一道:

我试图产生一种“流通文字”效应,而不是与旧的指挥线(DOS!)所看到的那种效应,或甚至在贝内斯达歌舞厅所开发的“Fallout”游戏线上反复转载。 我正设法基本建立一个文字,对大多数青少年应用产生这种影响。 我将使用这一文字,从简便的LINQ到用户应用,到使用“加梅”。 这是出于我自己的敬爱,因为我受到了影响,非常希望照搬。

我已经考虑,如果能够把案文与一个时间者相权衡,以提供这种外观,给人以装(滚动)文本的印象,但作为C#的一座新冰,我不清楚在此开始哪里。 让我知道,我是否需要作任何澄清,因为我正在寻求更坚实的基础。

最佳回答

如果通过“滚动案文”,你指的是写给康索尔的案文,以便像有些人正在打上文字的话,那么你需要做以下工作:

  • Trap keyboard input and disable keyboard echo
  • Write each character individually
  • Pause between each character for a suitably brief period of time using Thread.Sleep() before writing the next character.

红十字与红新月联会,通过“流通文本”,你指与电影<信息总库/em>相近的东西,其特性似乎从屏幕上下降:

“Matrix-type

这个问题更加复杂,特别是自此以后。 青少年的净接触度有限,没有诸如ncurses

这一问题,。 是否有任何网上“图表”图书馆可在这方面有所帮助。

FWIW, 这里就是这样做的一种方式。 你们可能希望与不同的间隔期相左,以取得你所希望的效果。 这实际上避开了关键的中风:相反,在任何显示之前,它消耗了任何待决的中风,而没有回合。

using System;
using System.Threading;

namespace FlowingText
{
  class Program
  {
    const int CHARACTER_INTERVAL_IN_MILLISECONDS = 50  ; // interval between characters is 1/4 second (250ms)
    const int PARAGRAPH_INTERVAL_IN_MILLISECONDS = 500 ; // interval between paragraphs is 1 second (1000ms)

    static int Main( string[] args )
    {
      foreach ( string paragraph in PARAGRAPHS )
      {
        Display( paragraph ) ;
      }
      return 0 ;
    }

    public static void Display( string paragraph )
    {
      EndOfLine() ;
      foreach( char ch in paragraph )
      {
        Thread.Sleep( CHARACTER_INTERVAL_IN_MILLISECONDS ) ;
        DisplayChar( ch ) ;
      }
      EndOfLine() ;
      Thread.Sleep( PARAGRAPH_INTERVAL_IN_MILLISECONDS ) ;
      return ;
    }

    private static void DisplayChar( char ch )
    {
      ConsumeInput() ;
      Console.Out.Write( ch ) ;
      Console.Out.Flush() ;
      return ;
    }

    private static void EndOfLine()
    {
      ConsumeInput() ;
      Console.Out.WriteLine() ;
      Console.Out.Flush() ;
      return ;
    }

    private static void ConsumeInput()
    {
      const bool NO_ECHO = true ;

      // consume any pending keystrokes w/o echoing the character
      while( Console.KeyAvailable )
      {
        Console.ReadKey( NO_ECHO ) ;
      }

      return ;
    }

    private static readonly string[] PARAGRAPHS =
    {
      "Nam non rhoncus sapien. Donec in lorem sed mauris porttitor imperdiet vitae ut nunc. In eu erat non nunc dictum vestibulum. Cras erat dui, fringilla vel pulvinar nec, consequat eu orci. Aliquam erat volutpat. Phasellus rhoncus, lectus a volutpat lacinia, quam turpis venenatis sem, a vestibulum orci nulla congue lacus. Quisque molestie, tellus eu dapibus dictum, erat turpis fringilla nibh, id posuere lacus lectus ut libero." ,
      "Mauris vulputate, nulla porttitor dignissim convallis, ligula odio fermentum leo, et faucibus magna eros nec libero. Nam a risus quis mauris ultricies tempor. Quisque nulla velit, pellentesque at pellentesque ac, dignissim quis metus. Fusce tristique, diam vitae pellentesque tristique, metus risus egestas sapien, at luctus justo arcu a neque. Suspendisse enim augue, laoreet in posuere sit amet, facilisis non tortor. Phasellus quam nisl, ullamcorper non volutpat a, pretium vestibulum metus. Suspendisse at faucibus felis. Ut ullamcorper consectetur velit vitae tincidunt." ,
      "Aenean eget purus a nulla varius volutpat. Duis eget blandit massa. Nunc eget arcu ante, sed congue elit. Phasellus vulputate felis non nibh semper non luctus magna eleifend. Maecenas eget nulla nulla, lobortis tincidunt magna. Proin et lacus est, quis viverra elit. Praesent feugiat dui ut tortor bibendum cursus." ,
      .
      . [elided]
      .
      "Vestibulum enim tellus, suscipit vel vulputate nec, dignissim quis dui. Proin porttitor, orci sed vulputate viverra, nisi sem mollis nisi, ut accumsan quam mauris varius lectus. Vivamus ac nunc ipsum, quis vestibulum nisi. Sed aliquet iaculis leo quis commodo. Sed lorem nisi, tincidunt adipiscing blandit at, porta a metus. Vivamus nec leo eget sapien dapibus consequat vel at lacus. Praesent nec ligula felis, eu malesuada nisi. Vestibulum tincidunt nisl quis nulla suscipit volutpat. Sed at ligula sit amet mauris tincidunt dignissim vel in nibh. Vivamus eget hendrerit erat. Sed fringilla congue lacus vitae convallis. Fusce eget risus sit amet lectus placerat commodo. In ac leo sit amet diam sagittis placerat in ultrices eros. Nam semper, orci et malesuada cursus, mi ipsum gravida dolor, at accumsan est magna sit amet ante. Nulla facilisi." ,
      "Aliquam accumsan dictum luctus. Nunc commodo interdum diam, at feugiat augue semper at. Integer tincidunt, metus quis porta cursus, dolor nisl tincidunt massa, nec rhoncus ipsum ligula sit amet nunc. Fusce velit nunc, bibendum et vestibulum nec, consequat non turpis. Aenean gravida sagittis nulla, ut posuere nulla molestie in. Ut nec odio non arcu pellentesque dapibus. Nullam vel ligula sit amet orci tincidunt congue eu a risus." ,
      "Quisque tempus ipsum ut diam scelerisque egestas. Nam at felis nunc. Proin ut odio lacinia massa sagittis tempus quis et metus. Integer dictum eros vel mi tincidunt eu iaculis augue sollicitudin. Integer vel justo ut mi viverra egestas. Aenean consectetur nisl vel dui interdum quis tincidunt lacus scelerisque. Cras lacus dolor, suscipit eget blandit et, cursus at nunc. In dictum malesuada blandit." ,        
    } ;

  }
}
问题回答

Alright,

我在座右边接着这个环节。 睡觉并试图对C#中基于文字的青少年申请产生这种影响。 我不敢肯定,我是否应该回答我的问题或把它放在答案上,因为从技术上讲,我试图回答我自己的问题,但没有任何风险。

我不清楚我如何深入记录方案和(或)法典,因此,请让我知道,我是否在文件上记载任何内容。

/**
 * A program which is intended to "slowly" print text in green. 
 * A String read by the Console is converted to a char array and printed to the screen.
 * 
 * Information derived from Microsoft
* -----------------------------------
 * Thread.Sleep is used in two ways: through a Timespan variable and through a direct call to the function.
 * Thread.Sleep(int) blocks the thread in milliseconds.
 * Thread.Sleep(Timespan) blocks the thread for a period of time measured in (int days, int hours, int minutes, int seconds).
 * Thread.Sleep is overloaded.
 * -----------------------------------
 * End Information
 * Source 1: http://msdn.microsoft.com/en-us/library/d00bd51t.aspx [Thread.Sleep(int)]
 * Source 2: http://msdn.microsoft.com/en-us/library/274eh01d.aspx [Thread.Sleep(Timespan)]
 * 
 **/

using System;
using System.Threading;

namespace PlacidText
{

class Program
{
    static TimeSpan interval1 = new TimeSpan(0, 0, 0, 1);
    static TimeSpan interval2 = new TimeSpan(0, 0, 0, 2);

    static void Main(string[] args)
    {

        Console.WriteLine("Welcome to Placid Text, home of slow-typing.");

        while (true)            //loop
        {
            Console.WriteLine("Initializing Menu");
            Thread.Sleep(interval1);
            Console.WriteLine("Please select from the following options");
            Console.WriteLine(" t  to select slow-type,");
            Console.WriteLine("Input  q  to quit:");

            String screenselect = Console.ReadLine();


            if (string.Compare(screenselect, "t") == 0)
            {
                Console.WriteLine("Slow-Type");
                Slowtype slowtype = new Slowtype();     //new instance of Slow-Type
                slowtype.PrintZeString();
            }
            else if (string.Compare(screenselect, "q") == 0)
            {
                break;
            }
            else
            {
                Console.WriteLine("Error: Bad input");
            }

        }

        Console.WriteLine("Ending Session");
        Thread.Sleep(interval2);
        Environment.Exit(1);
    }

    public class Slowtype
    {       //This class is used for Slowtype

        private string printy;

        public Slowtype()       //default constructor
        {
            printy = null;
        }

        public Slowtype(string printy)         //constructor
        {
            this.printy = printy;
        }

        public void PrintZeString()
        {

            Console.WriteLine("Please enter a string");

            printy = Console.ReadLine();

            Console.WriteLine("");

            char[] array = printy.ToCharArray();

            for (int i = 0; i < array.Length; i++)
            {
                char letter = array[i];

                Console.ForegroundColor = ConsoleColor.Green;

                Console.Write(letter);

                Console.ResetColor();

                Thread.Sleep(100);
            }

            Console.WriteLine("");
            return;
        }
    }
}

}

守则是有效的,但我不敢肯定,它是否是实施守则的最佳形式或最佳方式,而是试图利用尼科尔斯护理组织提供的咨询意见。

~ Jack Orange Lantern





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...