Обновление номера обратного отсчета без прерывания ввода пользователя - PullRequest
0 голосов
/ 25 октября 2018

Итак, у меня есть приложение для консольной игры, которое генерирует случайную строку x длины, и пользователь должен ввести ту же самую случайную строку, прежде чем истечет время или они потеряют. Время - это просто int, которое содержится в классе Game.Вот класс, который я использую для рисования шаблона:

class Template
{
    public static void DrawGameplay() //draws gameplay screen , the main method used to print
    {
        Console.WriteLine("=====================BOMB DEFUSE========================");

        if (Game.level < 10)
        {
            Console.WriteLine("====================== Level {0} =========================", Game.level);

            if(Game.level < 6)
            {
                Body(16);
            }
            else
            {
                Body(13);
            }
        }
        else
        {
            if (Game.level == 10) //10 special case
            {
                Console.WriteLine("====================== Level {0} ========================", Game.level);

                Body(13);
            }
            else
            {
                Console.WriteLine("====================== Level {0} ========================", Game.level);

                Body(11);
            }
        }
    }

    public static void TimeLine() //draws the time line in the middle , feeds drawgameplay
    {
        Console.WriteLine("");
        Console.WriteLine("");

        if (Game.time > 9)
        {
            Console.WriteLine("====================== Time: {0} ========================", Game.time);
        }
        else
        {
            Console.WriteLine("====================== Time: {0} =========================", Game.time);
        }

        Console.WriteLine("");
    }

    public static void Body(int spaces) //prints everything under the top (game title and lvl) , feeds drawgameplay
    {
        Console.WriteLine("");

        Words.Spaces(spaces);

        Game.PrintList();

        TimeLine();

        Words.Spaces(spaces);
    }
}

Тогда у меня есть класс игрока:

class Player
{
    public static List<char> inputList = new List<char>(); //the list of inputted chars that is used to compare to the defuse code
    static char[] arrayChar;
    static string typed;

    public static void GetInputList() //populates list with letters person typed during time
    {
        typed = Console.ReadLine();
        typed.TrimEnd(); //Gets rid of any extra spaces at the end
        arrayChar = typed.ToArray();
        inputList = arrayChar.ToList();
    }

    public static void Print() // prints inputed letters
    {
        foreach (var letter in inputList)
        {
            Console.Write(letter);
        }
    }
}

Как мне сделать так, чтобы я мог обновлять визуальное время кактаймер обратного отсчета без вмешательства пользователя?Прямо сейчас у меня есть визуальная шкала времени между случайно сгенерированной строкой и пользовательским вводом.Спасибо за поиск.

1 Ответ

0 голосов
/ 25 октября 2018

Я попробовал это только из любопытства.

Вот небольшой пример, как запустить приложение и получить ключи, введенные пользователем:

static void Main()
{
  StringBuilder msg = new StringBuilder(10);
  var endTime = DateTime.Now.AddSeconds(10);
  while (endTime > DateTime.Now)
  {
    if (Console.KeyAvailable)
    {
      ConsoleKeyInfo key = Console.ReadKey();
      msg.Append(key.KeyChar);
    }

    Thread.Sleep(1);
    Console.Write("\r Enter the message within {0} seconds; message = {1}", (endTime - DateTime.Now).Seconds, msg);
  }
}

Но помните, что есть много проблемс этим кодом.Счастливый сценарий будет работать, но есть много вещей, которые вызовут проблемы (нестандартное / не ожидаемое поведение пользователя - только одна из возможных проблем) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...