Lista najlepszych wyników - zapis do pliku i odczyt

0

Witam.
Mam stworzyć grę, całość już jako tako mam. Zostało mi tylko do napisania zapisywanie i odczytywanie listy najlepszych wyników. Ma być tak, że ktoś ma mieć możliwość wpisania pseudonimu i wynik zostanie zapamiętany i zapisany w pliku. Jak się znów uruchomi grę, to musi być odczyt listy najlepszych wyników. Próbowałem stworzyć tablicę ze stringami, ale jakoś mi to nie idzie. Czy ktoś ma jakiś pomysł? Mógłby ktoś pomóc?

0

Jeżeli chcesz użyć tablic, to musi być wiadomo ile linijek [wyników] (zależy jak zapisujesz) ma ten plik. Możesz zrobić tak, że: otwierasz plik, liczysz linijki, tworzysz taką tablicę stringów, tyle ile wyników i wczytujesz to tablicy linijki po kolei do końca. Tylko wtedy musisz odczytać nick i wynik, możesz skorzystać z stringstream, przy zapisie oddzielając nick od wyniku np. ;. Od d**y strony zacząłem... A zapisujesz tak, że dopisujesz na koniec pliku właśnie taką linijkę: Bolek;1200.

0

Ma być 10 najlepszych wyników. Nie mam pomysłu jak ma wyglądać taka tablica. Całą tą grę tworzymy w SLDu. A jak rozdzielić od siebie konkretne wyniki?

0

Udało mi się zrobić coś takiego:

if (wybor==2){
fstream resultsn;
resultsn.open( "wynikin.txt", std::ios::in | std::ios::out );
for(int i=0;i<10;i++)
resultsn>>wynikin[i];
resultsn.close();

fstream resultsw;
resultsw.open( "wynikiw.txt", std::ios::in | std::ios::out );
for(int i=0;i<10;i++)
resultsw>>wynikiw[i];
resultsw.close();

DrawSurface(screen, tlo, 320, 240);
for (int i=40;i<410;i=i+40){
sprintf(text, "%d",wynikin[licz]);
DrawString(screen, 100, i, text, charset);
sprintf(text, "%d",wynikiw[licz]);
DrawString(screen, 300, i, text, charset);
SDL_Flip(screen);
licz=licz+1;
								
}
SDL_Delay(5000);
licz=0;
}

Tablica wynikin[10] jest char a tablica wynikiw[10] jest int.
W pliku wynikin.txt mają być pseudonimy rozmieszczone w taki sposób:
Zenek
Marcin
Zbyszek
itd.

W pliku wynikiw.txt mają być wyniki rozmieszczone w taki sposób:
1256
1250
1000
itd.

Odczytywanie wyników mi działa. Ale jeżeli w pliku wynikin.txt wstawię w pierwszą linijkę np. imię Marcin, to przy drukowaniu na ekranie program wypisuje jakieś liczby.
Jak mam to ustawić?
P.S. nie wiem czy nie za bardzo zakręciłem

0
sprintf(text, "%d",wynikin[licz]);
DrawString(screen, 100, i, text, charset);

W tej linijce zmieniłem już %d na %s i jak zamiast wynikin[licz] wpiszę np "Marcin" to wyświetla poprawnie, ale jeżeli do tablicy jako pierwszy element będę chciał wstawić Marcin to nie działa, tzn wynikin[0]="Marcin", wtedy wyświetlają się krzaczki

0

Skoro tablica z nick'ami jest typu char to jak chcesz do niej wczytać poszczególne nicki, skoro jeden element tablicy przyjmuje jeden znak? Zamień typ tablicy na string, a jeżeli chcesz się bawić z char'em to musisz zrobić tablicę wielowymiarową, gdzie jeden wymiar to poszczególne litery nicku, a drugi to linijki nick'ów - ale nie warto się tak bawić, lepiej zrób ze string'iem. Więc, nie używaj do wczytywania nick'ów operatora >> tylko funkcji getline ze standardowej przestrzeni nazw (std). Mniej więcej tak:

fstream resultsn;
resultsn.open( "wynikin.txt", std::ios::in | std::ios::out ); // po co dajesz flagę out, skoro nie modyfikujesz pliku?
for(int i = 0; i < 10; i++)
    std::getline(resultsn, tablica_stringo[i]);
resultsn.close();

PS: Na forum mamy taką opcję przy poście "edytuj post", nie wal kolejnymi, bo to denerwuje, po prostu dopisuj.
PS2: Druga sprawa, formatuj kod! Wcięcia przy pętli i prawidłowe klamry.

0

Ok, już mam. Poradziłem sobie. powinno być tak:
sprintf(text, "%s",wynikin[licz].c_str());
DrawString(screen, 100, i, text, charset);

Tak, zmieniłem typ tej tablicy na string i już działa. Dzięki za pomoc.

A mam pytanie, jest w SDLu funkcja wpisywania do tablicy? Np. jeżeli ktoś osiągnął wynik by wpisać go do listy najlepszych wyników, w jaki sposób ma podać swoją nazwę? By wpisać ją do tablicy string wynikin[10]??

Mam formatowanie w programie, tu jakoś nie mogłem przesunąć wcięcia

1 użytkowników online, w tym zalogowanych: 0, gości: 1