Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 星星在屏幕上的随机运动_C# - Fatal编程技术网

C# 星星在屏幕上的随机运动

C# 星星在屏幕上的随机运动,c#,C#,我想在屏幕中央写一个“*”,然后它可以每100毫秒随机移动到右、左、上或下。如果“*”在行的末尾,它必须在该行的开头,如果它在列的末尾,它必须在该列的开头(而且它们的反向场景也是有效的).我写了这段代码,但问题是我不能删除旧的乐章(所以每个乐章都有“*”),我解决了它,把“u”放在它的旧乐章上。有没有其他解决方案在屏幕上只做一个“*”?如果“*”在行的末尾,我也不能删除旧的移动。下面是源代码: private static void MovementOfStar() {

我想在屏幕中央写一个“*”,然后它可以每100毫秒随机移动到右、左、上或下。如果“*”在行的末尾,它必须在该行的开头,如果它在列的末尾,它必须在该列的开头(而且它们的反向场景也是有效的).我写了这段代码,但问题是我不能删除旧的乐章(所以每个乐章都有“*”),我解决了它,把“u”放在它的旧乐章上。有没有其他解决方案在屏幕上只做一个“*”?如果“*”在行的末尾,我也不能删除旧的移动。下面是源代码:

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;
            }


        }
private static void MovementOfStar()
{
整行=40,列=12;
Console.CursorVisible=false;
控制台。设置光标位置(行、列);
int方向=0;
随机r=新随机();
对于(int i=0;i<1000;i++)//移动计数
{
控制台。写(“*”);
系统线程线程睡眠(100);
Console.Write('\b');
控制台。写(“”);
方向=右下(5);
而(方向==0)
方向=右下(5);
开关(方向)
{
案例1:
如果(第1行>=80)
行=0;
Console.SetCursorPosition(行++,列);
打破
案例2:
如果(第1行=25)
col=0;
Console.SetCursorPosition(行、列++);
打破
案例4:

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

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

与其使用退格键并用u覆盖,不如重新定位光标:

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

Thread.Sleep(100);

// Wipe out the previous star
Console.SetCursorPosition(col, row);
Console.Write(" ");
(请注意,我在这里转置了
——您的列和行似乎颠倒了方向。)

我还建议您不要在方法调用中使用复合赋值运算符(
row++
等),这会使您更难确定发生了什么。我会更改您的代码,以使用以下内容:

row--;
if (row < 0)
{
   row = 24;
}
行--;
如果(行<0)
{
行=24;
}

在您的case语句中-然后在打印*

之前调用
控制台.SetCursorPosition
,而不是使用退格符和用ux覆盖,为什么不重新定位光标:

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

Thread.Sleep(100);

// Wipe out the previous star
Console.SetCursorPosition(col, row);
Console.Write(" ");
(请注意,我在这里转置了
——您的列和行似乎颠倒了方向。)

我还建议您不要在方法调用中使用复合赋值运算符(
row++
等),这会使您更难确定发生了什么。我会更改您的代码,以使用以下内容:

row--;
if (row < 0)
{
   row = 24;
}
行--;
如果(行<0)
{
行=24;
}
在您的case语句中,然后在打印*

之前对
控制台.SetCursorPosition
的单个调用中,写一个空格-“”而不是“”

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

而不是:

Console.Write('\b');
Console.Write("_");
为何不:

Console.SetCursorPosition(row, col);
Console.Write("_");
也就是说,您已经知道如何将光标直接定位到要写入字符的位置。

而不是:

Console.Write('\b');
Console.Write("_");
为何不:

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

也就是说,您已经知道如何将光标直接定位到要写入字符的位置。

在更新行和列之前,请将光标位置设置为旧的行和列并写入空格


顺便说一句,与其从0到4生成一个随机数,然后在0上重试,为什么不从0到3生成一个随机数,并将这四个值作为您检查的值呢?您可以说“case 0”--零和1一样好。或者,如果您真的对1到4上瘾,请将随机数生成更改为“next(4)+1”.

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


顺便说一句,与其从0到4生成一个随机数,然后在0上重试,为什么不从0到3生成一个随机数,并将这四个值作为您检查的值呢?您可以说“case 0”--零和1一样好。或者,如果您真的对1到4上瘾,请将随机数生成更改为“next(4)+1”.

在编写try Console.Clear()之前尝试Console.Clear();在编写try Console.Clear()之前尝试处理减量的好方法。是的,“做它,然后检查它是否有效”然后“检查我想做的事情是否有效,然后再做它”要干净得多。关于处理减量的好方法。是的,处理减量的好方法要干净得多,“做它,然后检查它是否有效”然后再去做“检查我想做的是否有效,然后再做”。当我使用它时,光标锁定在起始位置,我没有解算。当我使用它时,光标锁定在起始位置,我没有解算