2013-11-27 3 views
0

В основном я хочу написать игру, в которой вы можете снимать материал. Моя проблема в том, что когда я стреляю, я не могу двигаться, пока объект не дошел до конца консоли, и я попытался использовать чтобы сделать его параллельным, но он испортил очистку консоли от предыдущих координат.Перемещение 2 объектов C# консольная игра

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

Как вы думаете, ребята? Можете ли вы помочь мне понять, как сделать его стрелять и двигаться в то же время не пристанет консоль?

ответ

1

Из вашего описания проблемы, я предполагаю, что ваш код для рисования на экране и удаление выглядеть примерно так:

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

Сказав все это, я бы рекомендовал не запускать отдельный поток для лазерного выстрела , но вместо этого записывая свою игру, используя стандартный основной цикл обновления/рисования, который обновляет сцену для фиксированного времени, затем рисует всю сцену. Это позволит вам обрабатывать такие вещи, как лазер, что-то что-то удаляет и исчезает и т. Д.

+0

Последний абзац является самым важным IMO :) – jheriko

+0

Это очень полезно, если я знал, как это сделать. Я не знаю, как их сделать разные скорости, очевидно, стрельба ракетами будет двигаться быстрее, чем игрок. Мне не нужна концептуальная помощь, мне нужно, чтобы кто-то написал код, как это сделать. –

+0

@PetarAtanasov «Мне не нужна концептуальная помощь, мне нужно, чтобы кто-то написал код, как это сделать». За позор. Пойдите, и если вы застреваете, задайте другой конкретный вопрос. – Ergwun

Смежные вопросы