2016-02-16 5 views
-3

Так что я пытаюсь создать фортепианную игру. где конкретные клавиши действуют как клавиши пианино. Например: , если при нажатии «A» воспроизводится аудиофайл для заметки C , если «s» нажата, воспроизведение аудиофайла для примечания D и т. д. я писал:Как проверить, нажата ли клавиша в C# (консольное приложение)

piano:   
if (pressedKey.Key == ConsoleKey.A) ; 
      { 
       Console.Beep(); 


       { 
        goto piano; 

звуковой сигнал будет заменен аудиофайла это только для тестирования. Итак, когда программа достигает этой части кода, и я нажимаю «а», она начинает звучать снова и снова, и она не останавливается, пока программа не будет закрыта. Я хочу, чтобы он раздавал звуковой сигнал каждый раз, когда я нажимал «А». Как мне это достичь? Извините за немой вопрос и плохой английский.

+0

Как вы заполняете переменную «нажатиеКей»? – Isuka

+0

У вас здесь очень маленький код, но вы вызываете бесконечный цикл, как только нажимаете клавишу «A». Вы нажимаете клавишу A, которая возвращается на пианино, которая запоминает старый ключ, потому что вы больше никогда не проверяли. Btw, 'goto' является злым. :) –

+0

Существуют ли какие-либо законные способы использования 'goto'? – redFIVE

ответ

0

Ну, похоже, вы хотите воспроизвести звук на нажатием клавиши в консольном приложении. Вот как вы это сделаете!

public static void PressAnyKey() 
{ 
    Console.WriteLine("Stroke Keys!"); 
    do 
    { 
     var mykey = Console.ReadKey(true); //Read The Key 

     switch (mykey.Key) 
     { 
      case ConsoleKey.UpArrow: 
       Console.WriteLine("UpArrow Pressed"); 
       //do your stuff 
       break; 
      case ConsoleKey.DownArrow: 
       Console.WriteLine("DownArrow Pressed"); 
       //do your stuff 
       break; 
      case ConsoleKey.RightArrow: 
       Console.WriteLine("RightArrow Pressed"); 
       //do your stuff 
       break; 
      case ConsoleKey.LeftArrow: 
       Console.WriteLine("LeftArrow Pressed"); 
       //do your stuff 
       break; 
     } 
    } while (true); 
} 

и если вы хотите, чтобы излучать какой-то звук из громкоговорителя системы вы можете использовать метод Console.Beep(Frequency,Duration) и int Frequency & int Duration переменных, чтобы настроить его частота и продолжительность!
вот как будет функционировать после добавления нескольких строк!

public static void BeepOnKey() 
{ 
    int frequency = 10000; 
    int duration = 100; 

    Console.WriteLine("Use keyboard arrows to adjust frequency and duration"); 
    do 
    { 
     while (!Console.KeyAvailable) 
     { 
      Console.Beep(frequency, duration); 
      //this method emits beep sound from system speakers 
     } 

     var mykey = Console.ReadKey(true); //Read The Key 

     switch (mykey.Key) 
     { 
      case ConsoleKey.UpArrow: 
       Console.WriteLine("UpArrow Pressed"); 
       frequency += 100; 
       frequency = Math.Min(frequency, 15000); 
       //do your stuff 
       break; 
      case ConsoleKey.DownArrow: 
       Console.WriteLine("DownArrow Pressed"); 
       frequency -= 100; 
       frequency = Math.Max(frequency, 1000); 
       //do your stuff 
       break; 
      case ConsoleKey.RightArrow: 
       Console.WriteLine("RightArrow Pressed"); 
       duration += 100; 
       duration = Math.Min(duration, 1000); 
       //do your stuff 
       break; 
      case ConsoleKey.LeftArrow: 
       Console.WriteLine("LeftArrow Pressed"); 
       duration -= 100; 
       duration = Math.Max(duration, 100); 
       //do your stuff 
       break; 
     } 
    } while (true); 
}