C# - 콘솔로 "2중 버퍼링 (Double Buffering)" 구현하기
·
C#
문제 상황1차 콘솔 프로젝트 위 사진은 이전에 진행했던 콘솔 프로젝트다.투사체를 발사해서 내려오는 블럭을 파괴하는 간단한 게임이며가로3 x 세로2 크기의 셀을 논리 그리드로 정해서 배경색을 이용해 하나의 블럭처럼 표현했다. 실시간 슈팅 게임이므로 일정 시간마다 프레임을 갱신하는 업데이트 기반으로 구성되어 있었는데최초에 Console.Clear()로 작성하였더니 심한 깜빡임 현상이 발생했다. 이를 해결하고자 클리어가 아닌 SetCursorPosition() 을 이용해 다시 그리는 방식을 채용했으나깜빡임은 해결됐지만 화면 출력이 느리게 밀려 보이는 현상이 발생했다. 당시 자력으로 해결하지 못하고 이 문제에 대해 질문을 하였고 "2중 버퍼링을 활용해봐라" 라는 답변을 들었다.하지만 콘솔에서 대체 2중 버퍼링을..
C# - GetAsnycKeyState() 기반 실시간 키 입력 처리
·
C#
콘솔의 기본적인 Console.ReadKey() 기반으로 입력을 받으면, OS의 연속키 입력 지연 때문에 입력이 느리고 답답하게 느껴진다.이는 실시간 게임 같은 것에서는 조작감을 치명적으로 망쳐놓는 원인이 된다. 비슷한 현상을 Unity에서도 겪은 바 있기에, 이를 해결하고자 KeyDown / KeyUp을 이용한 인풋 시스템을 만들고자 했으나C#에는 KeyUp 기능이 없다...! 없으면 직접 만들어야지 뭐... 결론부터 말하면 GetAsyncKeyState()라는 Win32 API가 제공하는 비동기 키 입력 감지 함수를 이용해 해결할 수 있다. if (Console.KeyAvailable){ var key = Console.ReadKey(true).Key; switch (key) { ..
C# - LockConsoleSize() : 콘솔 창 크기 고정 및 리사이즈 방지
·
C#
콘솔프로젝트 도중, 시작과 동시에 콘솔 창 크기를 고정하고, 창 크기를 바꾸지 못하게 고정하고 싶었다. 사실 Console.SetWindowSize()를 이용해서 창 크기를 설정할 수 있지만이것만으로는 사용자가 마우스로 창 모서리를 드래그하거나, 최대화 버튼을 클릭하면...콘솔 프로젝트는 그냥 망가져버릴 수 있다. 이 문제는 Window API를 사용해서 콘솔 창의 윈도우 스타일을 직접 수정하는 것으로 해결할 수 있다. using System;using System.Runtime.InteropServices;namespace WeaponMasterDefense{ public static class ConsoleWindowManager { [DllImport("user32.dll"..
C# - 콘솔프로젝트 : 숫자 야구 만들기
·
C#
Console Project - 숫자 야구 제작※ 컴퓨터 숫자는 프로그래머가(본인이) 하나 지정해놓고 하셔도, 랜덤으로 하나 뽑은 후 자릿수 중복 체크 과정을 거치셔도 무방합니다. - 컴퓨터는 임의의 세자리 숫자를 가지고 있음. 플레이어가 컴퓨터를 위한 중복되지 않는 임의의 세자리를 입력해주면 됩니다. (컴퓨터가 지 혼자 알고 있을 숫자 102~987) (개발자가 컴퓨터용 숫자를 심어놓는것이 아닌, Random 을 통해 임의의 세자리를 뽑게 해도 됩니다. 단 3자리 중복이 없는지 확인하는 로직이 있어야 합니다) - 유저는 세자리 수를 입력하되 동일한 자리의 숫자가 있을 경우, 유저에게 다시 입력하라고 반복 시킴. - 컴퓨터가 정한 수와, 유저가 입력한 숫자를 비교해서 만약 자릿수가 일치한 것이 있다면 스..