2014-11-01 1 views
0

벡터를 사용하려고하는 최고 점수 목록에 최신 최신 업데이트를 표시하도록 코드를 업데이트하기 만하면됩니다. 나는 벡터 진술을 꺼 냈지만, 여기이 사실을 알고, 텍스트 파일에서 글쓰기와 읽기에 완벽하게 작동한다. 주의 -이 코드를 한 사람 만 업데이트하면 새로운 코드를 볼 수 있습니다.C++에서 벡터를 사용하는 최고 점수 목록

// Get the scores from the game 
int getHighscore() 
{ 
    ShowConsoleCursor(true); 
    HANDLE hOut; 
    hOut = GetStdHandle(STD_OUTPUT_HANDLE); 
    fstream file; 
    file.open("Highscores.txt", ios::out | ios::app); 
    if(file.good()==true) { 
     string TextLimit; 
     TextLimit = charLimit(); 
     file << TextLimit; 
     for(int a=0; a<=40-TextLimit.length(); a++) { 
      file<<" "; 
      } 
      file<<Killed<<endl; 
      file.close(); 
     } 
     ShowConsoleCursor(false); 
     return 0; 
} 

// Displays the scores from the game 
void HighscoreResults() 
{ 
    system("cls"); 
    fstream file; 
    file.open("Highscores.txt", ios::in); 
    if(file.good()==true) 
    { 
     string p1Name; 
     SetColor(11); 
     CPos(1,15); cout << " _ _ _  _          \n"; 
     CPos(2,15); cout << " | | | (_) __ _| |__ ___ ___ ___ _ __ ___ ___  \n"; 
     CPos(3,15); cout << " | |_| | |/ _` | '_ \\/ __|/ __/ _ \\| '__/ _ \\/ __| \n"; 
     CPos(4,15); cout << " | _ | | (_| | | | \\__ \\ (_| (_) | | | __/\\__ \\ \n"; 
     CPos(5,15); cout << " |_| |_|_|\\__, |_| |_|___/\\___\\___/|_| \\___||___/ \n"; 
     CPos(6,15); cout << "   |___/          \n"; 
     CPos(7,10); SetColor(10); 
     cout << " ------------------------------------------------------------"; 
     CPos(9,15); SetColor(14); 
     cout << " Names:\n"; 
     CPos(9,50); 
     cout << " Zombies Killed:\n"; SetColor(15); 
     while(getline(file, p1Name)) 
     { 
      cout << "     " << p1Name << endl; 
     } 
     file.close(); 
    } 
    else 
    { 
     cout<<"The file cannot open!"; 
     system("pause >nul"); 
    } 
} 

// Makes where only a 8 char can be entered when entering a name 
string charLimit() 
{ 
    int characters=-1; 
    char text[10]; 
    int Button; 
    string TextLimit; 
    while(true) 
    { 
     // Clears the name when backspaced 
     CPos(20, 13); 
     cout<<"      "; 
     CPos(20, 13); 
     cout<<" Name: "; 
     // Puts a limit on the characters of the text 
     for(int a=0; a<=characters; a++) 
     { 
      cout<<text[a]; 
     } 
     Button = getch(); 
    if(Button==13 && characters>0) 
    { 
     for(int a=0; a<=characters; a++) 
     { 
      if(text[a]!=' ') TextLimit = TextLimit + text[a]; 
     } 
      return TextLimit; 
     } 
     if(Button==8 && characters>=0) 
     { 
      text[characters] = ' '; 
      characters--; 
     } 
     else if(Button!=8 && characters+1<=9) 
     { 
      characters++; 
      text[characters] = Button; 
     } 
    } 
} 
+0

출력이란 무엇입니까? 벡터는 어디에서 정렬됩니까? 벡터 안에는 단 하나의 아이템이있는 것처럼 보입니다. –

+0

@qamyoncu 공백의 출력 HighscoreResults(); 그리고 벡터와 함께, 나는 그들에게 아직 익숙하지 않고 텍스트 문서 안에서 하나를 사용하는 방법에 대해 매우 혼란 스럽다. – ProgrammerRyan98

+0

@ ProgrammerRyan98 살해의 유형은 무엇입니까? – furkle

답변

0

