Gra animowana 2D - wczytanie elementów świata

0

Witam serdecznie
W ramach edukacji własnej napisałem sobie grę animowaną (nie jakąś wyszukaną, świat dwuwymiarowy) przy użyciu biblioteki graficznej SDL2.
Ta gra to takie "Mario własnej roboty" - no jest ludzik sterowany klawiaturą, biega sobie po kilku różnie wyglądających poziomach, zbiera różne bonusy, zabija NPC, robi średnio-zaawansowane questy, wszystko na czas.

Starałem się napisać w miarę ładny kod <jak na swoje umiejętności>, przy okazji tworzenia gry czytałem sobie o dobrych praktykach pisania w C++, jednak mam problem z wczytywaniem elementów świata (co w sumie już nie zależy od języka programowania, w czym innym też bym nie wiedział jak obiekty przechowywać, a do kategorii C++ dałem, bo nie znalazłem lepszej).

U mnie zrobione jest to na razie "ręcznie" - po prostu jest sobie funkcja, która ładuje do kilku vectorów znajdujących się w klasie World odpowiednie obiekty, każdy obiekt ma swoją pozycję itd. (tak, zapisywałem pozycje wszystkich obiektów w kodzie)
Dla jednego poziomu trzeba często załadować nawet kilka tysięcy obiektów, trzymanie tego po prostu w kodzie wygląda tragicznie

Przykład kawałka funkcji ładującej elementy świata dla trzeciego levela: (jakby ktoś nie ogarnął jaki syf zrobiłem)


void LevelManager::setThirdLevel(World &world)
{
        //wyczyszczenie vectorow, które zawierają elementy poprzedniego poziomu
        world.blocks.clear();
        world.platforms.clear();
        world.monsters.clear();
        world.bonusElements.clear();
        //i tak jeszcze kilka razy

        //dodanie bloczków, po których się skacze
        world.blocks.push_back(Block(Position(140, 20));
        world.blocks.push_back(Block(Position(296, 304));
        world.blocks.push_back(Block(Position(312, 176));
        world.blocks.push_back(Block(Position(572, 400));
        world.blocks.push_back(Block(Position(720, 272));
        world.blocks.push_back(Block(Position(1032, 143));
        world.blocks.push_back(Block(Position(1164, 47));
        world.blocks.push_back(Block(Position(1268, 432));
        world.blocks.push_back(Block(Position(1520, 322));
        world.blocks.push_back(Block(Position(2000, 13));
        world.blocks.push_back(Block(Position(2321, 437));
        world.blocks.push_back(Block(Position(2555, 200));
        //i tak jeszcze kilkaset razy

        //dodawanie bonusów              //x40
        //dodawanie npc                       //x100
        //dodawanie różnych dekoracji //x75
        //dodawanie wielu innych rzeczy ....
}

Zastanawiam się, jak zrobić to profesjonalnie? Zapisać obiekty do oddzielnych plików (jakich?) i po prostu jakoś je wczytywać?
Jeśli tak, to chyba potrzebuję jakiejś serializacji obiektów?

Może jest na forum ktoś, kto robi/robił gry i podpowie jak nie robić takiego warzywa

EDIT: nie wiedziałem jaki tag dać

1

Nikt tego nie robi ręcznie, zamiast tego robi się edytor poziomów, w którym sobie modelujesz poziom, który na końcu wyrzuca plik z poziomem (format do wyboru wedle potrzeb), który gra potrafi zrozumieć i załadować. W najprostszym przypadku możesz sobie zrobić plik, który wypisze ci poziom w pliku txt w formacie pos_x pos_y typ_bloku. W dzisiejszych czasach istnieją już gotowe zabawki, które ci powypluwają jakieś JSON-y czy coś (pierwszy link z brzegu: https://www.mapeditor.org/).

Kiedyś było mniej wygodnie robić takie rzeczy, bo komputery były słabiutkie. W ramach ciekawostki, oryginalny Mario miał poziomy projektowane na papierze: https://qz.com/429862/the-original-super-mario-game-was-designed-on-graph-paper/

1 użytkowników online, w tym zalogowanych: 0, gości: 1