Skip to content

dpsmpx/AIM_Trainer_pas

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Aim Trainer на PascalABC.NET

Проект «Aim Trainer» — это тренажёр реакции и меткости, реализованный на языке Pascal с использованием графической библиотеки GraphABC. Программа предлагает два режима игры, ведёт подробную статистику, сохраняет прогресс в файл и имеет приятный анимированный интерфейс.


📌 Содержание


Обзор

Aim Trainer — это игра, в которой игрок должен как можно быстрее и точнее кликать по появляющимся на экране кругам. Программа отслеживает время реакции, точность попадания (с учётом расстояния до центра круга), а также ведёт историю реакций, отображаемую в виде графика.

Особенности:

  • Два режима: Classic (только левая кнопка мыши) и Dual (синие круги – ЛКМ, красные – ПКМ).
  • Расчёт точности клика: попадание в центр даёт 100%, клик на середине радиуса – 50%, промах – 0%.
  • График последних 50 реакций с шкалой от 0 до 1000 мс.
  • Анимированный фон в главном меню (частицы, соединяющиеся линиями, и линии от курсора).
  • Сохранение лучших результатов, средней точности и всей истории реакций в файл stats.txt.
  • Возможность отключить визуальные эффекты в меню одним кликом вне кнопок.

Скриншоты

image image

Функционал

Функция Описание
Главное меню Отображает заголовок, кнопки выбора режима, график реакции и лучшие результаты.
Обратный отсчёт Перед началом игры показывается 3, 2, 1 для подготовки.
Игровой процесс На экране появляется круг, который плавно уменьшается. Игрок должен кликнуть по нему до исчезновения.
Режимы Classic – клик ЛКМ по любому кругу. Dual – синий круг (ЛКМ) или красный (ПКМ).
Статистика в игре FPS, счёт, точность (%), средняя реакция, оставшиеся жизни.
Окончание игры При потере всех жизней (15) или по нажатию ESC появляется экран результатов с детальной статистикой.
Сохранение Лучший счёт, лучшая точность, лучшая средняя реакция, количество сыгранных игр и все 50 последних реакций сохраняются в текстовый файл.
График реакции В меню отображается график реакции с метками 0, 200, 400, 600, 800, 1000 мс.
Визуальные эффекты Частицы движутся по экрану, между ними и от курсора рисуются линии. При наведении на заголовок появляется полупрозрачный круг. Все эффекты можно включить/выключить кликом вне кнопок.

Управление

Действие Клавиша / Мышь
Выбор режима Клик ЛКМ по кнопке в главном меню
Игра (Classic) Клик ЛКМ по кругу
Игра (Dual) Клик ЛКМ по синему кругу, ПКМ по красному
Завершить игру и показать результат ESC (в любой момент игры)
Продолжить после Game Over SPACE
Переключить эффекты меню Клик ЛКМ в любом месте главного меню, кроме кнопок

Запуск

Требования

  • Операционная система: Windows (рекомендуется).
  • Среда разработки: PascalABC.NET (версия 3.8 или новее).
  • Файлы проекта: все .pas файлы должны находиться в одной папке.

Инструкция

  1. Скачайте или склонируйте репозиторий.
  2. Откройте файл AIM_Trainer_AI.pas в PascalABC.NET.
  3. Нажмите F9 (или «Запустить») для компиляции и запуска.
  4. Убедитесь, что в папке есть файл Base.pas и Control_AI.pas – они подключаются автоматически.
  5. После первого запуска будет создан файл stats.txt с начальными данными.

Примечание: Программа использует графический модуль GraphABC, входящий в стандартную поставку PascalABC.NET. Никаких дополнительных библиотек не требуется.


Техническая информация для разработчиков

Структура проекта

