⬇️ Descargar archivo .jar (Ejecutable)
Gameplay mostrando el modo de 2 jugadores simultáneos y el escalado de dificultad.
Juego 2D estilo Flappy Bird construido con Java 17 y LWJGL 3.3.3 sobre OpenGL 3.3 core profile. El proyecto emplea un quad base reutilizable con uniforms de transformación para renderizar todos los elementos en pantalla, prescindiendo del uso de motores gráficos externos o funciones del pipeline fijo. El renderizado y el manejo de transformaciones de los elementos se realiza mediante operaciones matriciales directamente en CPU para ser inyectadas en los shaders.
- Pájaro compuesto por figuras geométricas (cuerpo, pico, cola, ojo con pupila, ala animada oscilando con
sin(t)). - Inclinación del pájaro proporcional a la velocidad vertical para mayor dinamismo.
- Modo un jugador, dos jugadores y tres jugadores simultáneos en la misma ventana, con controles independientes.
- Dificultad progresiva: la velocidad de las tuberías y la frecuencia de aparición aumentan por nivel (Nivel 0: base, Nivel 1: medio, Nivel 2: avanzado, Nivel 3: máximo/techo).
- Menú principal con selección interactiva de modo de juego.
- Configuración previa a la partida para activar/desactivar gravedad invertida y ajustar el umbral de puntos.
- Pantalla de Game Over con puntuaciones individuales y declaración clara del ganador o empate.
- HUD superior con el puntaje en tiempo real de cada jugador.
- Fondo completo con degradado armónico, suelo interactivo y elementos decorativos dibujados con primitivas puras de OpenGL.
- Tuberías renderizadas con capitel decorativo.
- Escalado dinámico de ventana responsivo mediante técnica de letterbox/pillarbox para asegurar que el aspect ratio se mantenga en todo momento.
- Detección precisa de colisiones mediante cajas delimitadoras AABB (Axis-Aligned Bounding Box).
- Audio inmersivo de salto, punto conseguido y estado de game over utilizando
javax.sound.sampled. - Sistema tipográfico robusto para renderizado de texto escalable y centrado automáticamente en menús.
- Multiplataforma: Soporta Windows y macOS (incluyendo Apple Silicon M1/M2/M3).
- Java 17 o superior (Descargar)
- Maven 3.8+ (solo necesario para compilar desde código fuente)
- GPU con soporte para OpenGL 3.3 (cualquier GPU de la última década)
- Sistemas operativos soportados:
- Windows 10 / Windows 11 (x64)
- macOS 11 (Big Sur) o superior (Intel y Apple Silicon)
-
Asegúrate de tener Java 17 instalado. Verifica con:
java -version
-
Descarga el archivo
FlappyBird.jardesde la carpetabin/del repositorio. -
Abre una terminal en la carpeta donde descargaste el archivo y ejecuta:
En Windows:
java -jar FlappyBird.jar
En macOS:
java -XstartOnFirstThread -jar FlappyBird.jar
# Clonar el repositorio
git clone https://github.com/moises-cisneros/Flappy-Bird
cd Flappy-Bird
# Compilar el proyecto
mvn compile
# Ejecutar el juego
mvn exec:exec
# Generar JAR ejecutable (incluye todas las dependencias)
mvn clean package
# Ejecutar el JAR generado
# En Windows:
java -jar target/FlappyBird-1.0-SNAPSHOT.jar
# En macOS:
java -XstartOnFirstThread -jar target/FlappyBird-1.0-SNAPSHOT.jar- Abre tu IDE y selecciona "Importar proyecto Maven".
- Selecciona la carpeta del proyecto.
- Espera a que se descarguen las dependencias.
- Ejecuta la clase
org.moises.App.
| Jugador / Contexto | Acción | Tecla |
|---|---|---|
| Jugador 1 | Saltar | SPACE |
| Jugador 2 | Saltar | W |
| Jugador 3 | Saltar | ↑ (Flecha arriba) |
| Menú Principal | Navegar Arriba | ↑ |
| Menú Principal | Navegar Abajo | ↓ |
| Menú Principal | Modo 1 Jugador Directo | 1 |
| Menú Principal | Modo 2 Jugadores Directo | 2 |
| Menú Principal | Modo 3 Jugadores Directo | 3 |
| Menú Principal | Confirmar Selección | ENTER / SPACE |
| Menú Principal | Toggle Gravedad Invertida | Click en botón ON/OFF |
| Menú Principal | Ajustar Umbral Gravedad Invertida | Click en - / + |
| Game Over | Volver a Intentar (Retry) | R / SPACE |
| Game Over | Menú Principal | M / ESC |
src/main/java/org/moises/
├── App.java ← Punto de entrada que inicializa y arranca la aplicación
├── core/
│ ├── Game.java ← Bucle principal, control del viewport y máquina de estados
│ ├── GameState.java ← Enumerador para los estados MAIN_MENU, PLAYING y GAME_OVER
│ └── InputManager.java ← Polling nativo de GLFW y detección de flancos para teclas
├── entity/
│ ├── Bird.java ← Datos anatómicos, física y renderizado compuesto de cada pájaro
│ └── Pipe.java ← Estructura de tuberías y hitboxes AABB
├── render/
│ ├── Renderer.java ← Abstracción para drawRect, drawTriangle y transformaciones matriciales
│ ├── BackgroundRenderer.java ← Dibuja el fondo multicapa con primitivas y parallax
│ └── TextRenderer.java ← Lógica de medición, escalado y dibujo geométrico de tipografía
├── ui/
│ ├── MainMenu.java ← Dibujado y control de la pantalla de inicio
│ ├── GameOverMenu.java ← Dibujado de resultados y botones de reintento
│ └── MenuAction.java ← Enumerador para selección en menús (SELECT_1P, SELECT_2P, NONE)
└── audio/
└── SoundManager.java ← Sistema de Object Pooling y playback de pistas WAV
Solución: Asegúrate de usar el flag -XstartOnFirstThread:
java -XstartOnFirstThread -jar FlappyBird.jarSolución: Instala Maven o usa el wrapper incluido:
- Windows: Descargar Maven desde apache.org
- macOS:
brew install maven - O usa
./mvnw(Maven Wrapper) si está incluido en el proyecto
Solución: Actualiza tu versión de Java a Java 17 o superior:
# Verificar versión actual
java -version
# Descargar Java 17 desde:
# https://openjdk.org/projects/jdk/17/Posibles causas:
- GPU no soporta OpenGL 3.3 (actualiza drivers)
- Falta el flag
-XstartOnFirstThreaden macOS - El JAR está corrupto (re-descargar o recompilar)
- Desarrollo y Arquitectura: Moises Cisneros - GitHub | X (Twitter)
- Motor Gráfico y Binding: Construido sobre LWJGL 3 (Licencia BSD)
- Tipografía: Press Start 2P por CodeMan38 (SIL Open Font License)
- Audio: Efectos de sonido generados vía jsfxr y/o biblioteca Kenney (CC0)
- Texturas: Imagen de explosión del pack Kenney Particle Pack (CC0)
Este proyecto se distribuye bajo la licencia MIT. Eres libre de utilizar, modificar y distribuir este código para fines personales o educativos. Consulta el archivo LICENSE para más detalles.
¿Preguntas o sugerencias? Abre un Issue en GitHub o contacta al desarrollador.
