19 Commits
v2.3 ... v2.3.1

Author SHA1 Message Date
62a61ecad4 Fix: No escrivia be la configuració de pantalla completa 2025-02-17 18:58:48 +01:00
2e6436cc4e Modificada la versió en el joc a 2.3.1 2025-02-17 18:43:48 +01:00
7c50cc00fa Actualitzada la versió del Makefile 2025-02-17 18:37:13 +01:00
8f5d56af7f Afegit CMakeLists.txt 2025-02-17 18:36:34 +01:00
424c243ffc Actualitzat createSystemFolder a la nova ruta de Linux 2025-02-17 18:20:35 +01:00
78f858831f Actualitzades les rutes a les imatges del README.md 2025-02-17 18:04:48 +01:00
d3e031e8b5 Restaurat README.MD i de paso traduït al valencià 2024-10-27 17:04:54 +01:00
4792e4f91d Actualizar README.md 2024-10-27 13:36:52 +01:00
e1801a9255 Actualizar README.md 2024-10-27 09:35:21 +01:00
f0d9e39bb1 Actualizado README.md 2024-08-03 10:50:15 +02:00
eb94a17f26 Modificado Makefile 2024-08-03 10:04:31 +02:00
ea5c2c15d6 Añadido un define para poder pausar el juego y hacer capturas de pantalla 2024-08-03 10:03:43 +02:00
ff7170934e Añadido el icono de windows desde el de macos para tener todos los tamaños 2024-08-03 09:44:30 +02:00
1c1762f6b1 Actualizado Makefile 2024-07-13 14:27:24 +02:00
ee8c075213 Añadido icono para windows 2024-07-13 14:26:54 +02:00
958e9f7f75 Añadido icono para windows 2024-07-13 14:26:35 +02:00
8fda06e232 FIX: El item "disco" no aparecía nunca 2024-07-13 13:56:58 +02:00
fb2ffd58ee FIX: En el modo demo el jugador solo disparaba recto hacia arriba 2024-07-13 13:51:44 +02:00
3f183a5489 Modificado .gitignore 2024-07-13 13:50:04 +02:00
13 changed files with 179 additions and 54 deletions

7
.gitignore vendored
View File

@@ -1,4 +1,5 @@
.vscode
build/
data/config/config.txt
*.DS_Store
thumbs.db
@@ -11,4 +12,8 @@ thumbs.db
*.app
*config.bin
*score.bin
coffee_crisis*
coffee_crisis*
SDL2.dll
libwinpthread-1.dll
libstdc++-6.dll
libgcc_s_seh-1.dll

85
CMakeLists.txt Normal file
View File