Проект состоит из трёх модулей:

  1. Base.pas – базовые функции и процедуры:

    • Len2D – расстояние между точками.
    • IfThen<T> – обобщённый тернарный оператор.
    • DrawTextWithBackground – отрисовка текста на закруглённом фоне с тенью.
    • DrawBezierLine – построение кривой Безье (используется в будущих расширениях).
  2. Control_AI.pas – обработка ввода:

    • Структуры TButtonState, TInputState.
    • Глобальная переменная Input.
    • Процедуры InitInput, UpdateInput (вызывается в конце каждого кадра).
    • Функции для проверки состояний клавиш и мыши (IsKeyPressed, IsMouseButtonPressed и т.д.).
  3. AIM_Trainer_AI.pas – основной игровой модуль:

    • Логика игры, отрисовка, меню, сохранение.

Основные структуры данных

TGameState

Хранит всё состояние игры:

TGameState = record
  Score, TotalShots, Loses, WrongClicks: integer;
  TotalReactionTime: integer;
  TotalAccuracySum: real;         // сумма точностей за все клики (0..1)
  MaxLoses: integer;              // 15 по умолчанию
  Fail: boolean;
  TryTime: integer;               // время от начала игры (мс)
  Circles: array of TCircle;      // массив кругов (сейчас 1)
  MaxRadius, MaxCTime, CCTime: integer;
  ReactionHistory: array[0..49] of integer;  // последние 50 значений
  ReactionCount, ReactionIndex: integer;
  FPS: integer;
  GameMode: TGameMode;            // gmClassic, gmDual
  // ... прочие поля
end;

TCircle

Отвечает за один круг-мишень:

TCircle = record
  X, Y, Time, SpawnTime, CType: integer;
  procedure Spawn(...);
  procedure Update(...);
  procedure Render(...);
  function GetHitInfo(...): THitInfo;  // возвращает попадание и точность
end;
  • Time – оставшееся время жизни (уменьшается в Update).
  • CType – 0 (синий) или 1 (красный) для режима Dual.
  • GetHitInfo вычисляет точность попадания в зависимости от расстояния до центра.

TButton

Кнопка меню с подсветкой при наведении.

TParticle

Элемент фоновой анимации: позиция, скорость, методы обновления и отрисовки.

TStats

Хранит лучшие показатели из файла.

Ключевые процедуры

  • InitGameState() – сброс игры перед началом.
  • UpdateGame() – обновление логики каждый кадр: движение кругов, обработка кликов, FPS.
  • RenderGame() – отрисовка игрового поля.
  • RenderMainMenu() – отрисовка главного меню (частицы, заголовок, кнопки, график, рекорды).
  • RenderGameOver() – экран результатов.
  • LoadStats() / SaveStats() – загрузка и сохранение данных в файл stats.txt.
  • DrawParticles() – анимация частиц и линий.
  • DrawGraph() – построение графика реакции.

Сохранение и загрузка

Данные сохраняются в текстовый файл stats.txt в формате ключ=значение:

BestScore=42
BestAccuracy=87.5
BestAvgReaction=320.5
GamesPlayed=10
ReactionCount=15
ReactionIndex=5
Reaction0=280
Reaction1=310
...

История реакций хранится как кольцевой буфер размером 50. При завершении игры текущая сессия добавляется в сохранённый буфер (сохраняются последние 50 значений).

Цикл главного меню и обработка событий

Главный цикл реализован через перечисление TScreen и конечный автомат:

  • scMainMenuStartScreen
  • scCountdownCountdownScreen
  • scGameGameLoop
  • scGameOverGameOverScreen

В каждом цикле обязательно вызывается:

  • UpdateInput() – сброс одноразовых флагов ввода.
  • Redraw – перерисовка.

Это обеспечивает корректную обработку кликов и клавиш.


Возможные улучшения

  • Добавление нескольких кругов одновременно (уже заложена структура Circles).
  • Режим «Бесконечный» с возрастающей скоростью.
  • Звуковое сопровождение.
  • Поддержка мыши с несколькими кнопками.
  • Возможность кастомизации цветов и параметров.

Лицензия

Данный проект распространяется под лицензией GPL 3.0.


Ссылка на официальный сайт PascalABC.NET: https://pascalabc.net/

Удачи в тренировках! 🎯

About

AIM trainer written on PascalABC.NET

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages