Acabada la clase scoreboard.. mas o menos

This commit is contained in:
2024-05-23 17:35:16 +02:00
parent 7ea14c984e
commit ac9fe95e69
9 changed files with 57 additions and 104 deletions

View File

@@ -1,4 +1,4 @@
executable = coffee_crisis_ae executable = coffee_crisis_arcade_edition
source = source/*.cpp source/common/*.cpp source = source/*.cpp source/common/*.cpp
appName = Coffee Crisis Arcade Edition appName = Coffee Crisis Arcade Edition
releaseFolder = ccae_release releaseFolder = ccae_release

View File

@@ -100,18 +100,6 @@ struct input_t
Uint8 deviceType; // Tipo de dispositivo (teclado o mando) Uint8 deviceType; // Tipo de dispositivo (teclado o mando)
}; };
// Estructura para el servicio online
struct online_t
{
bool enabled; // Indica si se quiere usar el modo online o no
bool sessionEnabled; // Indica ya se ha hecho login
std::string server; // Servidor para los servicios online
int port; // Puerto del servidor
std::string gameID; // Identificador del juego para los servicios online
std::string jailerID; // Identificador del jugador para los servicios online
int score; // Puntuación almacenada online
};
// Estructura con opciones de la pantalla // Estructura con opciones de la pantalla
struct op_screen_t struct op_screen_t
{ {
@@ -150,7 +138,6 @@ struct options_t
palette_e palette; // Paleta de colores a usar en el juego palette_e palette; // Paleta de colores a usar en el juego
bool console; // Indica si ha de mostrar información por la consola de texto bool console; // Indica si ha de mostrar información por la consola de texto
online_t online; // Datos del servicio online
op_screen_t screen; // Opciones relativas a la clase screen op_screen_t screen; // Opciones relativas a la clase screen
op_notification_t notifications; // Opciones relativas a las notificaciones; op_notification_t notifications; // Opciones relativas a las notificaciones;
}; };

View File

@@ -27,9 +27,9 @@ Director::Director(int argc, char *argv[])
// Crea la carpeta del sistema donde guardar datos // Crea la carpeta del sistema donde guardar datos
createSystemFolder("jailgames"); createSystemFolder("jailgames");
#ifndef DEBUG #ifndef DEBUG
createSystemFolder("jailgames/coffee_crisis"); createSystemFolder("jailgames/coffee_crisis_arcade_edition");
#else #else
createSystemFolder("jailgames/coffee_crisis_debug"); createSystemFolder("jailgames/coffee_crisis_arcade_edition_debug");
#endif #endif
// Crea el objeto que controla los ficheros de recursos // Crea el objeto que controla los ficheros de recursos
@@ -395,18 +395,6 @@ void Director::initOptions()
options->language = ba_BA; options->language = ba_BA;
options->console = false; options->console = false;
// Opciones online
options->online.enabled = false;
options->online.server = "jaildoctor.duckdns.org";
options->online.port = 9911;
#ifdef DEBUG
options->online.gameID = "coffee_crisis_test2";
#else
options->online.gameID = "coffee_crisis";
#endif
options->online.jailerID = "";
options->online.score = 0;
// Opciones de las notificaciones // Opciones de las notificaciones
options->notifications.posV = pos_top; options->notifications.posV = pos_top;
options->notifications.posH = pos_left; options->notifications.posH = pos_left;
@@ -619,13 +607,6 @@ bool Director::saveConfigFile()
file << "input0=" + std::to_string(options->input[0].deviceType) + "\n"; file << "input0=" + std::to_string(options->input[0].deviceType) + "\n";
file << "input1=" + std::to_string(options->input[1].deviceType) + "\n"; file << "input1=" + std::to_string(options->input[1].deviceType) + "\n";
// Opciones sobre la conexión online
file << "\n## ONLINE OPTIONS\n";
file << "enabled=" + boolToString(options->online.enabled) + "\n";
file << "server=" + options->online.server + "\n";
file << "port=" + std::to_string(options->online.port) + "\n";
file << "jailerID=" + options->online.jailerID + "\n";
// Opciones de las notificaciones // Opciones de las notificaciones
file << "\n## NOTIFICATION OPTIONS\n"; file << "\n## NOTIFICATION OPTIONS\n";
file << "## notifications.posV = pos_top | pos_bottom\n"; file << "## notifications.posV = pos_top | pos_bottom\n";
@@ -810,31 +791,6 @@ bool Director::setOptions(options_t *options, std::string var, std::string value
options->input[1].deviceType = std::stoi(value); options->input[1].deviceType = std::stoi(value);
} }
// Opciones onlince
else if (var == "enabled")
{
options->online.enabled = stringToBool(value);
}
else if (var == "server")
{
options->online.server = value;
}
else if (var == "port")
{
if (value == "")
{
value = "0";
}
options->online.port = std::stoi(value);
}
else if (var == "jailerID")
{
options->online.jailerID = toLower(value);
}
// Opciones de notificaciones // Opciones de notificaciones
else if (var == "notifications.posH") else if (var == "notifications.posH")
{ {

View File

@@ -27,7 +27,7 @@
#define DIRECTOR_H #define DIRECTOR_H
// Textos // Textos
#define WINDOW_CAPTION "Coffee Crisis" #define WINDOW_CAPTION "Coffee Crisis Arcade Edition"
class Director class Director
{ {

View File

@@ -246,6 +246,15 @@ void Game::init()
break; break;
} }
if (difficulty == DIFFICULTY_NORMAL)
{
scoreboard->setColor({46, 63, 71});
}
else
{
scoreboard->setColor(difficultyColor);
}
gameCompleted = false; gameCompleted = false;
gameCompletedCounter = 0; gameCompletedCounter = 0;
section->name = SECTION_PROG_GAME; section->name = SECTION_PROG_GAME;
@@ -1574,12 +1583,6 @@ void Game::updateHiScore()
// Actualiza la máxima puntuación // Actualiza la máxima puntuación
hiScore = player->getScore(); hiScore = player->getScore();
// Cambia el nombre del jugador con la máxima puntuación
if (options->online.enabled)
{
hiScoreName = options->online.jailerID.substr(0, 12) + " - ";
}
// Almacena la máxima puntuación en el fichero junto con un checksum // Almacena la máxima puntuación en el fichero junto con un checksum
scoreDataFile[0] = hiScore; scoreDataFile[0] = hiScore;
scoreDataFile[1] = hiScore % 43; scoreDataFile[1] = hiScore % 43;
@@ -2644,6 +2647,9 @@ void Game::update()
// Actualiza las variables del jugador // Actualiza las variables del jugador
updatePlayers(); updatePlayers();
// Actualiza el marcador
updateScoreboard();
// Actualiza el fondo // Actualiza el fondo
updateBackground(); updateBackground();
@@ -3807,4 +3813,15 @@ void Game::setHiScore()
loadScoreFile(); loadScoreFile();
hiScoreName = ""; hiScoreName = "";
}
// Actualiza el marcador
void Game::updateScoreboard()
{
scoreboard->setScore1(players[0]->getScore());
scoreboard->setMult1(players[0]->getScoreMultiplier());
scoreboard->setStage(stage[currentStage].number);
scoreboard->setPower((float)stage[currentStage].currentPower / (float)stage[currentStage].powerToComplete);
scoreboard->setHiScore(hiScore);
scoreboard->setHiScoreName(hiScoreName);
} }

View File

@@ -137,22 +137,22 @@ private:
std::vector<Texture *> player2Textures; // Vector con las texturas del jugador std::vector<Texture *> player2Textures; // Vector con las texturas del jugador
std::vector<std::vector<Texture *>> playerTextures; // Vector con todas las texturas de los jugadores; std::vector<std::vector<Texture *>> playerTextures; // Vector con todas las texturas de los jugadores;
Texture *gameBuildingsTexture; // Textura con los edificios de fondo Texture *gameBuildingsTexture; // Textura con los edificios de fondo
Texture *gameCloudsTexture; // Textura con las nubes de fondo Texture *gameCloudsTexture; // Textura con las nubes de fondo
Texture *gameGrassTexture; // Textura con la hierba del suelo Texture *gameGrassTexture; // Textura con la hierba del suelo
Texture *gameSkyColorsTexture; // Textura con los diferentes colores de fondo del juego Texture *gameSkyColorsTexture; // Textura con los diferentes colores de fondo del juego
Texture *gameTextTexture; // Textura para los sprites con textos Texture *gameTextTexture; // Textura para los sprites con textos
Texture *gameOverTexture; // Textura para la pantalla de game over Texture *gameOverTexture; // Textura para la pantalla de game over
Texture *gameOverEndTexture; // Textura para la pantalla de game over de acabar el juego Texture *gameOverEndTexture; // Textura para la pantalla de game over de acabar el juego
std::vector<std::vector<std::string> *> itemAnimations; // Vector con las animaciones de los items std::vector<std::vector<std::string> *> itemAnimations; // Vector con las animaciones de los items
std::vector<std::vector<std::string> *> playerAnimations; // Vector con las animaciones del jugador std::vector<std::vector<std::string> *> playerAnimations; // Vector con las animaciones del jugador
std::vector<std::vector<std::string> *> balloonAnimations; // Vector con las animaciones de los globos std::vector<std::vector<std::string> *> balloonAnimations; // Vector con las animaciones de los globos
Text *text; // Fuente para los textos del juego Text *text; // Fuente para los textos del juego
Text *textBig; // Fuente de texto grande Text *textBig; // Fuente de texto grande
Text *textNokia2; // Otra fuente de texto para mensajes Text *textNokia2; // Otra fuente de texto para mensajes
Text *textNokiaBig2; // Y la versión en grande Text *textNokiaBig2; // Y la versión en grande
Menu *gameOverMenu; // Menú de la pantalla de game over Menu *gameOverMenu; // Menú de la pantalla de game over
Menu *pauseMenu; // Menú de la pantalla de pausa Menu *pauseMenu; // Menú de la pantalla de pausa
@@ -505,6 +505,9 @@ private:
// Establece la máxima puntuación desde fichero o desde las puntuaciones online // Establece la máxima puntuación desde fichero o desde las puntuaciones online
void setHiScore(); void setHiScore();
// Actualiza el marcador
void updateScoreboard();
public: public:
// Constructor // Constructor
Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang, Input *input, bool demo, options_t *options, section_t *section); Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang, Input *input, bool demo, options_t *options, section_t *section);

View File

@@ -16,15 +16,15 @@ Scoreboard::Scoreboard(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lan
textScoreBoard = new Text(asset->get("8bithud.png"), asset->get("8bithud.txt"), renderer); textScoreBoard = new Text(asset->get("8bithud.png"), asset->get("8bithud.txt"), renderer);
// Inicializa variables // Inicializa variables
stage = 0; stage = 1;
score1 = 0; score1 = 0;
score2 = 0; score2 = 0;
mult1 = 0; mult1 = 1;
mult2 = 0; mult2 = 1;
hiScore = 0; hiScore = 0;
power = 0; power = 0;
hiScoreName = ""; hiScoreName = "";
color = {255, 0, 0}; color = {0, 0, 0};
} }
Scoreboard::~Scoreboard() Scoreboard::~Scoreboard()
@@ -120,9 +120,7 @@ void Scoreboard::render()
powerMeterSprite->setPosY(offset2); powerMeterSprite->setPosY(offset2);
powerMeterSprite->setSpriteClip(0, 0, 40, 7); powerMeterSprite->setSpriteClip(0, 0, 40, 7);
powerMeterSprite->render(); powerMeterSprite->render();
// const float percent = (stage[currentStage].currentPower * 40.0f) / stage[currentStage].powerToComplete; powerMeterSprite->setSpriteClip(40, 0, int(power * 40.0f), 7);
const float percent = 0.5;
powerMeterSprite->setSpriteClip(40, 0, (int)percent, 7);
powerMeterSprite->render(); powerMeterSprite->render();
// HI-SCORE // HI-SCORE
@@ -140,12 +138,12 @@ void Scoreboard::setScore2(int score)
score2 = score; score2 = score;
} }
void Scoreboard::setMult1(int mult) void Scoreboard::setMult1(float mult)
{ {
mult1 = mult; mult1 = mult;
} }
void Scoreboard::setMult2(int mult) void Scoreboard::setMult2(float mult)
{ {
mult2 = mult; mult2 = mult;
} }
@@ -160,7 +158,7 @@ void Scoreboard::setHiScore(int hiScore)
this->hiScore = hiScore; this->hiScore = hiScore;
} }
void Scoreboard::setPower(int power) void Scoreboard::setPower(float power)
{ {
this->power = power; this->power = power;
} }

View File

@@ -28,18 +28,18 @@ private:
Lang *lang; // Objeto para gestionar los textos en diferentes idiomas Lang *lang; // Objeto para gestionar los textos en diferentes idiomas
Texture *gamePowerMeterTexture; // Textura con el marcador de poder de la fase Texture *gamePowerMeterTexture; // Textura con el marcador de poder de la fase
Sprite *powerMeterSprite; // Sprite para el medidor de poder de la fase Sprite *powerMeterSprite; // Sprite para el medidor de poder de la fase
Text *textScoreBoard; // Fuente para el marcador del juego Text *textScoreBoard; // Fuente para el marcador del juego
// Variables // Variables
struct options_t *options; // Variable con todas las variables de las opciones del programa struct options_t *options; // Variable con todas las variables de las opciones del programa
int stage; // Numero de fase actual int stage; // Numero de fase actual
int score1; // Puntuación del jugador 1 int score1; // Puntuación del jugador 1
int score2; // Puntuación del jugador 2 int score2; // Puntuación del jugador 2
int mult1; // Multiplicador del jugador 1 float mult1; // Multiplicador del jugador 1
int mult2; // MUltiplicador del jugador 2 float mult2; // MUltiplicador del jugador 2
int hiScore; // Mäxima puntuación int hiScore; // Mäxima puntuación
int power; // Poder actual de la fase float power; // Poder actual de la fase
std::string hiScoreName; // Nombre del jugador con la máxima puntuación std::string hiScoreName; // Nombre del jugador con la máxima puntuación
color_t color; // Color del marcador color_t color; // Color del marcador
@@ -55,11 +55,11 @@ public:
void setScore1(int score); void setScore1(int score);
void setScore2(int score); void setScore2(int score);
void setMult1(int mult); void setMult1(float mult);
void setMult2(int mult); void setMult2(float mult);
void setStage(int stage); void setStage(int stage);
void setHiScore(int hiScore); void setHiScore(int hiScore);
void setPower(int power); void setPower(float power);
void setHiScoreName(std::string name); void setHiScoreName(std::string name);
void setColor(color_t color); void setColor(color_t color);

View File

@@ -575,14 +575,6 @@ void Title::runInstructions(mode_e mode)
// Ejecuta la parte donde se muestra la tabla de puntuaciones // Ejecuta la parte donde se muestra la tabla de puntuaciones
void Title::runHiScoreTable(mode_hiScoreTable_e mode) void Title::runHiScoreTable(mode_hiScoreTable_e mode)
{ {
if (!options->online.enabled)
{
section->name = SECTION_PROG_TITLE;
section->subsection = SUBSECTION_TITLE_1;
return;
}
hiScoreTable = new HiScoreTable(renderer, screen, asset, input, lang, options, section); hiScoreTable = new HiScoreTable(renderer, screen, asset, input, lang, options, section);
hiScoreTable->run(mode); hiScoreTable->run(mode);
delete hiScoreTable; delete hiScoreTable;