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
appName = Coffee Crisis Arcade Edition
releaseFolder = ccae_release

View File

@@ -100,18 +100,6 @@ struct input_t
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
struct op_screen_t
{
@@ -150,7 +138,6 @@ struct options_t
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
online_t online; // Datos del servicio online
op_screen_t screen; // Opciones relativas a la clase screen
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
createSystemFolder("jailgames");
#ifndef DEBUG
createSystemFolder("jailgames/coffee_crisis");
createSystemFolder("jailgames/coffee_crisis_arcade_edition");
#else
createSystemFolder("jailgames/coffee_crisis_debug");
createSystemFolder("jailgames/coffee_crisis_arcade_edition_debug");
#endif
// Crea el objeto que controla los ficheros de recursos
@@ -395,18 +395,6 @@ void Director::initOptions()
options->language = ba_BA;
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
options->notifications.posV = pos_top;
options->notifications.posH = pos_left;
@@ -619,13 +607,6 @@ bool Director::saveConfigFile()
file << "input0=" + std::to_string(options->input[0].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
file << "\n## NOTIFICATION OPTIONS\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);
}
// 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
else if (var == "notifications.posH")
{

View File

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

View File

@@ -246,6 +246,15 @@ void Game::init()
break;
}
if (difficulty == DIFFICULTY_NORMAL)
{
scoreboard->setColor({46, 63, 71});
}
else
{
scoreboard->setColor(difficultyColor);
}
gameCompleted = false;
gameCompletedCounter = 0;
section->name = SECTION_PROG_GAME;
@@ -1574,12 +1583,6 @@ void Game::updateHiScore()
// Actualiza la máxima puntuación
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
scoreDataFile[0] = hiScore;
scoreDataFile[1] = hiScore % 43;
@@ -2644,6 +2647,9 @@ void Game::update()
// Actualiza las variables del jugador
updatePlayers();
// Actualiza el marcador
updateScoreboard();
// Actualiza el fondo
updateBackground();
@@ -3807,4 +3813,15 @@ void Game::setHiScore()
loadScoreFile();
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<std::vector<Texture *>> playerTextures; // Vector con todas las texturas de los jugadores;
Texture *gameBuildingsTexture; // Textura con los edificios de fondo
Texture *gameCloudsTexture; // Textura con las nubes de fondo
Texture *gameGrassTexture; // Textura con la hierba del suelo
Texture *gameSkyColorsTexture; // Textura con los diferentes colores de fondo del juego
Texture *gameTextTexture; // Textura para los sprites con textos
Texture *gameOverTexture; // Textura para la pantalla de game over
Texture *gameOverEndTexture; // Textura para la pantalla de game over de acabar el juego
Texture *gameBuildingsTexture; // Textura con los edificios de fondo
Texture *gameCloudsTexture; // Textura con las nubes de fondo
Texture *gameGrassTexture; // Textura con la hierba del suelo
Texture *gameSkyColorsTexture; // Textura con los diferentes colores de fondo del juego
Texture *gameTextTexture; // Textura para los sprites con textos
Texture *gameOverTexture; // Textura para la pantalla de game over
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> *> playerAnimations; // Vector con las animaciones del jugador
std::vector<std::vector<std::string> *> balloonAnimations; // Vector con las animaciones de los globos
Text *text; // Fuente para los textos del juego
Text *textBig; // Fuente de texto grande
Text *textNokia2; // Otra fuente de texto para mensajes
Text *textNokiaBig2; // Y la versión en grande
Text *text; // Fuente para los textos del juego
Text *textBig; // Fuente de texto grande
Text *textNokia2; // Otra fuente de texto para mensajes
Text *textNokiaBig2; // Y la versión en grande
Menu *gameOverMenu; // Menú de la pantalla de game over
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
void setHiScore();
// Actualiza el marcador
void updateScoreboard();
public:
// 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);

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);
// Inicializa variables
stage = 0;
stage = 1;
score1 = 0;
score2 = 0;
mult1 = 0;
mult2 = 0;
mult1 = 1;
mult2 = 1;
hiScore = 0;
power = 0;
hiScoreName = "";
color = {255, 0, 0};
color = {0, 0, 0};
}
Scoreboard::~Scoreboard()
@@ -120,9 +120,7 @@ void Scoreboard::render()
powerMeterSprite->setPosY(offset2);
powerMeterSprite->setSpriteClip(0, 0, 40, 7);
powerMeterSprite->render();
// const float percent = (stage[currentStage].currentPower * 40.0f) / stage[currentStage].powerToComplete;
const float percent = 0.5;
powerMeterSprite->setSpriteClip(40, 0, (int)percent, 7);
powerMeterSprite->setSpriteClip(40, 0, int(power * 40.0f), 7);
powerMeterSprite->render();
// HI-SCORE
@@ -140,12 +138,12 @@ void Scoreboard::setScore2(int score)
score2 = score;
}
void Scoreboard::setMult1(int mult)
void Scoreboard::setMult1(float mult)
{
mult1 = mult;
}
void Scoreboard::setMult2(int mult)
void Scoreboard::setMult2(float mult)
{
mult2 = mult;
}
@@ -160,7 +158,7 @@ void Scoreboard::setHiScore(int hiScore)
this->hiScore = hiScore;
}
void Scoreboard::setPower(int power)
void Scoreboard::setPower(float power)
{
this->power = power;
}

View File

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