저장하기 전에 정렬해야합니다. std::sort 방법과 같이 용도에 사용할 수 있습니다 :이 곳에서 SS를 정렬합니다

std::sort (SS.begin(), SS.end()); 

. SS를 순서가 맞지 않게 유지하려면 먼저 복사본을 작성한 다음 복사본을 정렬해야합니다. (왜 비정상적인 벡터에서 높은 점수를 얻고 싶은지 잘 모르겠지만)

kill 값을 어딘가에 정렬하고 있다는 제안이 있지만, 이제까지 끝내는 것처럼 보입니다.

또한 벡터를 채울 때 수행하려는 작업이 정확히 무엇인지 확신 할 수 없습니다. 당신은 죽은 타입을 포함하지 않았다. (비록 int라고 가정하고 있지만, 벡터에 추가하려고 시도 할 때 컴파일러 에러가 발생하기 때문이다), 단 하나의 int를 SS에 한 번만 push_back한다. 당신의 코드.

새 편집본에 따르면, 나는 당신이 잘못된 방식으로 높은 점수의 텍스트 파일을 사용하고 있다고 생각합니다. 당신은 게임 진행 과정에서 높은 점수를 지키고있는 것처럼 보이지 않습니다. 오히려 각 게임의 결과를 파일에 추가 한 다음 파일의 내용을 최고 점수로 인쇄합니다. 여기에 내가이 작업을 수행해야한다고 생각하는 방법은 다음과 같습니다

  1. 는 문자열이나 문자 []의 이름과 INT 죽이고있는 Score 구조체의 각을 저장, 프로그램의 시작 부분에서 높은 점수를 읽어보십시오. 이들 각각을 벡터 클래스 필드에 저장하십시오. 채워진 후에이 벡터를 큰 것부터 작은 것으로 정렬하십시오. (std::sort() 콜에 대한 비교자를 구현해야합니다. 내가 연결된 가이드를보십시오.)

  2. 플레이어의 게임이 끝나면 점수를 구성하여 vector<Score>에 추가하십시오. 보드에서 최대 점수를 얻으려면 (아마도해야 할 것입니다) vector의 마지막 요소 (예 : Score)의 최근 요소가 가장 최근의 재생 횟수보다 적게 죽었는지 확인해야합니다. 그렇다면 마지막 요소를 제거하고 현재 게임에 Score 개체를 추가하고 다시 정렬하십시오. 스코어 파일을 비우고 vector<Score>을 반복하면서 이름과 줄을 쓰십시오.

여러분의 SS 벡터는 선수의 이름을 담을 수 없을 것입니다.

+0

그래서 내 전체 벡터를 내 코드에서 삭제해야하며 getHighscore라고 쓰면 어떨까요? 또는 HighscoreResults? 기본적으로 먼저 벡터에 저장 하시겠습니까? 또는 점수가 호출 된 후 벡터에 저장합니까? – ProgrammerRyan98

+0

@ ProgrammerRyan98 글쎄, 당신이 가진 문제 중 하나는 당신이 높은 점수의 텍스트 파일에 글을 쓰는 것처럼 보이지 않는다는 것입니다. 그 섹션을 생략 했습니까? – furkle

+0

아니요, 텍스트 파일에 쓰지 않습니다. 저를 믿으십시오. 그것은 완벽하게 작동합니다 – ProgrammerRyan98

0
class player{ 
    string name; 
    int score; 
} 

vector<player> players; 

목록을 정렬하지 않았습니다. 벡터를 저장하기 전에 정렬해야합니다. 따라서 push_back 항목을 사용할 때마다 std::sort();을 사용하여 다시 정렬해야합니다.

+0

벡터에 어떻게 넣을까요? 후원자 앞에서? 나는 완전히 혼란 스럽다. – ProgrammerRyan98

+0

당신이하고 싶은 것은 사용자가 8 자의 이름을 입력하고 게임에서 가장 높은 점수를 얻은 다음이 두 쌍을 파일에 저장하는 것이다. 이 올바른지? – XBOOS

+0

거의!, 어쩌면 상위 10 개 최고 기록을 표시하고 싶지만 8 자의 이름을 얻을 수 있다고 생각했습니다. 그러나 점수를 가장 높은 점수에서 가장 낮은 점수 순서로 확대하여 표시하고 싶습니다. – ProgrammerRyan98