Mario KLine Platformer
- Utilidades
-
Yu Zhang
I am a senior practitioner in Fintech industry.
And I have done a lot of academic research on financial markets.
From 2012, I work as a Quant.
Forex, stock and futures are my main trading varieties.
I can use MQL4, MQL5, C++, MySql, and Python. - Versión: 1.0
- Activaciones: 20
# Mario KLine Platformer - Juego de plataformas de desplazamiento lateral con velas japonesas 🎮📊
`Mario KLine Platformer` es un juego de plataformas de desplazamiento lateral increíblemente creativo para MetaTrader 5 (MT5). Este script combina ingeniosamente los gráficos financieros con la mecánica clásica al estilo Super Mario,**utilizando los datos de velas japonesas en tiempo real (OHLC) del gráfico actual como terreno del nivel**. ¡Corre, salta y lanza bolas de fuego a través de las tendencias del mercado en una «aventura gráfica» única!
---
## 🌟 Conceptos y características clave
1. **Velas japonesas como terreno jugable (terreno K-Line)**
* Al iniciarse, el juego obtiene los datos históricos de las velas (apertura, máximo, mínimo y cierre) del gráfico activo y los traduce en terrenos y acantilados.
* Las velas alcistas verdes y las bajistas rojas forman escalones de diversas alturas. Las partes superiores de los cuerpos de las velas sirven como suelo transitable. Las sombras y los bordes resaltados añaden una estética 3D de estilo retro a los gráficos.
* **Las tendencias del mercado dictan la dificultad**: una fuerte tendencia alcista crea «montañas» empinadas que escalar, mientras que una fuerte tendencia bajista forma «gargantas» profundas que requieren saltos precisos para cruzarlas.
2. **Sistema de mejoras y potenciadores**
* Al golpear los bloques de pregunta dorados flotantes, aparecen aleatoriamente diferentes potenciadores:
* 🍄 **Seta gigante**: Aumenta el tamaño del sprite de Mario (hasta 40 píxeles más alto) y mejora el nivel de crecimiento (hasta 5). Cada nivel actúa como un escudo, absorbiendo un golpe de daño.
* 🔥 **Flor de fuego**: Mejora la capacidad de disparo de Mario hasta el nivel 5. Los niveles más altos permiten disparar más bolas de fuego simultáneamente (dispersión multidireccional), a mayor velocidad y con un tiempo de recarga reducido.
* 🪙 **Monedas**: Golpea los bloques de monedas para que reboten y gana 200 puntos al instante.
3. **Enemigos variados y encuentros con minijefes**
* **Goombas (enemigos normales)**: Patrullan entre las repisas de los candelabros, saltan aleatoriamente y disparan balas de energía de color morado oscuro hacia Mario.
* **Minijefes**: Aparecen a intervalos definidos por los parámetros de los candelabros. Cuentan con 5 puntos de vida (con una barra de salud que se muestra arriba), coronas doradas y armadura morada, y disparan proyectiles que se dispersan en tres direcciones.
* **Mecánicas de combate**: Puedes eliminar a los enemigos saltando sobre sus cabezas (mata al instante a los Goombas, inflige 1 punto de daño a los jefes y provoca un rebote alto) o disparándoles bolas de fuego.
4. **Mecánicas de movimiento avanzadas**
* **Ayuda al paso**: Mario se sube automáticamente a los bordes bajos de las velas, lo que te ahorra tener que saltar constantemente.
* **Deslizamiento por la pared y salto desde la pared**: Cuando estás en el aire junto a una pared alta, mantener pulsada la tecla de dirección activa un deslizamiento lento. Al pulsar la tecla de salto durante el deslizamiento, se realiza un salto desde la pared en la dirección opuesta, lo que te permite escalar paredes altas fácilmente.
5. **Rasterizador de software 2D integrado**
* El juego no requiere dependencias GDI externas. Utiliza las matrices de búfer de píxeles sin procesar de MQL5 (`g_image[]`) para dibujar píxeles y formas (`FillRect`), que se actualizan dentro de un recurso`OBJ_BITMAP_LABEL`.
* Sistema de fondo inmersivo: cielos con degradados, un sol resplandeciente, nubes con desplazamiento paraláctico (velocidad 0,3x) y montañas lejanas (velocidad 0,5x), superpuestas con líneas de cuadrícula de trading.
---
## 🕹️ Guía de controles
* **←** y **→**: Mueve a Mario hacia la izquierda y hacia la derecha.
* **↑**: Saltar. Pulsa mientras te deslizas por una pared para activar un «salto de pared».
* **Ctrl (Control)**: Lanza bolas de fuego (requiere un nivel de Flor de Fuego $\ge 1$).
* **Enter**: Reiniciar/Restablecer el juego.
* **ESC**: Salir del juego y volver a la vista normal del gráfico.
---
## 🛠️ Arquitectura del código
El código es limpio y sigue los diseños estándar de los bucles de los juegos retro:
1. **`BuildTerrain()` (Generador de terreno)**
* Descarga los datos OHLC actuales de las velas japonesas (hasta 10 000 barras) y asigna los rangos de precios a los píxeles de la pantalla (una vela japonesa típica ocupa 32 píxeles horizontales y aproximadamente 110 píxeles verticales).
* Almacena los valores en las matrices`g_highH`, `g_lowH`, `g_bodyTopH` y `g_bodyBotH`.
2. **`SpawnEnemies()` y `SpawnBoxes()` (Generadores de escena)**
* Genera enemigos, jefes y objetos basándose en distribuciones matemáticas a lo largo de las velas.
* Genera bloques a 110 píxeles por encima de la altura de las velas.
3. **`UpdateGame(double dt)` (Tick de estado del juego)**
* Calcula las posiciones de los jugadores, la física de la gravedad, las colisiones con el terreno y las entradas de deslizamiento por las paredes.
* Comprueba los golpes de cabeza contra bloques, actualiza los movimientos de potenciadores y gestiona la recogida de objetos.
* Gestiona los movimientos de las balas, el daño de las balas a los enemigos y las colisiones de los enemigos con el jugador.
* Finalización de la fase: si las coordenadas del jugador `g_px` alcanzan la última vela, se activa el estado de victoria (+1000 puntos y se muestra un mensaje de finalización).
4. **`RenderGame()` y `DrawMario()` (Rasterizador de píxeles)**
* Dibuja degradados del cielo, desplaza las montañas y las nubes en paralaje con respecto a la cámara `g_camX`.
* Recorre los rangos visibles para dibujar candelabros, banderas, bloques, partículas y barras de salud.
* Renderiza el sprite animado de Mario (alternando fotogramas de piernas para el ciclo de marcha) y hace parpadear el sprite durante los fotogramas de invencibilidad.
---
## ⚙️ Parámetros de configuración
Ajusta estos parámetros al ejecutar el script:
* **InpMaxBars** (`Candlesticks Count`): Valor predeterminado `1000`. Establece la longitud total del nivel (hasta 10 000 barras).
* **InpBossBars** (`Intervalo de jefes`): Valor predeterminado `100`. Define cuántas velas deben pasar antes de que aparezca un minijefe.
---
## 🚀 Cómo ejecutarlo
1. Abre MetaTrader 5.
2. Selecciona el símbolo y el marco temporal del gráfico que desees (por ejemplo, EURUSD, H1).
3. En la ventana «Navegador», ve a **Scripts -> My_Scripts -> 3D动画 -> Mario_KLine_Platformer**.
4. Haz doble clic o arrastra `Mario_KLine_Platformer` al gráfico.
5. Configura los parámetros del nivel en el cuadro de diálogo y, a continuación, haz clic en «Aceptar».
6. El gráfico se ocultará y comenzará el juego. Pulse **ESC** en cualquier momento para volver a su gráfico de trading habitual.
---

