屏幕上的星星随机移动

时间:2011-07-20 13:34:49

标签: c#

我想在屏幕的中心写一个'*',而不是每100毫秒可以随机移动到左,上,下。如果'''在行的末尾,它必须在开始时该行,如果它在列的末尾,它必须在该列的开头(并且它们的反向scenerio是有效的。)我写了那个代码,但问题是我无法删除旧的运动(所以有'*'代表每一个动作)我解决了它将'_'放到它的旧动作上。还有其他任何解决办法在屏幕上只做一个'*'吗?如果'*'在行的末尾,我也无法删除旧的移动。这里是源代码:

private static void MovementOfStar()
    {
        int row = 40, col = 12;
        Console.CursorVisible = false;
        Console.SetCursorPosition(row, col);

        int direction = 0;
        Random r = new Random();

        for (int i = 0; i < 1000; i++)   // count of movement
        {
            Console.Write("*");
            System.Threading.Thread.Sleep(100);
            Console.Write('\b');
            Console.Write("_");



            direction = r.Next(5);
            while (direction== 0)
                direction = r.Next(5);

            switch (direction)
            {
                case 1:
                     if (row + 1 >= 80)
                         row = 0;
                    Console.SetCursorPosition(row++, col);
                    break;
                case 2:
                    if (row - 1 <= 0)
                        row=79;
                    Console.SetCursorPosition(row--, col);
                    break;
                case 3:
                    if (col + 1 >= 25)
                        col = 0;
                    Console.SetCursorPosition(row, col++);
                    break;
                case 4:
                    if (col - 1 <= 0)
                        col = 24;
                    Console.SetCursorPosition(row, col--);
                    break;
            }


        }

5 个答案:

答案 0 :(得分:2)

不是使用退格和用_覆盖,为什么不重新定位光标:

Console.SetCursorPosition(col, row);
Console.Write("*");

Thread.Sleep(100);

// Wipe out the previous star
Console.SetCursorPosition(col, row);
Console.Write(" ");

(请注意,我在此处调换了colrow - 您的列和行似乎有错误的方式。)

我还建议您不要在方法调用中使用复合赋值运算符(row++等) - 这样就很难弄清楚正在发生的事情。我会改变你的代码来使用像:

row--;
if (row < 0)
{
   row = 24;
}
在您的案例陈述中

- 然后在打印*之前调用Console.SetCursorPosition

答案 1 :(得分:2)

在更新row和col之前,将光标位置设置为旧行和col并写入空格。

顺便说一下,为什么不生成0到3之间的随机数,而不是从0到4生成一个0到4的随机数,而不是生成一个0到3的随机数?你可以说“case 0” - 零和1一样好。或者如果你真的沉迷于1到4,将随机数生成更改为“next(4)+1”。

答案 2 :(得分:1)

您可以调用Console.Clear()来清除(整个)控制台屏幕。

答案 3 :(得分:1)

而不是:

Console.Write('\b');
Console.Write("_");

为什么没有:

Console.SetCursorPosition(row, col);
Console.Write("_");

即。你已经知道如何直接将光标定位在想要写字符的位置。

答案 4 :(得分:0)

写一个空格 - “”而不是“_”