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

[Allegro] Zapisywanie mapy

Ostatnio zmodyfikowano 2009-02-24 07:43
Autor Wiadomość
PhonniX
Temat założony przez niniejszego użytkownika
[Allegro] Zapisywanie mapy
» 2009-02-22 15:42:47
Witam. Mam pytanie, czy mapa zapisana w tej formie:
C/C++
short int map[ 40 ][ 20 ] =
{
    15, 15, 15, 15, 15, 7, 10, 10, 10, 10, 10, 10, 6, 15, 15, 15, 15, 15, 15, 15,
    15, 15, 15, 15, 15, 4, 9, 10, 10, 10, 8, 3, 5, 15, 0, 2, 2, 2, 1, 15,
    2, 1, 15, 15, 15, 15, 7, 10, 10, 10, 6, 15, 15, 15, 7, 10, 10, 10, 6, 15,
    10, 6, 15, 15, 15, 15, 4, 9, 10, 10, 6, 15, 15, 15, 4, 3, 3, 3, 5, 15,
    10, 12, 2, 1, 15, 15, 15, 7, 10, 8, 5, 15, 15, 15, 15, 15, 15, 15, 15, 15,
    10, 10, 10, 6, 15, 15, 15, 4, 3, 5, 15, 15, 15, 15, 15, 15, 15, 0, 2, 2,
    10, 10, 10, 6, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 2, 2, 13, 10, 10,
    3, 3, 3, 5, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 7, 10, 10, 10, 8, 3,
    [...]
(numerek-jeden kafelek mapki)
Czy ten sposób jest dobry, jeśli nie to jaki jest lepszy?
Mapkę mam razem z resztą kodu, czy mogę mapkę mieć zapisaną w innym pliku, np.: *.map ?
Jak zrobić prosty edytor map?
P-4341
lynx
» 2009-02-22 16:01:26
Tak sposób nadaje się do używania i możesz mieć mapę w oddzielnym pliku. Wtedy tą tablicę co napisałeś (tylko pustą) napełniasz danymi z pliku. Edytor map jest nieco skomplikowany. Musisz znać fstream/cstdio do obsługi plików i coś do obsługi okienka i myszy. (zapewne wybierzesz Allegro) Zależy też jak bardzo zaawansowany edytor chcesz robić. Na początku jako edytora map użyłbym notatnika, a na samym końcu pracy nad projektem bawiłbym się w robienie edytora.
P-4343
DejaVu
» 2009-02-22 16:13:16
Przedmówca ma rację :) nie warto na początku poświęcać za dużo czasu na edytor poziomów ze względu na to, że będzie on bezużyteczny tak długo, jak gra nie będzie kompletna. Jeśli najpierw zrobisz jedną mapę w notatniku, przykładowo wyglądającą tak:
C/C++
00010100000001010000000101000000010100000001010000
11110100001111010000111101000011110100001111010000
00000000000000000000000000000000000000000000000000
01000000000100000000010000000001000000000100000000
00010000000020310000002031000000203100000020310000
00203100000000010000000001000000000100000000010000
00000100000020310000002031000000203100000020310000
00010100000001010000000101000000010100000001010000
11110100001111010000111101000011110100001111010000
00000000000000000000000000000000000000000000000000
01000000000100000000010000000001000000000100000000
00012200000020310000002031000000203100000020310000
00222100000000010000000001000000000100000000010000
22222222222222222222222222200000203100000020310000
22222222222222222222222222222200010100000001010000
33333333333333333333333333222222111010001111010000
33333333333333333333333222222222200000000000000000
33333333333333333322222220000001000000000100000000
22222233333332222222202031000000203100000020310000
00222222222222222000000001000000000100000000010000
00000100222220010000002031000000203100000020310000
00010100000201010000000101000000010100000001010000
11110100001111010000111101000011110100001111010000
00000000000000000000000000000000000000000000000000
01000000000100000000010000000001000000000100000000
00010000000020310000002031000000203100000020310000
00203100000000010000000001000000000100000000010000
00000100000020310000002031000000203100000020310000
00010100000001010000000101000000010100000001010000
11110100001111010000111101000011110100001111010000
00000000000000000000000000000000000000000000000000
01000000000100000000010000000001000000000100000000
00010000000020310000002031000000203100000020310000
00203100000000010000000001000000000100000000010000
00000100000020310000002031000000203100000020310000
00010100000001010000000101000000010100000001010000
11110100001111010000111101000011110100001111010000
00000000000000000000000000000000000000000000000000
01000000000100000000010000000001000000000100000000
00010000000020310000002031000000203100000020310000
00203100000000010000000001000000000100000000010000
00000100000020310000002031000000203100000020310000
00010100000001010000000101000000010100000001010000
11110100001111010000111101000011110100001111010000
00000000000000000000000000000000000000000000000000
01000000000100000000010000000001000000000100000000
00010000000020310000002031000000203100000020310000
00203100000000010000000001000000000100000000010000
00000100000020310000002031000000203100000020310000
00010100000001010000000101000000010100000001010000
11110100001111010000111101000011110100001111010000
00000000000000000000000000000000000000000000000000
01000000000100000000010000000001000000000100000000
00010000000020310000002031000000203100000020310000
00203100000000010000000001000000000100000000010000
00000100000020310000002031000000203100000020310000

