Błędne wczytywanie mapy
Ostatnio zmodyfikowano 2014-06-04 21:24
GGG205 Temat założony przez niniejszego użytkownika |
Błędne wczytywanie mapy » 2014-06-04 16:43:00 Cześć. Mam problem z wczytywaniem mapy. Nie jest ona wczytywana poprawnie. Wszystkie znaki są wczytywane z pliku i zliczane są linijki i ile znaków w nich jest. Następnie tworzona jest tablica dwuwymiarowa(dynamicznie), a następnie chciałem dodać do tej tablicy [j] o typie char zawartość pliku i mam takie coś: http://ifotos.pl/zobacz/1png_eexqqsx.png/
kod funkcji ładowania mapy:
void Level::LoadMap() { string bufor; string buf; LvlTxt.open( "Lvl\\" + nameMap ); if( LvlTxt.good() ) { int i = 0; while( getline( LvlTxt, bufor ) ) i++; LoadedLevel = new char *[ bufor.length() ]; for( int j = 0; j < bufor.length(); j++ ) { LoadedLevel[ j ] = new char[ i ]; } width = bufor.length(); height = i; for( int x = 0; x < height; x++ ) { for( int y = 0; y < width; y++ ) { LvlTxt >> LoadedLevel[ x ][ y ]; cout << LoadedLevel[ x ][ y ]; } cout << endl; } LvlTxt.close(); } else cout << "Nie mozna wczytac mapy" << endl; } Cały kod klasy:
#include <SFML\Graphics.hpp> #include <string> #include <Windows.h> #include <iostream> #include <fstream>
#include "Map.h"
using namespace std;
Level::Level( string bg = "Graphics//Background//Standart.png", string MapName = "Level1.txt" ) : nameBG( bg ) , nameMap( MapName ) { land = new block( "Graphics\\Blocks\\Stone.png", true ); }
void Level::LoadMap() { string bufor; string buf; LvlTxt.open( "Lvl\\" + nameMap ); if( LvlTxt.good() ) { int i = 0; while( getline( LvlTxt, bufor ) ) i++; LoadedLevel = new char *[ bufor.length() ]; for( int j = 0; j < bufor.length(); j++ ) { LoadedLevel[ j ] = new char[ i ]; } width = bufor.length(); height = i; for( int x = 0; x < height; x++ ) { for( int y = 0; y < width; y++ ) { LvlTxt >> LoadedLevel[ x ][ y ]; cout << LoadedLevel[ x ][ y ]; } cout << endl; } LvlTxt.close(); } else cout << "Nie mozna wczytac mapy" << endl; }
void Level::DrawMap( RenderWindow & wnd ) { for( int i = 0; i < width; i++ ) { for( int j = 0; j < height; j++ ) { switch( LoadedLevel[ i ][ j ] ) { case '#': land->SetPosition( i * 54, j * 54 ); land->Draw( wnd ); break; case '.': break; } } } } |
|
pekfos |
» 2014-06-04 18:01:58 Po odczytaniu całego pliku przy zliczaniu linii, niczego dalej nie odczytujesz, bo strumień jest w stanie błędu, a plik się skończył. |
|
GGG205 Temat założony przez niniejszego użytkownika |
» 2014-06-04 18:07:35 Czyli muszę wrócić do linii zerowej ? |
|
pekfos |
» 2014-06-04 18:16:45 Jeśli koniecznie chcesz tak wczytywać.. |
|
GGG205 Temat założony przez niniejszego użytkownika |
» 2014-06-04 18:40:43 A podałbyś lepszy sposób ? Każdy lepszy się przyda :) |
|
pekfos |
» 2014-06-04 18:50:06 while( getline( LvlTxt, bufor ) ) i++;
|
Tu już wczytałeś całą mapę, tylko niczego nie zapisywałeś. |
|
GGG205 Temat założony przez niniejszego użytkownika |
» 2014-06-04 19:12:23 Ale moja mapa to przecież char **mapa to mogę zapisać jakoś w ten sposób ? char **mapa = bufor. Sorry, że tak dużo pytać, ale coś słabo umiem wskaźniki. |
|
pekfos |
» 2014-06-04 19:17:36 Nie są tu potrzebne. |
|
« 1 » 2 |