2010-12-29 2 views
1

텔넷을 통해 재생할 수있는 간단한 게임이 있지만 몇 줄 바꿈을 인쇄 한 다음 전체 화면을 다시 보내 화면을 새로 고칩니다. 경우에 따라 깜박임이 발생할 수 있으며 사용자가 터미널을 위로 스크롤하면 모든 이전 프레임이 표시됩니다.텔넷을 통해 텍스트 그래픽을 효율적으로 실행합니다.

어떤 개선 작업을 취할 수 있습니까?

모든 문자를 다시 보내지 않고 특정 문자를 수정하는 방법이 있습니까? 이렇게하면 플리커가 방지되고 사용자 터미널이 오래된 프레임이 가득 차는 것을 막을 수 있습니다.

백 스페이스 문자 (8)를 보내려고했으나 현재 행의 시작 부분을 벗어나지 않았습니다. 다른 라인으로가는 이런 것이 완벽 할 것입니다!

또한, 나는 telnet towel.blinkenlights.nl이 내 끔찍한 프레임 전송 방법을 사용하지 않는다는 것을 알아 냈습니다. 더 나은 해결책이 있다는 것을 알고 있습니다.

+2

Java 용 curses 라이브러리가 필요합니다. 여기를 확인하십시오 : http://stackoverflow.com/questions/439799/whats-a-good-java-curses-like-library-for-terminal-applications –

+0

하지만 지금까지 없어요! (나는 또한 Eclipse에 어떤 종류의 라이브러리도 성공적으로 설치하기에는 너무 어리 석다.) 모든 도서관이 할 수있는 일은 화면을 조작하기 위해 낮은 수준의 문자 조합을 보내는 것입니까? 유닉스 시스템에서만 게임을 보여줄 것이기 때문에 나는 많은 OS 독립성을 필요로하지 않는다. – Matt

+0

글쎄, 분명히 당신은이 질문을하는 경우에 충분히 멀리 가지 않았습니까? –

답변

1

분명히 ANSI 이스케이프 시퀀스를 사용할 수 있습니다. 내 터미널에서 정상적으로 작동하는 것 같습니다.

아마도 지원되지 않는 끔찍한 일이지만 질문에 답할 수 있으므로 앞으로 필요할 수도있는 사람들을 위해 링크를 남겨 두겠습니다.

http://www.termsys.demon.co.uk/vtansi.htm

3

저주가 할 것입니다. 직접 쓰고 싶다면 알고리즘은 매우 간단합니다. 하나의 버퍼에서 화면의 상태를 기억하고, 프로그램이 다른 화면에 새로운 화면을 그리고, 새로 고침을 호출하고, 라이브러리가 두 버퍼를 비교하여 필요한 변경 만 전송합니다. 그런 다음 새 버퍼를 현재 버퍼에 복사 한 후 다음 프레임으로 이동합니다. 까다로운 부분은 모든 다른 터미널 유형과 커서를 움직이기위한 제어 순서를 다루는 것입니다. Curses 자료에는 터미널 라이브러리가 포함되어 있습니다.

+0

버퍼 물건을 이미 구현했기 때문에 아마 좋을 것입니다. 스크린은 2D 배열에 저장됩니다. 수동으로 처리하기에는 너무 많은 터미널 유형이 있습니까? – Matt

+0

이 시스템의 터미널 데이터베이스를 확인하면 1,675 개의 터미널 유형이 있습니다. 요즘 얼마나 ​​많은 사람들이 실제로 사용되는지 잘 모르겠습니다. – JOTN

관련 문제