Stundas uzdevums: Saprast OOP fundamentālo konceptu - klases un objekti - un izveidot pirmo dalībnieka klasi.
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ļā.
Klase ir veidne objektu radīšanai. Tā satur datus (atribūtus) un funkcijas (metodes).
class Participant {
private: // tikai klases iekšienē pieejams
int energy;
int max_energy;
public: // pieejams ārpusē
String name;
int level = 1;
// Konstruktors
Participant(String n, int h) {
name = n;
energy = max_energy = h;
}
// Metodes
void apply_penalty(int amount) {
energy -= amount;
if (energy < 0) energy = 0;
}
bool is_active() const {
return energy > 0;
}
int get_energy() const { return energy; }
};
public/private/protected kontrolē encapsulation (iekapsulāciju).
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.1 C++ klases pamati";
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.1 C++ klases pamati; 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.1 C++ klases pamati";
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.
#include "participant.hpp"
#include <godot_cpp/variant/utility_functions.hpp>
using namespace godot;
Participant::Participant(String n, int h, int a, int d)
: name(n), energy(h), max_energy(h), focus(a), calm(d) {}
void Participant::apply_penalty(int amount) {
int actual = std::max(0, amount - calm);
energy = std::max(0, energy - actual);
UtilityFunctions::print(name, " zaudē ", actual, " enerģijas punktus. ENERGY: ", energy);
}
bool Participant::is_active() const { return energy > 0; }
void Participant::print_status() const {
UtilityFunctions::print(name, " ENERGY: ", energy, "/", max_energy,
" FOCUS: ", focus, " CALM: ", calm);
}