3D Лабиринт с шаром (AutoIt3 + C)
Гибрид из AutoIt3 и нативной C DLL. AutoIt рулит логикой и окном, а C делает всю графику через рейкастинг напрямую в пиксельный буфер. Никаких сторонних движков.
Как устроено
Два уровня:
1. AutoIt3 (maze_ball.au3) — мозг игры. Обрабатывает клавиатуру, считает физику шара (инерция, отскоки), создаёт окно и крутит игровой цикл.
2. C DLL (maze_rc.c) — графический движок. Рейкастинг (псевдо-3D как в Wolfenstein), рисует небо с солнцем, пол с тенями, стены. Шар рендерится как 3D-сфера с текстурой и бликами.
Как AutoIt рисует 3D
Сам AutoIt для 3D не годится, поэтому обходим через сырой пиксельный буфер:
- В AutoIt создаём DllStruct — массив на 307200 пикселей (640x480).
- Передаём указатель на эту память в C DLL.
- C заполняет буфер цветами — вся математика на полной скорости процессора.
- Когда кадр готов, AutoIt вызывает StretchDIBits из Windows API — копирует буфер прямо в окно.
Что умеет
Освещение — солнце на юге, тени от стен падают на север. Плавные градиенты через мульти-сэмплинг, ambient occlusion у оснований стен.
Физика — у шара есть инерция, он катится сам после разгона и замедляется трением. При ударе о стену отскакивает под углом отражения. Камера сама доворачивается в коридор после поворота.
Сборка и запуск
1. Поставить MinGW (gcc).
2. Запустить build_maze.bat — соберёт mazeball_rc.dll и 32-битную версию.
3. Запустить maze_ball.au3 через AutoIt3.
Управление: стрелки вверх/вниз — разгон/торможение, влево/вправо — поворот (в тупике стрейф), Q или Esc — выход.