To masz kilka spraw na dzień dobry załatwionych:
1) nie musisz robić edytora map na początku po to, żeby móc rozwijać dalej swoją grę.
2) nie poświęciłeś dużo na to czasu, przez co możesz szybciej skupić się na rozwijaniu gry
3) wykorzystałeś istniejące narzędzia do stworzenia mapy w prosty sposób

Docelowo oczywiście edytor będzie wskazany, jednak ja z Pietrzuchem obecnie piszemy RTS'a i stosujemy własnie takie podejście jakie Ci przedstawiliśmy.
1) utworzyć mapę w notatniku
2) wczytać ją do tablicy
3) wyświetlać wczytaną mapę z tablicy
P-4344
PhonniX
Temat założony przez niniejszego użytkownika
» 2009-02-22 16:40:35
A w jakim pliku mogę zapisać mapkę? Czytałem co nie co o *.data, ale czy np mógłbym zapisać w pliku *.map? I jak mogę w allegro wczytać ten plik?
P-4348
DejaVu
» 2009-02-22 16:48:07
Nie ważne jakie rozszerzenie ma plik - programista o tym decyduje. Ważne jakie dane są w pliku. Dane wczytujesz sobie jak z każdego zwykłego pliku - otwierasz plik o podanej nazwie i czytasz go do końca :)
P-4349
PhonniX
Temat założony przez niniejszego użytkownika
» 2009-02-22 20:51:16
Nie wiem, próbuję wczytać mapkę w ten sposób

C/C++
void wczytaj()
{
    fstream plik;
    plik.open( "plik.txt", ios::in );
    if( plik.good() )
    {
        string napis;
        while( !plik.eof() )
        {
            getline( plik, napis );
            cout << napis << endl;
        }
        plik.close();
    } else cout << "Error! Nie udalo otworzyc sie pliku!" << endl;
   
}
Ale w Allegro chyba tak niemożna :/
P-4365
DejaVu
» 2009-02-22 21:15:03
C/C++
bool load_map( const char * f_sFileName )
{
    std::fstream plik;
    plik.open( f_sFileName, std::ios::in );
    if( !plik.good() ) return false;
   
    std::string wiersz;
    while( getline( plik, wiersz ) )
    {
        //tutaj przetwarzasz każdy wiersz wczytany z pliku np.
        for( int i = 0; i < wiersz.length(); i++ )
        {
            //przepisywanie np. do jakiejś tablicy czy coś
        } //for
    } //while
   
    return true;
}
P-4369
PhonniX
Temat założony przez niniejszego użytkownika
» 2009-02-23 08:19:27
1.Coś nie tak wczytuje, bo mapkę wyświetla jakby w tablicy były same zera, a tak naprawdę jest to:

39,39,39,39,39,39,39,39,39,3,39,39,39,39,39,39,39,2,39,39,
  39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
  39,39,3,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
  39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
  39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
  39,39,39,39,2,39,39,39,39,39,39,39,39,39,39,2,39,39,39,39,
  3,39,3,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
  39,39,39,39,39,39,39,39,39,39,39,39,39,39,3,39,39,39,39,39,
  39,39,39,39,39,39,39,39,39,2,39,39,39,39,39,39,39,39,39,39,
  39,39,39,39,39,39,39,3,39,39,39,39,39,39,39,39,39,39,39,39,
  2,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
  39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
  39,39,39,39,39,39,39,39,39,39,39,3,39,39,39,39,39,39,39,39,
  39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
  3,39,39,39,39,39,39,39,39,39,39,3,39,39,39,3,39,39,39,39,
  39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,2,39,39,
  39,39,39,39,39,39,39,39,39,39,39,2,39,39,39,39,39,39,39,39,
  39,2,39,39,39,3,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
  39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
  39,39,39,39,39,3,39,39,39,39,39,39,39,39,39,39,39,39,39,39
A tu kod programu:

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[ 20 ][ 20 ];
        } //for
    } //while
   
    return true;
}

2.Jestem na etapie kolizji, i jak zapisywać obiekty które da się przejść i których nie, u mnie każdy Spritest ma swój numerek i czy mam wymieniać po kolei spitesty(jest ich ponad 500) i nadawać mu true lub false(true- można przejść, false-nie można)? Czy jest inny lepszy sposób?
P-4384
« 1 » 2
  Strona 1 z 2 Następna strona