›_ebskola.lv
sākt stundu
Prog II · 5. tēma · 6 stundas - C++ · Save/Load · Roguelike

Datu pastāvība //
un algoritmi

Saglabā un ielādē spēles stāvokli ar FileAccess un JSON. Ģenerē labirintus ar BSP. Izproti Big-O.

6 stundas FileAccess · JSON Roguelike labirints
# 01 stundu plāns

6 stundas - save/load, BSP un Big-O

noslēguma projekts
user://saves/save.jsonconfig.cfgFileAccess::open(ceļš, WRITE)store_string()// FileAccess
Godot · FileAccessI/O

Failu I/O Godot vidē

FileAccess::open(), store_string(), get_as_text(), user:// direktorija.

5.1 stundaatvērt ↗
C++ Dictionary{"hp": 80, "level": 3, "pos": [12,8]}JSON::stringify()JSON tekstsJSON::parse()// JSON serialize
JSON · serializācijaformāts

JSON serializācija un Resource sistēma

JSON::stringify(), JSON::parse(), Godot Resource saglabāšana, .tres faili.

5.2 stundaatvērt ↗
GameStateSaveManagerdiskload ←saglabāt() · ielādēt() · atiestatīt()// save/load
arhitektūrasave/load

Save/Load arhitektūra

Viena atbildīgā SaveManager klase, GameState serializācija, ielāde spēles uzsākšanā.

5.3 stundaatvērt ↗
BSP - dalīšana uz pusēm → istabas → koridori// BSP dungeon
BSP · procedurālsģenerācija

Procedural generation ar BSP

Binary Space Partitioning - rekursīva telpu dalīšana, istabu izveide, koridoru savienošana.

5.4 stundaatvērt ↗
O(1)O(log n)O(n)O(n²)n (ievades lielums)// Big-O
Big-O · profilingefektivitāte

Algoritmu efektivitāte

Big-O notācija, O(1)/O(log n)/O(n)/O(n²) salīdzinājums, Godot Profiler izmantošana.

5.5 stundaatvērt ↗
##.........###.++++.....+##.+@...*....##.++++......##...........##.....E.....###.........##@ - spēlētājs · E - ienaidnieks · * - prece// roguelike projekts
C++ · Godotprojekts

Noslēguma projekts: Procedurālais labirints

Roguelike ar BSP labirintu, save/load, permadeath, random loot un skaņu efektiem.

5.6 projektsatvērt ↗
# 02 špikeris

FileAccess un JSON špikeris

Save/Load ar FileAccess un JSON

// Saglabāšana
void SaveSystem::saglabāt() {
    Dictionary dati;
    dati["hp"]    = player->get_health();
    dati["level"] = player->get_level();
    dati["pos"]   = player->get_position();

    Ref<FileAccess> f = FileAccess::open("user://save.json", FileAccess::WRITE);
    f->store_string(JSON::stringify(dati));
}

// Ielādēšana
void SaveSystem::ielādēt() {
    Ref<FileAccess> f = FileAccess::open("user://save.json", FileAccess::READ);
    Dictionary dati = JSON::parse_string(f->get_as_text());
    player->set_health(dati["hp"]);
    player->set_level(dati["level"]);
}
C++ FileAccess::open("user://save.json", WRITE); // saglabā starp sesijām