控制台c中char的随机移动

时间:2017-05-21 16:25:01

标签: c# random console maze

我在控制台应用程序中制作了一个迷宫游戏,并且通过使用键我可以控制角色离开迷宫。现在我想弄清楚如何自动化这个过程以便我的角色可以随机指向并试图找到出路。这是我的课。 问题出在randomMovement方法中。

class Player: Maze
{
    public int x = 1;
    public int y = 1;


    public string playerName;

    public static void printMv() {
        while (true)
        {
            for (int i = 0; i < 15; i++)
            {


                Console.Clear();
                mazeDev();

                Console.Write("0");
                Thread.Sleep(1000);
            }
        }
    }


    public static void movementByUser()
    {

        int x = 1, y = 1;
        while (true)
        {

            Console.Clear();
            mazeDev();
            Console.CursorLeft = x;
            Console.CursorTop = y;
            Console.Write("0");


            ConsoleKeyInfo mv = Console.ReadKey();
            if (mv.Key == ConsoleKey.Escape) break;
            if (mv.Key == ConsoleKey.A && mazeBluePrint[y, x - 1] == 0) {
                x--;
            }
            if (mv.Key == ConsoleKey.D && mazeBluePrint[y, x + 1] == 0)
            {
                x++;
            }
            if (mv.Key == ConsoleKey.W && mazeBluePrint[y - 1, x] == 0)
            {
                y--;
            }
            if (mv.Key == ConsoleKey.S && mazeBluePrint[y + 1, x] == 0)
            {
                y++;
            }
        }
    }
    public static void randomMovement()
    {
        Random randMove = new Random();

        int x = 1;
        int y = 1;

        int irandom = randMove.Next(4);
        Console.CursorLeft = x;
        Console.CursorTop = y;

        if (irandom == mazeBluePrint[y, x - 1])
        {
            x--;
            printMv();

        }
        else if (irandom == mazeBluePrint[y, x + 1])
        {
            x++;
            printMv();
        }
        else if (irandom == mazeBluePrint[y - 1, x])
        {
            y--;
            printMv();
        }
        else
        {
            y++;
            printMv();
        }


    }
}

}

1 个答案:

答案 0 :(得分:0)

您的问题可能是方向评估。试试这个:

public static void randomMovement()
{
    Random randMove = new Random();

    int x = 1;
    int y = 1;

    int irandom = randMove.Next(4);
    Console.CursorLeft = x;
    Console.CursorTop = y;

    if (irandom == 0 && mazeBluePrint[y, x - 1] == 0)
    {
        x--;
        printMv();
    }
    else if (irandom == 1 && mazeBluePrint[y, x + 1] == 0)
    {
        x++;
        printMv();
    }
    else if (irandom == 2 && mazeBluePrint[y - 1, x] == 0)
    {
        y--;
        printMv();
    }
    else if (mazeBluePrint [y + 1, x] == 0)
    {
        y++;
        printMv();
    }
}

但是,此代码仍有很多的弱点(例如,您可能会走出mazeBluePrint数组的边界,这会导致异常。)

修改

如果你想在另一个方向上移动,如果第一个没有工作,你可以尝试这样的事情:

public static void randomMovement()
{
    Random randMove = new Random();
    int x = 1;
    int y = 1;
    Console.CursorLeft = x;
    Console.CursorTop = y;
    while (true)
    {
        int irandom = randMove.Next(4);
        if (irandom == 0 && mazeBluePrint[y, x - 1] == 0)
        {
            x--;
            printMv();
            break;
        }
        else if (irandom == 1 && mazeBluePrint[y, x + 1] == 0)
        {
            x++;
            printMv();
            break;
        }
        else if (irandom == 2 && mazeBluePrint[y - 1, x] == 0)
        {
            y--;
            printMv();
            break;
        }
        else if (mazeBluePrint[y + 1, x] == 0)
        {
            y++;
            printMv();
            break;
        }
    }
}

然而,这仅从1,1开始移动一次。