Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Błędne wczytywanie mapy

Ostatnio zmodyfikowano 2014-06-04 21:24
Autor Wiadomość
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:
C/C++
void Level::LoadMap()
{
   
    string bufor; //Przechowuje informacje o liczbie znakow w linijce, które przekaze mapie oraz jakie sa to znaki;
    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:
C/C++
#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 )
{
   
    //if(!Background.loadFromFile(nameBG))
    //MessageBox(NULL,"Nie mozna wczytac obrazkow","Error",MB_OK | MB_ICONSTOP);
    //else SpriteBg.setTexture(Background);
   
    land = new block( "Graphics\\Blocks\\Stone.png", true );
}

void Level::LoadMap()
{
   
    string bufor; //Przechowuje informacje o liczbie znakow w linijce, które przekaze mapie oraz jakie sa to znaki;
    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;
            }
        }
    }
}
P-111410
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ł.
P-111414
GGG205
Temat założony przez niniejszego użytkownika
» 2014-06-04 18:07:35
Czyli muszę wrócić do linii zerowej ?
P-111416
pekfos
» 2014-06-04 18:16:45
Jeśli koniecznie chcesz tak wczytywać..
P-111418
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 :)
P-111421
pekfos
» 2014-06-04 18:50:06
C/C++
while( getline( LvlTxt, bufor ) )
     i++;

Tu już wczytałeś całą mapę, tylko niczego nie zapisywałeś.
P-111422
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.
P-111424
pekfos
» 2014-06-04 19:17:36
Nie są tu potrzebne.
P-111425
« 1 » 2
  Strona 1 z 2 Następna strona