簡體   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