@@ -0,0 +1,85 @@
# CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(coffee_crisis)
# Configuración de compilador para MinGW en Windows, si es necesario
if(WIN32 AND NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
set(CMAKE_CXX_COMPILER "g++")
set(CMAKE_C_COMPILER "gcc")
endif()
# Establecer estándar de C++
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# Configuración global de flags de compilación
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os -ffunction-sections -fdata-sections")
# Define el directorio de los archivos fuente
set(DIR_SOURCES "${CMAKE_SOURCE_DIR}/source")
# Cargar todos los archivos fuente en DIR_SOURCES de manera recursiva
file(GLOB_RECURSE SOURCES "${DIR_SOURCES}/*.cpp")
# Verificar si se encontraron archivos fuente
if(NOT SOURCES)
message(FATAL_ERROR "No se encontraron archivos fuente en ${DIR_SOURCES}. Verifica que el directorio existe y contiene archivos .cpp.")
endif()
# Configuración de SDL2
find_package(SDL2 REQUIRED)
if(SDL2_FOUND)
message(STATUS "SDL2 encontrado: ${SDL2_INCLUDE_DIRS}")
include_directories(${SDL2_INCLUDE_DIRS})
link_directories(${SDL2_LIBDIR})
else()
message(FATAL_ERROR "SDL2 no encontrado")
endif()
# Incluye rutas de SDL2 obtenidas con pkg-config
include_directories(/usr/local/include /usr/local/include/SDL2)
link_directories(/usr/local/lib)
# Definir las bibliotecas comunes
set(LIBS SDL2)
# Configuración común de salida de ejecutables en el directorio raíz
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR})
# Añadir ejecutable principal
add_executable(${PROJECT_NAME} ${SOURCES})
# Añadir definiciones de compilación dependiendo del tipo de build
target_compile_definitions(${PROJECT_NAME} PRIVATE $<$<CONFIG:DEBUG>:DEBUG VERBOSE>)
# Enlazar bibliotecas
target_link_libraries(${PROJECT_NAME} ${LIBS})
# Configuración específica para cada plataforma
if(WIN32)
target_compile_definitions(${PROJECT_NAME} PRIVATE WINDOWS_BUILD)
target_link_libraries(${PROJECT_NAME} mingw32 opengl32 gdi32 winmm imm32 ole32 version)
elseif(APPLE)
set(LIBS ${LIBS} "-framework OpenGL")
target_compile_definitions(${PROJECT_NAME} PRIVATE MACOS_BUILD)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated")
# Configurar compilación para Apple Silicon
set(CMAKE_OSX_ARCHITECTURES "arm64")
elseif(UNIX AND NOT APPLE)
set(LIBS ${LIBS} GL)
target_compile_definitions(${PROJECT_NAME} PRIVATE LINUX_BUILD)
target_link_libraries(${PROJECT_NAME} ${LIBS})
endif()
# Añadir OpenGL a las bibliotecas enlazadas
if(NOT WIN32)
find_package(OpenGL REQUIRED)
if(OPENGL_FOUND)
message(STATUS "OpenGL encontrado: ${OPENGL_LIBRARIES}")
target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBRARIES})
else()
message(FATAL_ERROR "OpenGL no encontrado")
endif()
endif()

View File

