Могу ли я обновлять вывод консоли C# в режиме реального времени без постоянной записи в нее?

#c# #console

Вопрос:

Я создаю простое консольное приложение для файтингов, и у меня есть health свойство для моих Player объектов, которое обновляется в Fight методе.

Интересно, можно ли показать переменную работоспособности в режиме реального времени в консоли, не вызывая метод, который обновляет консоль более одного раза.

Вот мой основной метод, который начинает бой и отображает результат здоровья каждого игрока.

  public static void StartFight(Player p1, Player p2) {
   Console.Clear();
   Title(" BATTLE ");
   Console.WriteLine($"{p1.name} Health: {p1.health} ");
   Console.WriteLine($"{p2.name} Health: {p2.health} ");

   // Loop giving each player a chance to attack
   // and block each turn until 1 dies
   while (true) {
     if (Fight(p1, p2)) {
       Title(" GAME OVER! ");
       PlayAgain();
       break;
     }

     if (Fight(p2, p1)) {
       Title(" GAME OVER! ");
       PlayAgain();
       break;
     }
   }
 }
 

Можно ли писать на консоль в режиме реального времени, чтобы мне не приходилось продолжать это делать Console.WriteLine($"{p1.name} Health: {p1.health} "); ?

Комментарии:

1. Под «показать» вы подразумеваете отображение его в консоли?

2. Трудно ответить, не видя вашего кода. Мое предложение состояло бы в том, чтобы объявить переменную до вызова метода и отправить эту переменную в качестве параметра методу. Таким образом, вы можете обновить и отобразить эту переменную на консоли.

3. @ErmiyaEskandary Да, как консоль. WriteLine($»Здоровье: {player.здоровье}»); и автоматическое обновление

4. @virouz98 Я уже обновил пост, чтобы быть более точным.

Ответ №1:

Нет — если вы отображаетесь на консоли, невозможно обновить пользовательский интерфейс в реальном времени, не вызывая метод более одного раза для обновления консоли.

У других пользовательских интерфейсов есть способы сделать это с помощью событий, привязок и т. Д.

Комментарии:

1. О, хорошо, хорошо, значит, обновление в реальном времени возможно только тогда, когда у нас есть пользовательский интерфейс, такой как Windows Forms, WPF, Web… из-за событий/привязок, которые у них есть?

2. Да, правильно, так как нет никакого цикла рендеринга, к которому вы могли бы подключиться или изменить, а также каких-либо событий, привязок…

3. Понял! Большое вам спасибо за быстрый и понятный ответ!