0

Условно... Нужно написать программу для консоли, которая будет показывать числа от 1 до 8 и показывало некоторое время, то есть Thread.Sleep(100) условно.. Но только если клавиша зажата. Недостаток в том, что пока программа "спит" 100 миллисекунд консоль продолжает получать нажатия. И если отпустить клавишу, то программа все равно будет и дальше показывать числа... Можно ли как-то сделать, чтобы программа начинала показывать числа с Ожиданием и сразу же прекращала при отпускании клавиши?

На самом деле у меня поехала крыша и я хочу сделать игру в консоли, не спрашивайте зачем :D, но вот что пока вышло сделать (сори, если там где-то криво, я в первый раз пользуюсь сайтом. Но надеюсь, вы поймете суть кода...)

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;

using System.Threading;

namespace ConsoleApp6 { class Program { static public void Frame_Show(int n) { if (n == 1) { Frame_1(1); }

        if (n == 2)
        {
            Frame_2(1);
        }

        if (n == 3)
        {
            Frame_3(1);
        }

        if (n == 4)
        {
            Frame_4(1);
        }

        if (n == 5)
        {
            Frame_5(1);
        }

        if (n == 6)
        {
            Frame_6(1);
        }

        if (n == 7)
        {
            Frame_7(1);
        }

        if (n == 8)
        {
            Frame_8(1);
        }

    Thread.Sleep(100);
    Console.Clear();

}

static public void Frame_1(int n)
{
    Console.SetCursorPosition(5, 5);
    Console.ForegroundColor = ConsoleColor.Gray;
    Console.Write("1");
}

static public void Frame_2(int n)
{
    Console.SetCursorPosition(5, 5);
    Console.ForegroundColor = ConsoleColor.Gray;
    Console.Write("2");
}

static public void Frame_3(int n)
{
    Console.SetCursorPosition(5, 5);
    Console.Write("3");
}

static public void Frame_4(int n)
{
    Console.SetCursorPosition(5, 5);
    Console.Write("4");
}

static public void Frame_5(int n)
{
    Console.SetCursorPosition(5, 5);
    Console.Write("5");
}

static public void Frame_6(int n)
{
    Console.SetCursorPosition(5, 5);
    Console.Write("6");
}

static public void Frame_6(int n)
{
    Console.SetCursorPosition(5, 5);
    Console.Write("6");
}

static public void Frame_7(int n)
{
    Console.SetCursorPosition(5, 5);
    Console.Write("7");
}

static public void Frame_8(int n)
{
    Console.SetCursorPosition(5, 5);
    Console.Write("8");
}

static void Main(string[] args)
{
    int n = 1;
    Console.SetWindowSize(80, 30);
    Console.SetBufferSize(80, 30);
    Console.CursorVisible = false;
    ConsoleKey key;
    while (1 > 0)
    {
        if (Console.KeyAvailable == true)
        {
            key = Console.ReadKey(true).Key;

            if (key == ConsoleKey.RightArrow)
            {
                Frame_Show(n);
                n++;
                if (n == 9)
                {
                    n = 1;
                }

            }
        }

    }




}

} }

aepot
  • 49,560
strigrt
  • 101

1 Answers1

2

Как-то так может сработать.

for (int i = 1; i < 9; i++)
{
    while (Console.KeyAvailable)
        Console.ReadKey(true);
    Console.ReadKey(true);
    Console.Write(i);
    Thread.Sleep(100);
}
aepot
  • 49,560
  • 1
    вроде сработало, попробую для своих целей использовать, спасибо – strigrt Apr 15 '21 at 20:31
  • а можно ли это улучшить так, чтобы если нажали клавишу, то цифры бы выводились. А если клавиша не нажата, то оставалась определенная цифра, условно 0 ? – strigrt Apr 17 '21 at 14:31
  • @DmitriyDobr if (!Console.KeyAvailable) Console.Write(0); else while ... – aepot Apr 17 '21 at 14:40
  • 1
    добрый человек, спасибо огромное. Если игра доживет до выхода, можно будет тебя указать в титрах? – strigrt Apr 17 '21 at 15:00
  • @DmitriyDobr это же просто должно было быть. ) – aepot Apr 17 '21 at 15:02
  • мои способы не работали)) а ваш работает, хотя там и есть один неисправимый баг, который трудно описать, но причина его появления ясна... как то так... – strigrt Apr 17 '21 at 15:23
  • а можно с тобой связаться через ЛС? Вк там или инста? Просто там проблема, которую трудно описать вот так вот просто возникла – strigrt Apr 17 '21 at 19:41
  • Создайте новый вопрос, опишите в нем максимум деталей, вставьте код, и если потребуется, то скриншоты, вставьте так же текст ошибки и укажите, как вы пытались решить вопрос. Если вопрос не об ошибке, а о поведении приложения, то опишите фактическое и ожидаемое поведение. Попробуем разобраться. – aepot Apr 17 '21 at 19:46
  • вот, вроде вот так https://ru.stackoverflow.com/questions/1271496/Проблема-с-нажатиями-клавиш-в-консоли-c – strigrt Apr 17 '21 at 20:21