繁体   English   中英

移动2个对象的C#控制台游戏

[英]Moving 2 objects C# console game

基本上我想写一个可以射击的游戏。我的问题是射击时我无法移动,而物体还没到达控制台的尽头,我尝试使用线程使其平行,但是搞砸了从以前的坐标清洗控制台。

static void ShootingLaser(int x,int y,string symbol)
{
    Drawing(x, y, symbol);

    Point basePoint = new Point(x,y);
    while (y < Console.WindowWidth - 1)
    {
        Point lastLaserPoint = new Point(x, y);
        y++;
        DeletingLastDraw(lastLaserPoint.x, lastLaserPoint.y);
        Drawing(x, y, symbol);

        Thread.Sleep(30);
    }    

您觉得家伙如何?您能帮我弄清楚如何同时射击和移动它而又不影响控制台吗?

从问题的描述中,我猜测您用于绘制到屏幕上并删除的代码看起来像这样:

private static void Drawing(int x, int y, string symbol)
{
    Console.SetCursorPosition(x, y);
    Console.Write(symbol);
}

private static void DeletingLastDraw(int x, int y)
{
    Drawing(x, y, " ");
}

如果真是这样,那么当多个线程尝试绘制到屏幕上时,光标可能会在Drawing方法的两行之间移动。

您可以通过使用锁定来确保同步任何绘制到屏幕的尝试来避免这种情况:

private static object consoleLock = new object();

private static void Drawing(int x, int y, string symbol)
{
    lock (consoleLock)
    {
        Console.SetCursorPosition(x, y);
        Console.Write(symbol);
    }
}

说了这么多,我建议不要为激光射击启动一个单独的线程,而是使用标准的主更新/绘制循环编写您的游戏,该循环以固定的时间步长更新场景,然后绘制整个场景。 这将使您能够处理诸如激光撞击和消失之类的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM