使用线程每秒激活一个功能并检测冲突(C#-控制台应用程序)

时间:2018-10-21 14:18:23

标签: multithreading class timer

我需要制作一个控制台应用程序,该程序在空白矩形内绘制一个圆,并创建一个线程,该线程激活一个每秒更改圆的位置的函数。

我使用此链接绘制了矩形:https://codereview.stackexchange.com/questions/23298/drawing-a-hollow-rectangle-of-rows-and-column-provided-by-the-console-applicatio

我的代码如下:

class Border
{
    public void DrawLine(int X, char ends, char mids)
    {
        Console.Write(ends);
        for (int i = 1; i < X - 1; ++i)
            Console.Write(mids);
        Console.WriteLine(ends);
    }

    public void DrawBox(int X, int Y)
    {
        DrawLine(X, '*', '*');
        for (int i = 1; i < Y - 1; ++i)
            DrawLine(X, '*', ' ');
        DrawLine(X, '*', '*');
    }

    public void Main()
    {
        DrawBox(50, 20);
    }
}

这是控制球及其运动的类:

class Ball
{
    public int X = 25;
    public int Y = 10;

    public enum Directions
    {
        Up,
        Down,
        Left,
        Right
    };
    Directions direction = Directions.Up;

    public void Write()
    {
        Console.SetCursorPosition(X, Y);
        Console.WriteLine("O");
        Console.ReadKey(true);
    }

    public void Move()
    {
        if(direction == Directions.Up)
        {
           while(X < 50 && Y < 20)
           {
                Console.SetCursorPosition(X , Y - 1);
                Console.WriteLine("O");
                Console.ReadKey(true);
                Y--;
           }
        }
        if (direction == Directions.Down)
        {
            while (X < 50 && Y < 20)
            {
                Console.SetCursorPosition(X, Y + 1);
                Console.WriteLine("O");
                Console.ReadKey(true);
                Y++;
            }
        }
        if (direction == Directions.Left)
        {
            while (X < 50 && Y < 20)
            {
                Console.SetCursorPosition(X - 1, Y);
                Console.WriteLine("O");
                Console.ReadKey(true);
                X--;
            }
        }
        if (direction == Directions.Right)
        {
            while (X < 50 && Y < 20)
            {
                Console.SetCursorPosition(X + 1, Y);
                Console.WriteLine("O");
                Console.ReadKey(true);
                X++;
            }    
        }
    }
}

到目前为止,主要内容如下:

class Program
{
    static void Main(string[] args)
    {
        Border border = new Border();
        Ball ball = new Ball();
        border.Main();
        ball.Write();
    }
}

我需要添加一个线程,该线程每秒钟激活一次Move功能,当圆到达框的边界时,会显示一条消息,但是我很难确定如何使用线程。 如果有人可以帮助我解决这个问题,我将非常感激。

0 个答案:

没有答案