Today I Learned - Day 9 [콘솔창 UI 작업에 관하여]
콘솔창으로 게임을 만드는 경우, UI 제작이 상당히 난해하다.
물론, 연습이 아닌 한에야 콘솔창으로 작업을 게임을 만들 일은 없겠지만, 굳이 게임이 아니더라도 활용할 수 있는 요인이기도 하기에 한번 정리 해 보고자 한다.
Console.Write와 Console.Read에 관해서는 사전 지식에 해당하기 때문에 서술하지 않는다.
[참고 URL: https://lsu0503.tistory.com/8]
(사전 캠프) C# 기초 문법 톺아보기 - 1
공부할 내용 [수업자료와 순서를 소폭 변경하여 구성하였습니다.]입출력반복문조건문배열클래스상속추상 클래스가상 메서드남은 내용인터페이스난수 생성문자열 처리참조형 인수 [out / ref]자
lsu0503.tistory.com
1. Consol.SetCursorPosition(x, y)
커서를 x열 y행으로 옮겨주는 함수로, 콘솔창 커서 조작의 기본이 되는 함수다.
다만, 함정이 하나 있는데, 한글은 크기가 2인데 커서 상으로는 1로 친다. 한자 같은 전각 글자들은 모두 동일.
이 때문에 UI를 정리하거나 글을 정리하는 용도로 쓰려면 전각 글자의 개수 만큼 빼줘야 한다.
일단 직접 세어서 빼는 방법으로 대처가 가능하긴 하다.
근데 이걸 알고리즘으로 하려고 하면 엄청 오래 걸리므로, 콘솔 서식은 가능하면 영어로 제작하도록 하자(...)
아니면 반각문자는 영어랑 숫자 만 쓰도록 만든 뒤에 영어랑 숫자를 제외하고 개수를 세는 공식을 써도 좋다.
[2024. 09. 30 추가]
영어와 숫자는 1바이트, 한글은 2바이트라는 점을 이용해서 바이트 갯수를 사용해도 된다.
다른 언어들은 경우에 따라서 다를 수 있기 떄문에 추천하기는 힘들지만, 영어와 한글, 숫자는 확실하게 들어맞기 때문에 큰 부담 없이 쓸 수 있을 것이다.
2. Consol.Clear()에 관하여
Consol.Clear()는 콘솔창 표시 내용을 완전히 싹 비우는 함수이다.
근데 이거랑 ' '(공백)로 도배하는 거랑 시각적으로는 효과가 같다.
[실제로는 후자는 일일히 ' '(공백)을 입력하기 때문에 작업 속도에 차이가 있긴 하다.
애시당초에 콘솔창에서 내용이 겹치면 합쳐지는 게 아니라 덮어씌워지기 때문인데, 이를 이용해서 특정 열 만 지우는 것도 가능하다.
3. 자릿수 맞추기
Consol.Write{"{0, a}", val} 이런 방식으로 작성하면 val의 내용을 a칸 안에서 우측 정렬으로 출력할 수 있고,
Consol.Write{"{0, -a}", val} 이런 방식으로 작성하면 val의 내용을 a칸 안에서 좌측 정렬으로 출력할 수 있다.
string.Format{"{0, a}", val} 이렇게 작성하면 문자열 변수에 동일 방식으로 할당하는 것도 가능하다.
string에 속해있는 개념이기 때문에 콘솔창이 아니라도 해도 곧잘 쓸 수 있는 요소.
정리하며
이거 이외에도 글자 색 변경[Console.ForegroundColor]이랑 배경 색 변경[Console.BackgroundColor]도 있긴 하다.
[지정된 색상으로만 변경 가능하다.]
다만, 이쪽은 검색만 해도 바로바로 나오는 내용이기도 하고, 이번 프로젝트에서 아직 쓰질 않아서 추가하지 않았다.
전체적으로 기본기에 해당하는 내용이기도 하다.
그래도 3번도 그렇고 1번도 그렇고 꽤나 헤맸던 요소이기에 한번 정리 해 보았다.
[1번은 사실 문제를 찾기 보다는 차선책을 선택한 거긴했다. 지금은 해결했지만.]
[3번은 사전 지식이 없으니까 알아보기가 힘들었다. 알고 나니까 왜 헤맸나 싶었긴 하지만서도...]