https://github.com/sorgazb/ball_sort_puzzle
Game made in c++ (in development)
https://github.com/sorgazb/ball_sort_puzzle
alegro cpp game game-development
Last synced: 17 days ago
JSON representation
Game made in c++ (in development)
- Host: GitHub
- URL: https://github.com/sorgazb/ball_sort_puzzle
- Owner: sorgazb
- Created: 2024-03-19T13:29:46.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2026-05-31T13:53:23.000Z (about 1 month ago)
- Last Synced: 2026-05-31T15:08:28.837Z (about 1 month ago)
- Topics: alegro, cpp, game, game-development
- Language: C++
- Homepage:
- Size: 713 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Ball Sort Puzzle
    
> **Ball Sort Puzzle** es un videojuego de puzles desarrollado en C++ con la librería gráfica **Allegro 5**. El objetivo es ordenar las bolas de colores en los tubos usando estructuras de **Pila (TADPila)**, con niveles configurables desde ficheros `.cnf` e inicialización aleatoria o manual del tablero.
---
## 🎮 Descripción del Juego
**Ball Sort Puzzle** recrea el clásico juego móvil de ordenar bolas por color. El jugador mueve la bola del tope de un tubo a otro, con la restricción de que solo puede depositar una bola sobre otra del mismo color o en un tubo vacío.
La lógica del juego se sustenta en los siguientes TADs:
- **TADPila** — implementación de la pila que representa cada tubo del tablero.
- **TADTablero** — gestiona el conjunto de tubos (pilas) que forman el nivel.
- **TADJuego** — controla la lógica de partida, movimientos, puntuación y condición de victoria.
- **entorno** — capa gráfica con **Allegro 5** que renderiza el tablero, las bolas y gestiona los eventos de ratón y teclado.
- **Ficheros `.cnf`** — configuración de niveles: número de pilas, bolas por pila, puntuación inicial e inicialización aleatoria o desde fichero.
---
## 🏗️ Estructura del Proyecto
```txt
Ball_Sort_Puzzle/
├── BallSortPuzzleBase/
│ ├── src/
│ │ ├── BallSort.cpp # Punto de entrada principal del juego
│ │ ├── TADPila.h / .cpp # TAD Pila: estructura de cada tubo
│ │ ├── TADTablero.h / .cpp # TAD Tablero: conjunto de tubos del nivel
│ │ ├── TADJuego.h / .cpp # TAD Juego: lógica, movimientos y puntuación
│ │ ├── entorno.h / .cpp # Renderizado gráfico con Allegro 5
│ │ ├── prPila.h / .cpp # Pruebas del TAD Pila
│ │ └── prTablero.h / .cpp # Pruebas del TAD Tablero
│ ├── ballSort.cnf # Nivel base (4 colores, 2 pilas vacías, 4 bolas/pila)
│ ├── ballSort4.cnf # Nivel 4 pilas
│ ├── ballSort5.cnf # Nivel 5 pilas
│ ├── ballSort6.cnf # Nivel 6 pilas
│ ├── ballSort7.cnf # Nivel 7 pilas
│ ├── ballSort8.cnf # Nivel 8 pilas
│ ├── DroidSerif-Regular.ttf # Fuente tipográfica usada por Allegro
│ └── Debug/ # Binarios de depuración
└── README.md # Documentación del proyecto
```
---
## 📄 Formato de los Ficheros de Configuración `.cnf`
Cada nivel se define mediante un fichero `.cnf` con el siguiente formato:
```txt
4 <- Nº de pilas con bolas (= nº de colores diferentes)
2 <- Nº de pilas vacías (suma de pilas: entre 4 y 10)
4 <- Nº de bolas por cada pila (entre 3 y 6)
0 <- 0 = inicializar desde fichero | <>0 = inicialización aleatoria
500 <- Puntuación inicial de la partida
1 4 3 4 <- Contenido de cada pila (de abajo hacia arriba)
...
```
---
## ⚙️ Compilación y Ejecución
> ⚠️ Requiere tener instalada la librería **Allegro 5** en el sistema.
Clonar el repositorio:
```bash
git clone https://github.com/sorgazb/Ball_Sort_Puzzle.git
cd Ball_Sort_Puzzle/BallSortPuzzleBase/src
```
Compilar con g++ enlazando Allegro 5:
```bash
g++ -o BallSortPuzzle BallSort.cpp TADPila.cpp TADTablero.cpp TADJuego.cpp entorno.cpp \
$(pkg-config --libs --cflags allegro-5 allegro_font-5 allegro_ttf-5 allegro_primitives-5)
```
Ejecutar desde el directorio `BallSortPuzzleBase/` (para que encuentre los `.cnf` y la fuente):
```bash
cd ..
./src/BallSortPuzzle
```
---
## 🖥️ Ejemplo de Ejecución
---
## 🚀 Estado del Proyecto
Este proyecto se encuentra actualmente **en desarrollo**. Funcionalidades previstas:
- [ ] Sistema de niveles con selección desde menú.
- [ ] Contador de movimientos y temporizador.
- [ ] Guardado y carga de partida.
- [ ] Mejoras visuales en las animaciones de las bolas.
---
## 🤝 Contribución
Haz fork del repositorio.
Crea una rama de trabajo:
```bash
git checkout -b feature/mi-nueva-funcionalidad
```
Realiza tus cambios y haz commit.
Abre un Pull Request describiendo tus mejoras.
---
Introducción a la Programación (IP) · Grado en Ingeniería Informática · Universidad de Extremadura
Sergio Orgaz Bravo