Stundas uzdevums: Izveidot specializētas dalībnieku klases, izmantojot inheritance (mantošanu).
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ļā.
Mantošana ļauj bērna klasei pārmantot vecāka atribūtus un metodes, pievienojot vai pārrakstot.
class Participant { /* base klase */ };
class Captain : public Participant {
public:
int stability;
Captain(String n) : Participant(n, 150, 18, 12) { // izsauc vecāku konstruktoru
stability = 10;
}
// Pārraksta (override) vecāka metodi
void apply_penalty(int amount) override {
amount -= stability; // stabilitāte samazina soda punktus
Participant::apply_penalty(amount);
}
};
class Presenter : public Participant {
public:
int ideas;
Presenter(String n) : Participant(n, 80, 25, 3), ideas(100) {}
void present_bonus(Participant& target) {
if (ideas >= 20) {
ideas -= 20;
target.apply_penalty(40);
}
}
};
virtual atslēgvārds ļauj izsaukt bērna metodi caur vecāka pointer (polimorfisms).
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.2 Mantošana C++ un Godot";
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.2 Mantošana C++ un Godot; 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.2 Mantošana C++ un Godot";
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.
: Participant(...).
class Captain : public Participant {
private:
int stability;
public:
Captain(String n) : Participant(n, 150, 18, 12), stability(10) {}
void apply_penalty(int amount) override {
amount = std::max(1, amount - stability);
Participant::apply_penalty(amount);
}
};
class Presenter : public Participant {
private:
int ideas;
public:
Presenter(String n) : Participant(n, 80, 25, 3), ideas(100) {}
void present_bonus(Participant* target) {
if (ideas >= 20) {
ideas -= 20;
UtilityFunctions::print(name, " izmanto prezentācijas bonusu pret ", target->get_name());
target->apply_penalty(40);
}
}
};