Racing Game 3D
- Utilitys
-
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. - Version: 1.0
- Aktivierungen: 20
# Racing Game 3D – Ein auf Kerzencharts basierendes 3D-Rennspiel 🎮🏎️
`Racing_Game_3D` ist ein innovatives 3D-Rennspiel-Skript, das innerhalb der MetaTrader 5 (MT5)-Plattform läuft. Das Spiel wurde 2025 von **Musa Ziyad** entwickelt . Zu den wichtigsten Highlights des Spiels gehören **die Generierung von stark kurvigen 3D-Strecken aus den Echtzeit-Candlestick-Daten (OHLC) des aktuellen Charts**, die Darstellung mit nativen DirectX-3D-APIs, die Implementierung interaktiver Item-Boxen sowie Kopf-an-Kopf-Rennen gegen 5 CPU-Gegner.
---
## 🌟 Wichtige Konzepte & Funktionen
1. **K-Line-gesteuerte 3D-Kurvenstrecke**
* Das Skript fragt historische Candlesticks des aktiven Symbols ab (wobei der noch nicht abgeschlossene neueste Balken übersprungen wird).
* Die Körpergröße jeder Kerze (Schlusskurs – Eröffnungskurs) bestimmt den seitlichen Kurvenversatz dieses Straßenabschnitts. **Je volatiler der Markt, desto kurviger und anspruchsvoller wird die Rennstrecke**.
* Eine integrierte Zentrierungsberechnung erzeugt dynamische Kurven im Slalom-Stil und verhindert gleichzeitig, dass die Strecke unendlich weit abdriftet.
2. **Native DirectX-Rendering-Engine**
* Arbeitet über die interne `DXContext` -Schnittstelle von MetaTrader 5 , kombiniert mit einem benutzerdefinierten Vertex-Shader (`Shaders/vertex.hlsl`) und einem Pixel-Shader (`Shaders/pixel.hlsl`) für GPU-beschleunigte 3D-Projektion.
* Versorgt den Pixel-Shader mit einer `PSInputBuffer` -Struktur, die Auflösung, Zeit, Spielerkoordinaten, Koordinaten von 5 KI-Gegnern, lokale Streckenkrümmungs-Arrays, aktive Item-Boxen und fliegende Projektile übermittelt.
3. **Power-Ups & Kampfsystem**
* Item-Boxen sind alle 30 Meter entlang der Strecke verteilt und enthalten drei verschiedene Fähigkeiten:
* 🟦 **Blaue Box (Geschwindigkeitsschub)**: Gewährt Nitro-Beschleunigung und steigert die Höchstgeschwindigkeit für 3,0 Sekunden erheblich.
* 🟥 **Rote Box (Falle)**: Löst eine Schleuderfalle aus, die das Auto auf 2 km/h verlangsamt und die Lenkung für 1,5 Sekunden außer Kraft setzt.
* 🟨 **Gelbe Box (Feuerschuss)**: Gewährt einen Feuerball. Drücke **[SHIFT]**, um ihn nach vorne abzufeuern.
* Feuerbälle folgen den Kurven der Strecke. Bei einer Kollision mit einem Fahrzeug werden sie für 1,5 Sekunden deaktiviert.
4.**Intelligente KI-Gegner** im „ “
* Fahre gegen 5 computergesteuerte CPU-Autos.
* KI-Fahrzeuge verfügen über unterschiedliche Grundgeschwindigkeiten, wechseln die Spur, um Hindernissen auszuweichen, suchen nach blauen Geschwindigkeitsboxen und feuern Feuerbälle ab, wenn sie dicht hinter dem Spieler oder anderen Gegnern sind.
5. **Realistische Physik & visuelle Verfeinerung**
* **3D-Gierwinkel**: Berechnet den Neigungs-/Gierwinkel der Autos in Echtzeit basierend auf der Lenkgeschwindigkeit und liefert so immersive Lenkanimationen.
* **Wandkollisionen & Reibung**: Das Verlassen der Streckenbegrenzung (`ROAD_HALF_WIDTH` = 6,0 m) verlangsamt das Fahrzeug. Kollisionen mit anderen Rennfahrern verlangsamen das Auto und lösen eine Rückstoß-Physik aus.
* **Transluzenter HUD-Hintergrund**: Stellt sicher, dass HUD-Texte vor hellem Himmel oder grünen Wiesen gut lesbar sind.
---
## 🕹️ Steuerungsanleitung
* **↑**: Beschleunigen.
* **↓**: Abbremsen / Rückwärtsfahren.
* **←** und **→**: Nach links und rechts lenken.
* **SHIFT**: Feuerball abschießen (erfordert das Halten eines gelben Feuerball-Power-ups).
* **Enter**: Rennen zurücksetzen/neu starten.
* **ESC**: Das Spiel beenden und die Standard-Diagrammansicht wiederherstellen.
---
## 🛠️ Code-Architektur
1. **`rates[]` Kopieren & Track-Erstellung**
* Kopiere die Kerzendiagrammdaten ab Index 1 mit `CopyRates`.
* Berechnet `rates[i].close - rates[i].open`, um Krümmungsversätze zu definieren, und speichert diese im globalen Array`RoadOffsets[]`.
2. **`PSInputBuffer` Shader-Puffer**
* Packt aktive Render-Eingaben (Auflösungen, absolute Koordinaten, AI-Fahrzeugvektoren, 32 lokale Straßenversätze, nächstgelegene Box-Objekte, Projektillisten) und registriert sie im Pixel-Shader.
3. **`UpdateGame(double dt)` Physik-Schleife**
* Verwaltet Geschwindigkeiten, Abklingzeiten, natürliche Verzögerung und Luftwiderstand.
* Berechnet absolute 3D-Weltkoordinaten für alle Fahrzeuge.
* Interpoliert Straßenmittelpunkte mit `GetRoadXCPU(z)`, um Begrenzungen durchzusetzen.
* Führt Projektilbahnen, Hitboxen und die Kollisionslogik zwischen Fahrzeugen aus.
* Definiert Sieg-/Niederlage-Trigger basierend auf der Ziellinie (`FinishLineDistance`).
4. **Frame-Rendering (`DXDrawIndexed` + Bitmaps)**
* Leert die Tiefenpuffer, inkrementiert Shader-Timelines und ruft `DXDrawIndexed` auf .
* Exportiert Framebuffer über `DXContextGetColors` in das CPU -Array `image[]`.
* Überlagert HUD-Texte (Rennstatistiken, Geschwindigkeiten, Zeiten und Wirkungsdauern von Gegenständen), bevor das grafische Diagrammobjekt aktualisiert wird.
---
## ⚙️ Konfigurationsparameter
Passen Sie diese Eingaben beim Starten des Skripts an:
* **InputKLineCount** (`Track Candlesticks`): Standardwert `1000`. Legt die Länge der Strecke fest.
* **CurveIntensity** (`Curvature Intensity`): Standardwert `2.5`. Höhere Werte führen zu engeren und schärferen Kurven.
* **SegmentLength** (`Segment Depth`): Standardwert `10,0` Meter. Stellt die physische Länge jedes Kerzensegments im 3D-Raum dar.
---
## 🚀 So wird es ausgeführt
1. Öffnen Sie MetaTrader 5.
2. Wählen Sie das gewünschte Symbol und den gewünschten Zeitrahmen aus (z. B. GBPUSD, M15).
3. Durchsuchen Sie die „Navigator“-Struktur: **Skripte -> Meine Skripte -> 3D-Animation -> Racing_Game_3D**.
4. Doppelklicken Sie auf`Racing_Game_3D` oder ziehen Sie es auf das Chart.
5. Legen Sie die Parameter im Dialogfenster fest und klicken Sie dann auf „OK“.
6. Das Handelschart wird ausgeblendet und das Rennen beginnt. Drücken Sie jederzeit**ESC**, um das Spiel zu beenden.
---

