2012-11-21 2 views
0

저는 Roguelike 방식으로 "DOS"출력을 보여주는 방법을 찾고 있습니다. 사용자가 버튼을 누르거나 마우스로 클릭 할 때 변경되거나 움직일 수있는 문자 (레벨)로 채워진 도스 창이있는 것처럼 보입니다.DOS 창에서 어디서나 쓸 수 있습니다.

일반적인 DOS 창 (말하자면 고전적인 C++ 프로그램의 출력 또는 .bat) 당신은 오직 '더 많은 글을 쓸 수 있습니다.'그리고 귀찮고 인공물을 일으키는 변화가 생기면 전체 레벨을 다시 그려야합니다 (업데이트 된 레벨이 천천히 스크롤됩니다).

Qt 또는 SDL을 사용하여이 문제를 극복하기 위해 문자로 2D 타일을 그릴 수 있음을 알고 있지만, 내가하고 싶은 일에 대해 복잡해 보입니다. 그리기 쉬운 방법 (C++ 라이브러리)이 있습니다./a 'DOS'창 어디에서나 문자를 사용할 수 있습니까?

감사합니다.

[편집] 감사합니다. 모든 제안을 확인해 보겠습니다.

[편집] PDCurses, 그것은 여기에서 찾을 수 있습니다 사용하는 방법에 대한 자습서를 원 (이것은 ncurses를 말한다 그러나 그것은 단순한 안녕하세요 세계 예를 들어 완벽하게 잘 작동) : 여기 http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/

답변

4

불량배가 작성되었을 때 curses screen control library을 사용했습니다.

Windows 용으로 다양한 구현을 사용할 수 있습니다. 일부 저주를 변환 일반 Windows 콘솔 전화로 호출

PDCurses for Windows

기타 진정한 GUI 창을 확인한 다음 굵은 같은 향상된 기능을 그리고는 "위조"에 밑줄 터미널 (사용에 대한 당신의 생각처럼 Qt는 또는 SDL은) 타일을 그립니다 :

PDCurses for "real" Windows

당신이 마이크로 소프트의 거의 사용되지 않는 콘솔 API 함수에 직접 자신을 묶어 싶은 경우에, 당신이 할 수 있습니다. 그러나 향수가이 시대에 이런 UI를 추구하는 목표라면, 저주 학습을 통해 교차 플랫폼 을 만들면 불량 소스 코드와 같은 것을 더 잘 이해할 수 있습니다.

실제 DOS 에뮬레이션을 목표로한다면 (DOSBox) 다른 인기있는 옵션 인 이 화면 메모리에 직접 액세스합니다. 당신은 주변을 들여다 볼 수 있었고 ... 올바른 장소에 65를 쓰면 "A"가 나타납니다.

다음은 많은 게시판 시스템에서 하루에 사용 된 ANSI.SYS 이었지만, 마찬가지로 쓸모가 없습니다.

+1

오른쪽 장소는 B800입니다 : 0000 memomory를 잘 제공합니다. – tomdemuyt

+0

@tomdemuyt 예! http://www.shikadi.net/moddingwiki/B800_Text – HostileFork

1

정말 DOS이면 ansi.sys에서 색상 코드를 사용하고 positioning cursor : 에 server fault에 창에서 손상시킬 수있는 코드에 대한 스레드가 있습니다. HTH 테스트하지 않았습니다.

많은 시스템으로 포팅 된 라이브러리 인 ncurses을 검사 할 수도 있습니다.

1

또 하나 개의 대안 :

은이 읽기 전용, 고정 폭 글꼴 설정 확인 등의 Qt의 QPlainTextEdit, QTextEdit 또는 QTextBrowser 등의 텍스트 영역 위젯을 만들고 원하는 색상의 텍스트를 채워, 고정 된 수의 고정 된 수의 행에있는 문자 수입니다.

+0

나는 실제로 그것을 고려했다. 그러나 그것은 좋은 옛날 DOS 느낌 (IMHO)을 가지고 있지 않다. 어쨌든 +1하다. – Valmond

+0

그 좋은 옛 DOS 느낌 때문에, 나는 당신이 전체 화면을 원한다고 생각한다. 텍스트 모드 ... 그리고 이것은 올바른 폰트로 사용자 정의 풀 스크린 위젯을 만들거나 ("렌더러"와 같은 제안을하거나 직접 그림을 그려서) 에뮬레이트하는 것이 가장 좋습니다. 또한, 현실감을 더하기 위해 원작과 어울리는 부끄러움/부드러움/스캔 한 CRT 모양을 만들어보아야 할 수도 있습니다.이 경우 사용자 정의 그림이 가장 좋은 방법 일 것입니다. – hyde

+0

@ Valmond, 다른 사람들이 한 것처럼 OpenGL 셰이더를 사용해야 할 수도 있습니다. http://filthypants.blogspot.fi/2010/12/crt-pixel-shader-filter-for-snes.html – hyde

1

이 시도 :

#include <iostream> 
#include <windows.h> 
using namespace std; 


void gotoxy(int x, int y) 
{ 
    static HANDLE hStdout = NULL; 
    COORD coord; 

    coord.X = x; 
    coord.Y = y; 

    if(!hStdout) 
    { 
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
    } 

    SetConsoleCursorPosition(hStdout,coord); 
} 




int main(void) 
{ 

    gotoxy(30 , 12); 
    cout<<" Writing anywhere \n"; 

    gotoxy(1 , 22); 
    cout<<" \nPress any key to continue\n"; 
    cin.ignore(); 
    cin.get(); 

    return 0; 
} 
+0

고마워요.하지만 이미 pdcurse를 찾았습니다. 나는 그걸로 절대적으로 행복합니다. +1 어쨌든 ^^ – Valmond