Stundas uzdevums: Apvienot OOP, signālus, struct un GDExtension klases pilnvērtīgā rundām balstītā klases turnīra simulācijā.
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ļā.
Rundām balstīta klases turnīra simulācija ar trim spēlētāja dalībniekiem (Captain, Presenter, TimeKeeper) pret nejauši ģenerētiem šķēršļiem (PrinterQueue, WifiDrop, MissingMarker).
Turnīra plūsma:
Klašu hierarhija: Participant (base) → Captain, Presenter, TimeKeeper; Obstacle (base) → PrinterQueue, WifiDrop, MissingMarker.
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: katrai būtiskai turnīra lomai ir C++ klase ar header/implementation dalījumu, konstruktoriem, metodēm, signāliem vai mantošanu.
#include <godot_cpp/variant/string.hpp>
using namespace godot;
struct OopCheckpoint {
String lesson = "3.6 Noslēguma projekts: Klases turnīra simulators";
bool uses_cpp = true;
bool has_header_file = true;
bool has_single_responsibility = true;
bool uses_godot_registration = 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 3.6 Noslēguma projekts: Klases turnīra simulators; 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 OopCheckpoint {
String lesson = "3.6 Noslēguma projekts: Klases turnīra simulators";
bool uses_cpp = true;
bool has_header_file = true;
bool has_single_responsibility = true;
bool uses_godot_registration = 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.
std::unique_ptr vai Godot's add_child (kas pārvalda lifetime).
class TournamentManager : public Node {
GDCLASS(TournamentManager, Node)
private:
std::vector<Participant*> party;
std::vector<Obstacle*> obstacles;
int current_turn = 0;
public:
void start_tournament() {
for (Obstacle* e : obstacles) {
e->connect("finished", Callable(this, "on_obstacle_finished"));
}
next_turn();
}
void execute_focus(Participant* participant, Obstacle* target) {
int penalty = participant->get_stats().get_total_focus();
target->apply_penalty(penalty);
if (obstacles.empty()) emit_signal("tournament_won");
else next_turn();
}
void on_obstacle_finished() {
// Atrod un noņem pabeigto šķērsli
obstacles.erase(...);
}
};