afegit sistema de punts
This commit is contained in:
@@ -26,8 +26,10 @@ EscenaJoc::EscenaJoc(SDLManager& sdl, ContextEscenes& context)
|
||||
: sdl_(sdl),
|
||||
context_(context),
|
||||
debris_manager_(sdl.obte_renderer()),
|
||||
gestor_puntuacio_(sdl.obte_renderer()),
|
||||
nau_(sdl.obte_renderer()),
|
||||
itocado_(0),
|
||||
puntuacio_total_(0),
|
||||
text_(sdl.obte_renderer()) {
|
||||
// Consumir opcions (preparació per MODE_DEMO futur)
|
||||
auto opcio = context_.consumir_opcio();
|
||||
@@ -140,6 +142,10 @@ void EscenaJoc::inicialitzar() {
|
||||
game_over_ = false;
|
||||
game_over_timer_ = 0.0f;
|
||||
|
||||
// Initialize score
|
||||
puntuacio_total_ = 0;
|
||||
gestor_puntuacio_.reiniciar();
|
||||
|
||||
// Set spawn point to center of play area
|
||||
Constants::obtenir_centre_zona(punt_spawn_.x, punt_spawn_.y);
|
||||
|
||||
@@ -187,6 +193,7 @@ void EscenaJoc::actualitzar(float delta_time) {
|
||||
}
|
||||
|
||||
debris_manager_.actualitzar(delta_time);
|
||||
gestor_puntuacio_.actualitzar(delta_time);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -224,6 +231,7 @@ void EscenaJoc::actualitzar(float delta_time) {
|
||||
}
|
||||
|
||||
debris_manager_.actualitzar(delta_time);
|
||||
gestor_puntuacio_.actualitzar(delta_time);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -279,6 +287,7 @@ void EscenaJoc::actualitzar(float delta_time) {
|
||||
detectar_col·lisions_bales_enemics();
|
||||
detectar_col·lisio_nau_enemics();
|
||||
debris_manager_.actualitzar(delta_time);
|
||||
gestor_puntuacio_.actualitzar(delta_time);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -297,6 +306,7 @@ void EscenaJoc::actualitzar(float delta_time) {
|
||||
|
||||
// [NEW] Update debris (from last destroyed enemies)
|
||||
debris_manager_.actualitzar(delta_time);
|
||||
gestor_puntuacio_.actualitzar(delta_time);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -318,6 +328,7 @@ void EscenaJoc::dibuixar() {
|
||||
}
|
||||
|
||||
debris_manager_.dibuixar();
|
||||
gestor_puntuacio_.dibuixar();
|
||||
|
||||
// Draw centered "GAME OVER" text
|
||||
const std::string game_over_text = "GAME OVER";
|
||||
@@ -354,6 +365,7 @@ void EscenaJoc::dibuixar() {
|
||||
|
||||
// [NEW] Draw debris
|
||||
debris_manager_.dibuixar();
|
||||
gestor_puntuacio_.dibuixar();
|
||||
|
||||
// [EXISTING] Draw intro message and score
|
||||
dibuixar_missatge_stage(StageSystem::Constants::MISSATGE_LEVEL_START);
|
||||
@@ -375,6 +387,7 @@ void EscenaJoc::dibuixar() {
|
||||
}
|
||||
|
||||
debris_manager_.dibuixar();
|
||||
gestor_puntuacio_.dibuixar();
|
||||
dibuixar_marcador();
|
||||
break;
|
||||
|
||||
@@ -391,6 +404,7 @@ void EscenaJoc::dibuixar() {
|
||||
|
||||
// [NEW] Draw debris (from last destroyed enemies)
|
||||
debris_manager_.dibuixar();
|
||||
gestor_puntuacio_.dibuixar();
|
||||
|
||||
// [EXISTING] Draw completion message and score
|
||||
dibuixar_missatge_stage(StageSystem::Constants::MISSATGE_LEVEL_COMPLETED);
|
||||
@@ -518,7 +532,11 @@ void EscenaJoc::dibuixar_marcador() {
|
||||
std::string stage_str = (stage_num < 10) ? "0" + std::to_string(stage_num)
|
||||
: std::to_string(stage_num);
|
||||
|
||||
std::string text = "SCORE: 01000 LIFES: " + std::to_string(num_vides_) +
|
||||
// Format score with padding to 5 digits (e.g., 150 → "00150")
|
||||
std::string score_str = std::to_string(puntuacio_total_);
|
||||
score_str = std::string(5 - std::min(5, static_cast<int>(score_str.length())), '0') + score_str;
|
||||
|
||||
std::string text = "SCORE: " + score_str + " LIFES: " + std::to_string(num_vides_) +
|
||||
" LEVEL: " + stage_str;
|
||||
|
||||
// Paràmetres de renderització
|
||||
@@ -580,7 +598,27 @@ void EscenaJoc::detectar_col·lisions_bales_enemics() {
|
||||
if (distancia_quadrada <= SUMA_RADIS_QUADRAT) {
|
||||
// *** COL·LISIÓ DETECTADA ***
|
||||
|
||||
// 1. Destruir enemic (marca com inactiu)
|
||||
// 1. Calculate score for enemy type
|
||||
int punts = 0;
|
||||
switch (enemic.get_tipus()) {
|
||||
case TipusEnemic::PENTAGON:
|
||||
punts = Defaults::Enemies::Scoring::PENTAGON_SCORE;
|
||||
break;
|
||||
case TipusEnemic::QUADRAT:
|
||||
punts = Defaults::Enemies::Scoring::QUADRAT_SCORE;
|
||||
break;
|
||||
case TipusEnemic::MOLINILLO:
|
||||
punts = Defaults::Enemies::Scoring::MOLINILLO_SCORE;
|
||||
break;
|
||||
}
|
||||
|
||||
// 2. Add to total score
|
||||
puntuacio_total_ += punts;
|
||||
|
||||
// 3. Create floating score number
|
||||
gestor_puntuacio_.crear(punts, pos_enemic);
|
||||
|
||||
// 4. Destruir enemic (marca com inactiu)
|
||||
enemic.destruir();
|
||||
|
||||
// 2. Crear explosió de fragments
|
||||
|
||||
Reference in New Issue
Block a user