2017-12-22 3 views
0

지금은 프로그래머와 텍스트 기반 게임을 만들려고 노력하는 방법에 잘 맞습니다. 나는 오늘 시작했다. 그리고 나는 얼마간 갱신 될 세계지도와 내가 그것을 광대하게 할 것 인 것을 만들었다! 하지만 내 인생에 대한 나는 제대로 프레임을 업데이트 할 수 없습니다. 나는 정상적인 창을 사용하고, 나는 아래에 내 코드를 넣었다. 제 프레임을 깨끗하게 업데이트 해주세요!어떻게하면 텍스트 기반 게임을위한 프레임을 업데이트합니까

지도 클래스와 헤더 내가 바로 당신을 이해 바랍니다

#include<string> 
#include <Windows.h> 



class map { 
protected: 
    char mep[200][50]; 

public: 
    map(); 
    ~map(); 
    void bs(); 
    void buildTree(int X, int Y); 
    void addTree(); 
    void buildMap(); 
    void printMap(int X, int Y); 
}; 

#include"map.h" 


map::map() { 
    buildMap(); 
    printMap(0, 0); 
} 
map::~map() { 

} 


void map::bs() { 
    //this builds a square world later cool things like trees get added 
    for (int x = 0; x<200; x++) { 
     for (int y = 0; y<500; y++) { 
      mep[x][y] = '_'; 

     } 

    } 
} 


void map::buildTree(int X, int Y) { 

    //¨ /\¨ [x][y-4] 
    // /\"[x][y-3] 
    //¨ /-o \¨ [x][y-2] 
    //¨ /-o-o- \¨[x][y-1] 
    //¨/o0-o \¨ [x][y] 
    //¨/o-ooo- \¨[x][y+1] 
    //¨ ||||¨ [x][y+2] 
    //¨ ||||¨ [x][y+3] 

    mep[X][Y - 4] = '/'; mep[X + 1][Y - 4] = '\\'; 
    mep[X - 1][Y - 3] = '/'; mep[X][Y - 3] = ' '; mep[X + 1][Y - 3] = ' '; mep[X + 2][Y - 3] = '\\'; 
    mep[X - 2][Y - 2] = '/'; mep[X - 1][Y - 2] = '-'; mep[X][Y - 2] = 'o'; mep[X + 1][Y - 2] = ' '; mep[X + 2][Y - 2] = ' '; mep[X + 3][Y - 2] = '\\'; 
    mep[X - 3][Y - 1] = '/'; mep[X - 2][Y - 1] = '-'; mep[X - 1][Y - 1] = 'o'; mep[X][Y - 1] = '-'; mep[X + 1][Y - 1] = 'o'; mep[X + 2][Y - 1] = '-'; mep[X + 3][Y - 1] = ' '; mep[X + 4][Y - 1] = '\\'; 
    mep[X - 3][Y] = '/'; mep[X - 2][Y] = ' '; mep[X - 1][Y] = 'o'; mep[X][Y] = '0'; mep[X + 1][Y] = '-'; mep[X + 2][Y] = 'o'; mep[X + 3][Y] = ' '; mep[X + 4][Y] = '\\'; 
    mep[X - 4][Y + 1] = '/'; mep[X - 3][Y + 1] = 'o'; mep[X - 2][Y + 1] = '-'; mep[X - 1][Y + 1] = 'o'; mep[X][Y + 1] = 'o'; mep[X + 1][Y + 1] = 'o'; mep[X + 2][Y + 1] = '-'; mep[X + 3][Y + 1] = ' '; mep[X + 4][Y + 1] = ' '; mep[X + 5][Y + 1] = '\\'; 
    mep[X - 1][Y + 2] = '|'; mep[X][Y + 2] = '|'; mep[X + 1][Y + 2] = '|'; mep[X + 2][Y + 2] = '|'; 
    mep[X - 1][Y + 3] = '|'; mep[X][Y + 3] = '|'; mep[X + 1][Y + 3] = '|'; mep[X + 2][Y + 3] = '|'; 

} 
void map::addTree() { 
    buildTree(74, 69); 
    buildTree(5, 6); 
    //add 18 more 
} 
void map::buildMap() { 
    bs(); 
    addTree(); 
} 
void map::printMap(int X, int Y) { 
    //this is what the players will see 
    std::string viewMap[15]; 

    for (int x = 0; x<15; x++) { 
     for (int y = 0; y <= 70; y++) { 
      viewMap[x] += mep[Y + y][X + x]; 

     } 
    } 
    //this prints the visible map for the players 
    std::cout << viewMap[1] + "\n" + viewMap[2] + "\n" + viewMap[3] 
     + "\n" + viewMap[4] + "\n" + viewMap[5] + "\n" + viewMap[6] 
     + "\n" + viewMap[7] + "\n" + viewMap[8] + "\n" + viewMap[9] 
     + "\n" + viewMap[10] + "\n" + viewMap[11] + "\n" + viewMap[12] 
     + "\n" + viewMap[13] + "\n" + viewMap[14] << std::endl; 

} 
int main() 
{ 
    //this is my main im using it as an update frames right now 
    while (1) { 
//also i will have the world render and build it self as a whole first and only loop the frame update ik its given but ill say it anway 
     map mp; 
     mp.~map(); 
    } 
} 
+2

수동으로 소멸자를 호출하지 마십시오에 대한

std::cout << "\033[f"; 

희망이 솔루션입니다. – melpomene

+0

나는 처음에는 소멸자를 사용하여 화면을 지우고 IM은 나를 대신 할 Google 워드 프로세서에 익숙했다. –

+0

개체의 소멸자는 해당 개체의 수명이 끝나면 자동으로 호출됩니다. 명시 적으로 호출해야하는 상황은 매우 드물지만,이 중 하나가 아닙니다. –

답변

0

.

프로그램이 터미널 만 사용하는 경우 특정 ASCII 문자를 인쇄하여 줄의 처음으로 돌아갈 수 있습니다. 그런 다음 전체 화면을 다시 작성할 수 있습니다.

\033[f 

이것은 내가 터미널 기반의 ascii 게임에 사용했던 것입니다. 겹쳐 쓰려는 행만큼 인쇄하십시오. 당신이

+0

안녕하세요. 내 문제를 배웠고, 어떻게하면 내 문제를 명확히하고, 내가 무엇을 묻고 있는지를 분명히 알 수 있습니다. 내 게임은 기본 (1) 루프 및 시스템 ("CLS") 나쁘다는 것을 알고 있지만 기본적으로 내 질문을 요약하는 방법을 사용하여 기본 프레임 snyc 함수를 만드는 방법. 나는 시원하고 독창적 인 도서관을 가지고 일반 영상 스튜디오를 사용하고, 나는 그것을 바꾸기 위해 무엇을하지 않는다. 어떻게 간단한 프레임 동기화 기능/클래스 ????? –