Stundas uzdevums: Izveidot un publicēt pilnvērtīgu puzzle spēli ar visu apgūto.
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ļā.
Puzzle spēle: spēlētājs risina sēriju problēmu, kā Sokoban, Tetris vai krāsu match-3.
Izvēlies vienu no opcijām (vai izveido savu):
Prasības:
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: UI signāli, audio darbības, debug izvade un publicēšanas sagatave ir sasaistīta ar C++ spēles stāvokli.
#include <godot_cpp/variant/string.hpp>
using namespace godot;
struct PolishCheckpoint {
String lesson = "6.6 Noslēguma projekts: Puzzle spēle";
bool uses_cpp = true;
bool connects_ui_signals = true;
bool routes_audio_events = true;
bool verifies_export_build = 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 6.6 Noslēguma projekts: Puzzle spēle; 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 PolishCheckpoint {
String lesson = "6.6 Noslēguma projekts: Puzzle spēle";
bool uses_cpp = true;
bool connects_ui_signals = true;
bool routes_audio_events = true;
bool verifies_export_build = 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.
// Match-3 spēles core
class Match3Board : public Node2D {
GDCLASS(Match3Board, Node2D)
private:
static const int W = 8, H = 8;
int grid[W][H];
public:
void initialize() {
for (int x = 0; x < W; x++)
for (int y = 0; y < H; y++)
grid[x][y] = std::rand() % 5; // 5 colors
}
std::vector<Vector2i> find_matches() {
std::vector<Vector2i> matches;
for (int x = 0; x < W; x++) {
for (int y = 0; y < H - 2; y++) {
if (grid[x][y] == grid[x][y+1] && grid[x][y+1] == grid[x][y+2]) {
matches.push_back({x, y});
matches.push_back({x, y+1});
matches.push_back({x, y+2});
}
}
}
// similarly for horizontal
return matches;
}
void clear_and_drop(const std::vector<Vector2i>& matches) {
// mark cleared, gravity, refill
}
};