Haker123 Temat założony przez niniejszego użytkownika |
» 2014-08-02 15:35:10 Po zmianie na File.read( reinterpret_cast < char *>( & Top10_Nick[ i ] ), Max );
Nic nie wyswietla mi ;/ tak jakby string byl pusty, a punkty dalej wypisuja smieci. Edit: Jak dopisac to zero na koncu stringa?? |
|
pekfos |
» 2014-08-02 15:39:14 Podaj aktualny, kompletny kod. Jak dopisac to zero na koncu stringa?? |
Zwiększ rozmiar o 1. size() nie uwzględnia zera na końcu. |
|
Haker123 Temat założony przez niniejszego użytkownika |
» 2014-08-02 16:33:01 Czyli przy zapisie stringa musze dac Nick.size() + 1 ?? Oto kod. Odczyt bool Map::Load_Map( ALLEGRO_DISPLAY * display, std::string Name ) { File_Name = "Maps\\" + Name; std::fstream File; File.open( File_Name.c_str(), std::ios::in | std::ios::binary ); if( !File ) { al_show_native_message_box( display, "MAP ERROR", "ERROR", "You can not open the map, possible that the map does not exist", NULL, ALLEGRO_MESSAGEBOX_ERROR ); return false; } int What[ 400 ]; File.read(( char * ) & What, sizeof( What ) ); for( int y = 0; y < 400; y++ ) { if( What[ y ] == 1 ) Screen_Map[ y ] = Elements[ 15 ]; else if( What[ y ] == 2 ) Screen_Map[ y ] = Elements[ 16 ]; else if( What[ y ] == 3 ) { std::cout << "Y W ODCZYCIE MAPY = " << y << std::endl; Snakess->Snake[ 0 ][ 0 ] = y % 20; Snakess->Snake[ 0 ][ 1 ] = y / 20; Screen_Map[ y ] = Elements[ 0 ]; } else if( What[ y ] == 4 ) { Snakess->Snake[ 1 ][ 0 ] = y % 20; Snakess->Snake[ 1 ][ 1 ] = y / 20; Screen_Map[ y ] = Elements[ 8 ]; } } int place = Return_Place_of_String( File, Code_Nick ); if( place == - 1 ) { al_show_native_message_box( display, "ERROR", "ERROR FILE", "FILE DONT HAVE TOP10 NICK", NULL, ALLEGRO_MESSAGEBOX_ERROR ); return false; } File.seekg( place ); for( int i = 0; i < 10; i++ ) { File.read( reinterpret_cast < char *>( & Top10_Nick[ i ] ), Max ); } place = Return_Place_of_String( File, Code_Point ); if( place == - 1 ) { al_show_native_message_box( display, "ERROR", "ERROR FILE", "FILE DONT HAVE TOP10 POINTS", NULL, ALLEGRO_MESSAGEBOX_ERROR ); return false; } File.seekg( place ); for( int i = 0; i < 10; i++ ) File.read( reinterpret_cast < char *>( & Top10_Points[ i ] ), sizeof( unsigned ) ); File.close(); }
Zapis bool Map::Save_Map( ALLEGRO_DISPLAY * display ) { std::ofstream File( File_Name.c_str(), std::ios::out | std::ios::binary ); if( !File ) { al_show_native_message_box( display, "MAP ERROR", "ERROR", "You can not save the map", NULL, ALLEGRO_MESSAGEBOX_ERROR ); return false; } int What[ 400 ]; for( int y = 0; y < 400; y++ ) { if( Screen_Map[ y ] == Elements[ 15 ] ) { What[ y ] = 1; } else if( Screen_Map[ y ] == Elements[ 16 ] ) { What[ y ] = 2; } else if(( Screen_Map[ y ] == Elements[ 0 ] ) ||( Screen_Map[ y ] == Elements[ 1 ] ) || ( Screen_Map[ y ] == Elements[ 2 ] ) ||( Screen_Map[ y ] == Elements[ 3 ] ) ) { What[ y ] = 3; } else if(( Screen_Map[ y ] == Elements[ 8 ] ) ||( Screen_Map[ y ] == Elements[ 9 ] ) || ( Screen_Map[ y ] == Elements[ 10 ] ) ||( Screen_Map[ y ] == Elements[ 11 ] ) ) { What[ y ] = 4; } } File.write( reinterpret_cast < const char *>( & What ), sizeof( What ) ); File.write( Code_Nick.c_str(), Code_Nick.size() ); for( int i = 0; i < 10; i++ ) File.write( Top10_Nick[ i ].c_str(), Max ); File.write( Code_Point.c_str(), Code_Point.size() ); for( int i = 0; i < 10; i++ ) File.write( reinterpret_cast < char *>( & Top10_Points[ i ] ), sizeof( unsigned ) ); File.write( Check_File.c_str(), Check_File.size() ); File.close(); return true; }
Konstruktor klasy Map w ktorym nadaje poczatkowe wartosci i sa one zapisywane do pliku przy tworzeniu nowej mapy. Map( void ) { Max = 15; Snakess = new Snakes(); for( int i = 0; i < 14; i++ ) { std::stringstream snake; snake << "Graphics\\Snake\\" << i + 1 << ".png"; Elements.push_back( load_bitmap_at_size( snake.str().c_str(), 30, 30 ) ); } Elements.push_back( load_bitmap_at_size( "Graphics\\Eat_Me\\1.png", 30, 30 ) ); Elements.push_back( load_bitmap_at_size( "Graphics\\Empty.png", 30, 30 ) ); Elements.push_back( load_bitmap_at_size( "Graphics\\Wall\\1.png", 30, 30 ) ); for( int i = 0; i < 400; i++ ) Screen_Map.push_back( Elements[ 15 ] ); std::string Nick = "***************"; for( int i = 0; i < 10; i++ ) { Top10_Nick.push_back( Nick ); Top10_Points.push_back( 0 ); } for( int i = 0; i < 10; i++ ) { std::cout << "Top10_Points[" << i << "] = " << Top10_Points[ i ] << std::endl; } };
EDIT: Zapomnialem pokazac jak wypisuje zmienne na ekranie for( TextY = 100, ForI = 0; ForI < 10; ForI++, TextY += 50 ) { Top10_Points << Maps->Top10_Points[ ForI ]; Top10_Nr << ForI + 1; al_draw_text( Font_Big, al_map_rgb( 44, 100, 255 ), 80, TextY, ALLEGRO_ALIGN_LEFT, Top10_Nr.str().c_str() ); al_draw_text( Font_Big, al_map_rgb( 44, 100, 255 ), 150, TextY, ALLEGRO_ALIGN_LEFT, Maps->Top10_Nick[ ForI ].c_str() ); al_draw_text( Font_Big, al_map_rgb( 44, 100, 255 ), 550, TextY, ALLEGRO_ALIGN_LEFT, Top10_Points.str().c_str() ); Top10_Points.str( std::string() ); Top10_Points.clear(); Top10_Nr.str( std::string() ); Top10_Nr.clear(); }
|
|
pekfos |
» 2014-08-02 16:53:02 File.read( reinterpret_cast < char *>( & Top10_Nick[ i ] ), Max );
|
Nie możesz tak zapisać/odczytać. Znowu. int place = Return_Place_of_String( File, Code_Nick );
|
Po co to? |
|
Haker123 Temat założony przez niniejszego użytkownika |
» 2014-08-02 19:13:34 To jak mam odczytywac i zapisywac nazwy graczy oraz ich punkty? Juz nie mam pomyslu :( int Return_Place_of_String( std::fstream & File, std::string Searches ) { std::string a(( std::istreambuf_iterator < char >( File ) ), std::istreambuf_iterator < char >() ); int i = a.find( Searches ); if( i == - 1 ) return - 1; else return i + Searches.length(); }
Ta funkcja ma za zadanie zwrucic miejsce stringa w pliku. Obecnie to malo przydatne w tym programie ale w innych programach przyda mi sie (mozliwe ze w obecnym zrobie tak ze wszystkie bitmapy beda w jednym pliku albo cos podobnego) |
|
pekfos |
» 2014-08-02 19:40:12 To jak mam odczytywac i zapisywac nazwy graczy oraz ich punkty? Juz nie mam pomyslu :( |
To zacznij uważnie czytać odpowiedzi. Tekst zapisuj albo w formie c-stringa, albo w formie bloku danych o stałym rozmiarze - zależy od decyzji projektowych. Dostałeś odpowiedzi na oba sposoby. Ale jaki sens ciągnąć temat, skoro dalej masz te same błędy w kodzie..? |
|
Haker123 Temat założony przez niniejszego użytkownika |
» 2014-08-02 20:14:53 Dzieki tobie wiem co robie zle ale nie wiem jak mam to poprawnie zapisac. Staram sie wykozystac to co piszesz oraz to co znajde na internecie i mi nie wychodzi. Mozesz podac przyklad jak ma wygladac zapis string i vektora do pliku binarnego?? Nie musi byc to do mojego programu, po prostu potrzebuje zobaczyc jak to powinno wygladac bo ja juz nie wiem. |
|
pekfos |
» 2014-08-02 20:34:48 #include <fstream> #include <string>
int main() { std::ofstream ofs( "out.bin", std::ios::binary ); std::string str = "Lorem ipsum"; ofs.write( str.c_str(), str.size() + 1 ); int i = 0xABC; ofs.write( reinterpret_cast < const char *>( & i ), sizeof( int ) ); } Efekt zobacz sobie w hexedytorze. |
|
1 2 « 3 » 4 5 |