@@ -2,7 +2,8 @@ executable = coffee_crisis
source = source/*.cpp source/common/*.cpp
appName = Coffee Crisis
releaseFolder = cc_release
version = v2.3
version = v2.3.1
resource_file = release/coffee.res
# Release names
windowsRelease = $(executable)-$(version)-win32-x64.zip
@@ -12,12 +13,13 @@ linuxRelease = $(executable)-$(version)-linux.tar.gz
windows:
@echo off
g++ $(source) -std=c++11 -Wall -Os -lmingw32 -lws2_32 -lSDL2main -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -Wl,-subsystem,windows -o "$(executable).exe"
windres release/coffee.rc -O coff -o $(resource_file)
g++ $(source) $(resource_file) -std=c++11 -Wall -Os -lmingw32 -lws2_32 -lSDL2main -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -Wl,-subsystem,windows -o "$(executable).exe"
strip -s -R .comment -R .gnu.version "$(executable).exe" --strip-unneeded
windows_debug:
@echo off
g++ $(source) -D DEBUG -std=c++11 -Wall -Os -lmingw32 -lws2_32 -lSDL2main -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -Wl,-subsystem,windows -o "$(executable)_debug.exe"
g++ $(source) -D DEBUG -D PAUSE -std=c++11 -Wall -Os -lmingw32 -lws2_32 -lSDL2main -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -Wl,-subsystem,windows -o "$(executable)_debug.exe"
strip -s -R .comment -R .gnu.version "$(executable)_debug.exe" --strip-unneeded
windows_release:
@@ -36,7 +38,7 @@ windows_release:
powershell Copy-Item "release\*.dll" -Destination "$(releaseFolder)"
# Build
g++ $(source) -std=c++11 -Wall -Os -lmingw32 -lws2_32 -lSDL2main -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -Wl,-subsystem,windows -o "$(releaseFolder)/$(executable).exe"
g++ $(source) $(resource_file) -std=c++11 -Wall -Os -lmingw32 -lws2_32 -lSDL2main -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -Wl,-subsystem,windows -o "$(releaseFolder)/$(executable).exe"
strip -s -R .comment -R .gnu.version "$(releaseFolder)/$(executable).exe" --strip-unneeded
# Create ZIP
@@ -50,7 +52,7 @@ macos:
clang++ $(source) -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -o "$(executable)"
macos_debug:
clang++ $(source) -D DEBUG -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -o "$(executable)_debug"
clang++ $(source) -D DEBUG -D PAUSE -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -o "$(executable)_debug"
macos_release:
# Remove data and possible data from previous builds
@@ -105,7 +107,7 @@ linux:
strip -s -R .comment -R .gnu.version "$(executable)" --strip-unneeded
linux_debug:
g++ $(source) -D DEBUG -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -o "$(executable)_debug"
g++ $(source) -D DEBUG -D PAUSE -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -o "$(executable)_debug"
strip -s -R .comment -R .gnu.version "$(executable)_debug" --strip-unneeded
linux_release:

View File

@@ -1,35 +1,34 @@
# Coffee Crisis
Coffee Crisis es un juego arcade que pondrá a prueba tus reflejos. Empezado durante el verano de 2020 y terminado un año despues, en el verano de 2021. Intenta conseguir todos los puntos que puedas con una sola vida a traves de los 10 niveles de juego y ayuda a Bal1 a defender la UPV de la invasión de la cafeína esférica y saltarina.
Coffee Crisis és un joc arcade que posarà a prova els teus reflexos. Començat durant l'estiu de 2020 i acabat un any després a l'estiu de 2021. Intenta aconseguir tots els punts que pugues amb una sola vida a través dels 10 nivells de joc i ajuda a Bal1 a defensar la UPV de la invasió de la cafeïna esfèrica i saltarina.
![alt text](https://php.sustancia.synology.me/images/cc1.png)
![alt text](https://php.sustancia.synology.me/images/cc/cc1.png)
## Teclado
El juego se maneja con teclado, aunque tambien se puede conectar un mando de control.
Las teclas son las siguientes:
## Teclat
* **Cursores**: Mover al personaje, moverse por los menus
* **Q, W, E**: Disparar a la izquierda, al centro y a la derecha respectivamente
* **ESCAPE**: Pone en pausa el juego durante la partida. Sale de los menus. Cierra el juego
* **ENTER**: Acepta las opciones en los menus
El joc es maneja amb teclat, encara que també es pot connectar un comandament de control.
Les tecles són les següents:
* **Fletxes**: Moure el personatge, moure's pels menús
* **Q, W, E**: Disparar a l'esquerra, al centre i a la dreta respectivament
* **ESCAPE**: Posa en pausa el joc durant la partida. Surt dels menús. Tanca el joc
* **ENTER**: Accepta les opcions en els menús
![alt text](https://php.sustancia.synology.me/images/cc2.png)
![alt text](https://php.sustancia.synology.me/images/cc/cc2.png)
## Compilar
Para compilar el código se necesitan tener las librerías SDL instaladas en el sistema y el compilador g++.
Per compilar el codi cal tindre les biblioteques SDL instal·lades al sistema i el compilador g++.
En Linux:
```bash
sudo apt install libsdl2-dev g++
```
En macOS se pueden instalar fácilmente con [brew](https://brew.sh):
En macOS es poden instal·lar fàcilment amb [brew](https://brew.sh):
```bash
brew install sdl2 g++
```
Una vez instaladas las librerías SDL, se puede compilar utilizando el fichero Makefile suministrado.
Un cop instal·lades les biblioteques SDL, es pot compilar utilitzant el fitxer Makefile subministrat.
En Linux:
```bash
@@ -40,11 +39,11 @@ En macOS:
```bash
make macos
```
![alt text](https://php.sustancia.synology.me/images/cc3.png)
![alt text](https://php.sustancia.synology.me/images/cc/cc3.png)
## Como ejecutar
## Com executar
Para ejecutar el juego hay que escribir en la terminal la orden que se muestra a continuación.
Per executar el joc cal escriure a la terminal l'ordre que es mostra a continuació.
En Linux:
```bash
@@ -56,12 +55,12 @@ En macOS:
./coffee_crisis_macos
```
En macOS tambien puedes hacer doble click sobre el archivo coffee_crisis_macos
En macOS també pots fer doble clic sobre l'arxiu coffee_crisis_macos
## Agradecimientos
A los jailers y a la jail. Y entre ellos, a JailDoctor por estar siempre ahí apoyándonos/obligándonos a sacar un Jailgame más.
## Agraïments
Als jailers i a la jail. I entre ells, a JailDoctor per estar sempre donant-nos suport/obligant-nos a traure un Jailgame més.
Y por supuesto a ti por estar aquí.
I per descomptat a tu per estar aquí.
## Licencia
Usa el código para lo que quieras: aprender, reirte, curiosear... excepto para sacar beneficio económico. Si lo consigues, por favor avísame y vamos a medias.
## Llicència
Utilitza el codi per a el que vulgues: aprendre, riure't, tafanejar... excepte per treure'n benefici econòmic. Si ho aconsegueixes, si us plau avisa'm i anem a mitges.

1
release/coffee.rc Normal file
View File

@@ -0,0 +1 @@
id ICON "icon.ico"

BIN
release/coffee.res Normal file

Binary file not shown.

BIN
release/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@@ -187,13 +187,13 @@ bool Director::initSDL()
{
// Crea un renderizador para la ventana. El vsync se activa en funcion de las opciones
// Crea un renderizador para la ventana. El vsync se activa en funcion de las opciones
//Uint32 flags = SDL_RENDERER_SOFTWARE;
//Uint32 flags = SDL_RENDERER_ACCELERATED;
// Uint32 flags = SDL_RENDERER_SOFTWARE;
// Uint32 flags = SDL_RENDERER_ACCELERATED;
Uint32 flags = 0;
if (options->vSync)
{
flags = flags | SDL_RENDERER_PRESENTVSYNC;
}
{
flags = flags | SDL_RENDERER_PRESENTVSYNC;
}
renderer = SDL_CreateRenderer(window, -1, flags);
if (renderer == nullptr)
@@ -435,7 +435,7 @@ void Director::checkProgramArguments(int argc, char *argv[])
}
// Crea la carpeta del sistema donde guardar datos
void Director::createSystemFolder(std::string folder)
void Director::createSystemFolder(const std::string &folder)
{
#ifdef _WIN32
systemFolder = std::string(getenv("APPDATA")) + "/" + folder;
@@ -446,7 +446,18 @@ void Director::createSystemFolder(std::string folder)
#elif __linux__
struct passwd *pw = getpwuid(getuid());
const char *homedir = pw->pw_dir;
systemFolder = std::string(homedir) + "/." + folder;
systemFolder = std::string(homedir) + "/.config/" + folder;
{
// Intenta crear ".config", per si no existeix
std::string config_base_folder = std::string(homedir) + "/.config";
int ret = mkdir(config_base_folder.c_str(), S_IRWXU);
if (ret == -1 && errno != EEXIST)
{
printf("ERROR CREATING CONFIG BASE FOLDER.");
exit(EXIT_FAILURE);
}
}
#endif
struct stat st = {0};
@@ -590,12 +601,12 @@ bool Director::saveConfigFile()
else if (options->videoMode == SDL_WINDOW_FULLSCREEN)
{
file << "fullScreenMode=SDL_WINDOW_FULLSCREEN\n";
file << "videoMode=SDL_WINDOW_FULLSCREEN\n";
}
else if (options->videoMode == SDL_WINDOW_FULLSCREEN_DESKTOP)
{
file << "fullScreenMode=SDL_WINDOW_FULLSCREEN_DESKTOP\n";
file << "videoMode=SDL_WINDOW_FULLSCREEN_DESKTOP\n";
}
file << "windowSize=" + std::to_string(options->windowSize) + "\n";
@@ -741,7 +752,7 @@ void Director::initOnline()
#else
const std::string caption = options->online.jailerID;
#endif
//screen->showNotification(caption, lang->getText(85), 12);
// screen->showNotification(caption, lang->getText(85), 12);
screen->showNotification(caption, lang->getText(85));
if (options->console)
{

View File

@@ -81,10 +81,7 @@ private:
void checkProgramArguments(int argc, char *argv[]);
// Crea la carpeta del sistema donde guardar datos
void createSystemFolder(std::string folder);
// Establece el valor de la variable
void setSection(section_t section);
void createSystemFolder(const std::string &folder);
// Ejecuta la seccion de juego con el logo
void runLogo();

View File

@@ -16,7 +16,11 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
// Pasa variables
this->demo.enabled = demo;
this->numPlayers = numPlayers;
#ifdef PAUSE
this->currentStage = 3;
#else
this->currentStage = currentStage;
#endif
lastStageReached = currentStage;
if (numPlayers == 1)
{ // Si solo juega un jugador, permite jugar tanto con teclado como con mando
@@ -57,6 +61,9 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
// Inicializa las variables necesarias para la sección 'Game'
init();
#ifdef PAUSE
pause = false;
#endif
}
Game::~Game()
@@ -2552,7 +2559,7 @@ Uint8 Game::dropItem()
// Crea un objeto item
void Game::createItem(Uint8 kind, float x, float y)
{
Item *item = new Item(kind, x, y, itemTextures[kind], itemAnimations[kind], renderer);
Item *item = new Item(kind, x, y, itemTextures[kind - 1], itemAnimations[kind - 1], renderer);
items.push_back(item);
}
@@ -3066,7 +3073,7 @@ void Game::checkGameInput()
if (players[index]->canFire())
{
players[index]->setInput(input_fire_left);
createBullet(players[index]->getPosX() + (players[index]->getWidth() / 2) - 4, players[index]->getPosY() + (players[index]->getHeight() / 2), BULLET_UP, players[index]->isPowerUp(), index);
createBullet(players[index]->getPosX() + (players[index]->getWidth() / 2) - 4, players[index]->getPosY() + (players[index]->getHeight() / 2), BULLET_LEFT, players[index]->isPowerUp(), index);
players[index]->setFireCooldown(10);
}
}
@@ -3076,7 +3083,7 @@ void Game::checkGameInput()
if (players[index]->canFire())
{
players[index]->setInput(input_fire_right);
createBullet(players[index]->getPosX() + (players[index]->getWidth() / 2) - 4, players[index]->getPosY() + (players[index]->getHeight() / 2), BULLET_UP, players[index]->isPowerUp(), index);
createBullet(players[index]->getPosX() + (players[index]->getWidth() / 2) - 4, players[index]->getPosY() + (players[index]->getHeight() / 2), BULLET_RIGHT, players[index]->isPowerUp(), index);
players[index]->setFireCooldown(10);
}
}
@@ -3367,8 +3374,13 @@ void Game::run()
}
}
#ifdef PAUSE
if (!pause)
update();
#else
// Actualiza la lógica del juego
update();
#endif
// Comprueba los eventos que hay en cola
checkEvents();
@@ -3869,6 +3881,16 @@ void Game::checkEvents()
section->subsection = SUBSECTION_GAME_PAUSE;
}
}
#ifdef PAUSE
else if (eventHandler->type == SDL_KEYDOWN)
{
if (eventHandler->key.keysym.scancode == SDL_SCANCODE_P)
{
pause = !pause;
}
}
#endif
}
}

View File

@@ -238,6 +238,9 @@ private:
int cloudsSpeed; // Velocidad a la que se desplazan las nubes
int pauseCounter; // Contador para salir del menu de pausa y volver al juego
bool leavingPauseMenu; // Indica si esta saliendo del menu de pausa para volver al juego
#ifdef PAUSE
bool pause;
#endif
// Actualiza el juego
void update();

View File

@@ -8,12 +8,12 @@
#define ITEM_H
// Tipos de objetos
#define ITEM_POINTS_1_DISK 0
#define ITEM_POINTS_2_GAVINA 1
#define ITEM_POINTS_3_PACMAR 2
#define ITEM_CLOCK 3
#define ITEM_COFFEE 4
#define ITEM_COFFEE_MACHINE 5
#define ITEM_POINTS_1_DISK 1
#define ITEM_POINTS_2_GAVINA 2
#define ITEM_POINTS_3_PACMAR 3
#define ITEM_CLOCK 4
#define ITEM_COFFEE 5
#define ITEM_COFFEE_MACHINE 6
// Clase Item
class Item

View File

@@ -23,7 +23,7 @@
#define TITLE_H
// Textos
#define TEXT_COPYRIGHT "@2020,2023 JailDesigner (v2.3)"
#define TEXT_COPYRIGHT "@2020,2023 JailDesigner (v2.3.1)"
// Contadores
#define TITLE_COUNTER 800