공부/C#

[C#] 콘솔창의 키보드 입력 필요할때만 받아서 처리하기

굴러다니다니 2023. 3. 31. 10:47
728x90

콘솔로 리듬게임을 구현하고 싶었고, 이를 위해 키보드 입력을 받아야 했다.

하지만 while문 안에 ReadKey 함수를 넣으니, 키보드 입력을 받지 않으면 다음 while문으로 넘어가지 않는 문제점이 발생하였고, 이를 KeyAvailable을 이용해 해결했다.

 

            while (true)
            {
                if (Console.KeyAvailable)
                {
                    break;
                }
            }

Console.KeyAvailable을 사용하면 계속 입력받지 않아도 자동으로 while문을 돌며 키보드 입력이 있는지 확인할 수 있다.

그래서 키보드 입력이 있을 시에 이를 확인한다 의 용도로 보통 스위치 문을 많이 쓴다.

        static ConsoleKeyInfo input;

       input = new ConsoleKeyInfo();

로 선언을 해 준 뒤 이용하는 상태이다.

while (Key.Available){
	Console.ReadKey(true);
    switch(input.Key)
    {
        case ConsoleKey.A:
			Console.WriteLine("A키 눌림");
    }	
}

Key 입력이 있을 경우, Readkey를 한 번 해줘야 키 입력 버퍼에 계속 쌓여있지 않는다.

만약 Readkey를 하지 않은 뒤에 Key.Available을 쓴다면 계속 같은 bool값을 내보내는 오류를 확인했다,,, (나만 그런가)

그리고 case를 이용해 입력받은 키를 확인할 수 있다.

 

+Async?를 이용해서 처리할 수도 있다고 발표들음

728x90