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

[Allegro]Wczytywanie mapy z pliku

Ostatnio zmodyfikowano 2009-08-16 19:10
Autor Wiadomość
kitty177
Temat założony przez niniejszego użytkownika
[Allegro]Wczytywanie mapy z pliku
» 2009-08-13 17:08:02
Do tej pory mapy tworzylam i wczytywalam tak:
C/C++
short int map[ 12 ][ 16 ] =
{
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 0, 0, 0,
    0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 1, 1, 1, 1,
    0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 2, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   
};

void wys_mape()
{
    int licznik_x, licznik_y;
    for( licznik_x = 0; licznik_x < 13; licznik_x++ )
    {
        for( licznik_y = 0; licznik_y < 11; licznik_y++ )
        {
            blit( teren, bufor,
            ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] % 4 ) * 40,
            ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] / 4 ) * 40,
            licznik_x * 40, licznik_y * 40, 40, 40 );
        }
    }
};

Jak zrobic, aby numery tekstur miec w pliku .txt i jedynie wczytywac je do programu.Probowalam tego, ale wyswietla same "0":
C/C++
bool load_mapa( const char * f_sFileName )
{
    std::fstream plik;
    plik.open( "plik.txt", std::ios::in );
    if( !plik.good() ) return false;
   
    std::string wiersz;
    while( getline( plik, wiersz ) )
    {
        for( int i = 0; i < wiersz.length(); i++ )
        {
            plik >> map[ 12 ][ 16 ];
        } //for
    } //while
   
    return true;
}
Co jest w tym zle? Zaznaczam ze zalezy mi aby plik tekstowy zawieral same cyfry.
P-9405
DejaVu
» 2009-08-13 17:21:48
Aż dziwne, że program Ci się nie wywala :)
C/C++
plik >> map[ 12 ][ 16 ];
Piszesz poza tablicę to raz, a dwa piszesz stale do tej samej komórki.
P-9408
kitty177
Temat założony przez niniejszego użytkownika
» 2009-08-13 17:53:33
Czyli jak powinno byc?
P-9412
DejaVu
» 2009-08-13 18:01:54
Napisz kod, który wypełni tablicę, którą przedstawiłeś kolejnymi liczbami naturalnymi - pomiń na chwilę obecną wczytywanie z pliku. Jak to zrobisz to zamień przypisanie liczby na:
plik >> map[ y ][ x ];
i będzie działało.
P-9413
kitty177
Temat założony przez niniejszego użytkownika
» 2009-08-13 19:28:09
Coś takiego? :
C/C++
bool load_mapa( const char * f_sFileName )
{
    std::fstream plik;
    plik.open( "plik.txt", std::ios::in );
    if( !plik.good() ) return false;
   
    int x = 0, y = 0;
   
    std::string wiersz;
    while( getline( plik, wiersz ) )
    {
        for( int i = 0; i < wiersz.length(); i++ )
        {
           
            plik >> map[ y ][ x ];
            x++;
            if( x == 16 )
            {
                x = 0;
                y++;
            }
           
        } //for
    } //while
   
    return true;
}
Tylko niestety dalej nie dziala :(
P-9416
DejaVu
» 2009-08-13 21:11:19
Przeczytał całego mojego poprzedniego posta powoli i ze zrozumieniem... bo najwyraźniej tego nie zrobiłeś.
P-9419
DeBugger
» 2009-08-13 22:25:13
C/C++
//...
const int pola_x = 12;
const int pola_y = 16;
//...
for( int a = 0; a < pola_x; a++ ) for( int b = 0; b < pola_y; b++ ) plik >> map[ a ][ b ];
//...
}
P-9425
kitty177
Temat założony przez niniejszego użytkownika
» 2009-08-14 10:53:36
trzeba bylo od razu powiedziec ze chodzi o cos podobnego co jest w funkcji wys_mape()
Mam teraz taki kod:
C/C++
#include <allegro.h>
#include <fstream>

int mapa_x = 0, mapa_y = 0;
const int pola_x = 12;
const int pola_y = 16;
BITMAP * teren = NULL;
BITMAP * bufor = NULL;

short int map[ 12 ][ 16 ];


bool load_mapa( const char * f_sFileName )
{
    std::fstream plik;
    plik.open( "plik.txt", std::ios::in );
    if( !plik.good() ) return false;
   
    std::string wiersz;
    while( getline( plik, wiersz ) )
    {
        for( int i = 0; i < wiersz.length(); i++ )
        {
           
            for( int a = 0; a < pola_x; a++ )
            {
                for( int b = 0; b < pola_y; b++ )
                {
                    plik >> map[ a ][ b ];
                }
            }
        } //for
    } //while
   
    return true;
}


void wys_mape()
{
    int licznik_x, licznik_y;
    for( licznik_x = 0; licznik_x < 13; licznik_x++ )
    {
        for( licznik_y = 0; licznik_y < 11; licznik_y++ )
        {
            blit( teren, bufor,
            ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] % 4 ) * 40,
            ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] / 4 ) * 40,
            licznik_x * 40, licznik_y * 40, 40, 40 );
        }
    }
};

A potem w funkcji main mam napisane
C/C++
//...
clear_to_color( bufor, makecol( 150, 150, 150 ) );

wys_mape();
//...
I gdzie mam wstawic funkcje load_mapa, aby wszystko dzialalo?
P-9435
« 1 » 2 3
  Strona 1 z 3 Następna strona