Stundas uzdevums: Apgūt asociatīvās datu struktūras inventāram un konfigurācijai.
Pirms sāc: izmanto iepriekš apgūto un šīs lapas teorijas/koda piemērus. Ja vajadzīga jauna komanda vai rīks, vispirms atrodi tās paraugu teorijas sadaļā.
Asociatīvā datu struktūra glabā atslēga → vērtība pārus.
// std::map (sakārtots, log n)
#include <map>
std::map<String, int> inventory;
inventory["Health Potion"] = 5;
inventory["Mana Potion"] = 3;
if (inventory.count("Health Potion") > 0) {
int amount = inventory["Health Potion"];
}
// std::unordered_map (hash, O(1))
#include <unordered_map>
std::unordered_map<int, Enemy*> enemy_by_id;
// Godot Dictionary
Dictionary inv;
inv["coins"] = 100;
inv["arrows"] = 25;
if (inv.has("coins")) print(inv["coins"]);
Atceries: ar redzamu efektu editorā nepietiek. Paskaidro, kura C++ klase glabā stāvokli, kura metode to maina un kā Godot node struktūra izmanto šo kodu.
Pārbaudi: C++ kodā pamatoti izvēlēti vector/map/set, AI stāvokļi ir skaidri, un sarežģītākas sistēmas var profilēt vai atkļūdot.
#include <godot_cpp/variant/string.hpp>
using namespace godot;
struct AiDataCheckpoint {
String lesson = "4.2 Map un Dictionary";
bool uses_cpp = true;
bool chooses_container = true;
bool separates_ai_state = true;
bool handles_removal_safely = true;
};
Šis ir īss iesildīšanās uzdevums. Nokopē sagatavi, ielīmē to pareizajā koda vietā un palaid. Šeit pietiek droši izmēģināt tēmu 4.2 Map un Dictionary; detalizētu izpratni veidosi nākamajos uzdevumos.
Kopējamais piemērs vai sagatave: izmanto šo bloku kā starta punktu, nevis kā gala risinājumu.
#include <godot_cpp/variant/string.hpp>
using namespace godot;
struct AiDataCheckpoint {
String lesson = "4.2 Map un Dictionary";
bool uses_cpp = true;
bool chooses_container = true;
bool separates_ai_state = true;
bool handles_removal_safely = true;
};
.cpp vai .hpp failā pie šīs stundas klases.Pievieno šīs stundas paņēmienu kā nelielu, strādājošu spēles mehānikas daļu.
PlayerState, velocity, score vai update_ui()._ready(), _process(), _physics_process(), signāla apstrādātāja vai projekta palīgklases.Pārbaudi, vai C++ algoritms darbojas paredzami spēles vidē.
Ja pamatdarbs ir pabeigts, paplašini spēli ar vienu nelielu C++ uzlabojumu.
find() pārbaudei.
#include <map>
class Player {
private:
std::map<String, int> inventory;
public:
void add_item(String name, int amount = 1) {
inventory[name] += amount;
UtilityFunctions::print("+", amount, " ", name);
}
bool use_item(String name) {
auto it = inventory.find(name);
if (it == inventory.end() || it->second <= 0) {
UtilityFunctions::print("Nav ", name);
return false;
}
it->second--;
return true;
}
void print_inventory() {
for (const auto& [name, count] : inventory) {
UtilityFunctions::print(name, ": ", count);
}
}
};