No description
Find a file
2026-06-25 19:12:10 +00:00
Crazy_Scalper.mq5 Upload files to "/" 2026-06-25 19:12:10 +00:00
Readme.txt Upload files to "/" 2026-06-25 19:12:10 +00:00

# Article-22351-Crazy-Scalper-CCanvas-Interactive-Template

This repository is an article-derived reference project based on the original MQL5 article. 

## Overview

This project documents a minimal interactive MQL5 canvas application presented as Crazy Scalper, a game-like template running directly on a MetaTrader 5 chart.

The article explains how to build a reusable graphical skeleton for Expert Advisors using:

- CCanvas rendering
- ARGB transparency
- a millisecond timer-driven update loop
- keyboard event handling with OnChartEvent
- simple physics and AABB collision detection
- a finite state machine for screen flow

The described result is a practical reference for building animated chart overlays, panels, and interactive UI components in MQL5.

## Original Article

- **Article ID:** 22351
- **Author:** Dayana Cubillas Massana
- **Publication date:** 2026.05.20
- **Category:** Canvas
- **URL:** https://www.mql5.com/es/articles/22351

## Repository Purpose

This repository serves as a reference/reconstruction project for the article’s explained architecture and code excerpts.

Its purpose is to preserve the main implementation ideas behind the article’s prototype:

- creating a transparent canvas over the chart
- running rendering independently from market ticks
- structuring logic with explicit game/application states
- drawing vector objects directly in code
- handling keyboard-driven interaction
- using simple movement, obstacles, scoring, and collision rules

## Key Concepts

- `#include <Canvas\Canvas.mqh>`
- CCanvas initialization with `CreateBitmapLabel`
- `COLOR_FORMAT_ARGB_NORMALIZE` for alpha transparency
- chart cleanup via `ChartSetInteger(0, CHART_SHOW, false)`
- update loop using `EventSetMillisecondTimer(12)`
- responsive canvas resizing with `ChartGetInteger` and `canvas.Resize`
- state machine with:
  - `START_SCREEN`
  - `PLAYING`
  - `GAME_OVER`
- vector rendering with:
  - `FillRectangle`
  - `FillTriangle`
  - `FillCircle`
- line drawing methods
- basic physics:
  - gravity
  - jump impulse
  - velocity-based movement
- AABB collision detection
- keyboard control through `CHARTEVENT_KEYDOWN`
- dynamic difficulty scaling based on score
- use of `PlaySound` for feedback

## Algorithm / Architecture Summary

The article describes the project as a single-chart interactive loop:

**1. Initialization**
- Seed RNG with `MathSrand(GetTickCount())`
- Hide the standard chart
- Read chart dimensions in pixels
- Create a bitmap canvas with ARGB support
- Reset gameplay variables
- Start a high-frequency timer

**2. Rendering / Update Loop**
- `OnTimer()` acts as the main loop
- Detect chart resize and resize the canvas
- Clear the screen every frame
- Update background parallax offset
- Draw a grid background
- Dispatch behavior by current state:
  - start screen
  - active gameplay
  - game over screen
- Push the frame with `canvas.Update()`

**3. Gameplay State**
- Player rocket position is tracked with `g_playerX`, `g_playerY`
- Vertical movement uses gravity and jump velocity
- Obstacles are stored in a fixed array of candle-like pipes
- Obstacles move horizontally and recycle when leaving the screen
- Score increments after passing obstacles
- Difficulty increases every 10 points by adjusting speed, gap, and spacing

**4. Collision Logic**
- Boundary collision against top/bottom screen limits
- AABB overlap checks between player and each obstacle
- On collision, switch to GAME_OVER, update best score, and play a sound

**5. Input Handling**
- `OnChartEvent()` listens for keyboard input
- Space or Up Arrow:
  - starts the game from the start screen
  - applies upward thrust during gameplay
  - returns to start screen after game over

## Files Included

- `Crazy_Scalper.mq5`: The complete, compilable source code for the prototype.
- `README.md`: This documentation file.

## Statistics

- Code excerpts present: Yes
- Complete source attachment available: Yes
- Primary language of article text: Spanish
- Main MQL5 topics: CCanvas, timers, chart events, vector drawing, physics, collisions

## Tags

`MQL5`, `MetaTrader5`, `CCanvas`, `Canvas`, `ARGB`, `ChartEvent`, `OnTimer`, `GameLoop`, `VectorGraphics`, `CollisionDetection`, `UI`, `InteractiveEA`

## Difficulty

**Intermediate**

The article is beginner-friendly in explanation, but the implementation combines multiple MQL5 topics at once: canvas rendering, event-driven logic, frame updates, input handling, and collision math.

## Reference

Original article page: https://www.mql5.com/es/articles/22351