알고리즘에 도움을주기 위해 텍스트 디스플레이를 동적으로 업데이트하십시오
-
06-09-2019 - |
문제
첫째, 일부 뒷이야기 :
나는 그 금액이 "로그 같은"게임을 통해 내 머리에 떠 다니는 몇 가지 흥미로운 아이디어를 발휘할 수 있습니다. 게임 플레이는 던전 크롤링이 아니지만 어쨌든 디스플레이는 비슷한 화려하게 이루어질 것입니다. ASCII 문자.
이것은 자기 운동이라는 것이기 때문에 나는 대부분 직접 코딩하려고 노력합니다.
결국 나는 임의로 큰 게임 세계에서 게임을 실행하고 싶습니다. (게임을 네트워크로 만들고 컴퓨터 실에서 많은 모니터를 넘어서는 것을 상상하는 시점까지).
지금, 나는 텍스트 콘솔의 임의의 섹션을 읽고 쓸 수있는 코드와 효율적으로 찾을 수 있도록 간단한 파티션 시스템을 설정할 수있는 코드가 있습니다.
그리고 이제 질문 :
벤치 마크를 실행했으며 가장 큰 병목 현상은 텍스트 콘솔의 재편성입니다.
큰 게임 세계가 있으면 디스플레이의 지능형 업데이트가 필요합니다. 나는 모든 프레임마다 내 게임 버퍼 전체를 다시 푸시하고 싶지 않습니다 ... 게임 섹션 만 업데이트되도록 설정하는 방법에 대한 몇 가지 포인터가 필요합니다. (그리고 내가 지금 가지고있는 개별 캐릭터뿐만 아니라)
Windows.h를 통해 Windows 콘솔을 조작하고 있지만 서버에 연결된 퍼티 클라이언트를 통해 Linux 시스템에서 실행하는 데 관심이 있습니다.
픽셀과 캐릭터 사이에 거의 1 : 1 비율이 있기 때문에 일부 비디오 처리 루틴을 조정하려고 시도했지만 운이 없었습니다.
실제로 나는 그 뒤에있는 몇 가지 원칙에 대한 간단한 설명을 원합니다. 그러나 일부 예 (PSUDO) 코드도 좋을 것입니다.
해결책
나는 이것을 이해한다고 주장하지 않을 것이지만, 이것이 제임스 고슬링의 전설적인 문제에 가깝다고 믿는다. Gosling Emacs 코드를 다시 그리기. "Redisplay 알고리즘", 그리고 일반인의 제목을 봅니다. 문자열-스트링 보정 문제.
다른 팁
저주를 사용하거나 직접 수행 해야하는 경우 VTNNN 컨트롤 코드에 대해 읽으십시오. 이 두 가지 모두 Windows 및 *Nix 용어 및 콘솔 (및 Windows)에서 작동해야합니다. 힌트의 Nethack 소스 코드를 참조 할 수도 있습니다. 이렇게하면 변화가 발생할 때마다 화면의 문자를 변경할 수 있습니다.
큰 게임 세계가 있으면 디스플레이의 지능형 업데이트가 필요합니다. 나는 모든 프레임마다 내 게임 버퍼 전체를 다시 푸시하고 싶지 않습니다 ... 게임 섹션 만 업데이트되었을 수 있도록 설정 방법에 대한 포인터가 필요합니다. (그리고 내가 지금 가지고있는 개별 캐릭터뿐만 아니라)
게임 세계의 크기는 실제로 관련이 없습니다. 각 클라이언트의 가시 영역을 해결하고 해당 데이터를 보내는 것입니다. 일반적인 80x25 콘솔 디스플레이가있는 경우 색상 코드 등을 추가하더라도 매번 2 ~ 3 킬로바이트의 데이터를 보내게됩니다. 이것은이 성격의 대부분의 온라인 게임에서 전형적입니다. 세상의 모든 것이 아니라 사람이 볼 수있는 것을 업데이트하십시오.
당신이 보내는 것을 줄이는 방법을 찾으려고 노력하고 싶다면 학습 목적으로 자유롭게 해보십시오. 실시간으로 고정 할 필요가없는 문제를 해결하는 데 시간을 낭비하는 것은 부끄러운 일입니다. 위에서 링크 된 PDF는 O (ND) 솔루션을 제공하는 반면, 단순히 전체 콘솔을 전송하는 것은 O (n)의 절반이며 N은 A와 B 및 D의 길이의 합으로 정의됩니다.