javascript

Медицинское обучение через игру: симулятор лечения сифилиса и ВИЧ

  • четверг, 11 июня 2026 г. в 00:00:10
https://habr.com/ru/articles/1046185/

В мире — миллионы заражений сифилисом и ВИЧ, и цифра растёт. Но мой пост не об этом.
Я решил техническую задачу: как сделать медицинский образовательный инструмент, который работает офлайн, не требует бэкенда и не собирает данные пользователей, используя веб‑технологии JS. Ведь в медицине приватность — это требование.

Код открыт, лендинг и игры доступны по ссылке.

При разработке я ориентировался на:
1. Анонимность — без сервера, без регистрации и сбора данных.
2. Мультиязычность. Без перезагрузки страницы.
3. Оптимизация. Возможность выбирать 30/60fps при двойном клике на старт (сбалансированный/производительный режимы)

Архитектура

index.html (лендинг)

├── /syph/index.html

└── /hiv/index.html

└── /…/..

Особенность реализации

1. Ускоренная игровая механика. Сжатие времени: 30 секунд = 24 часа


Ускорение в 2880 раз нужно, чтобы игрок за 5 минут ощутил неделю терапии. В реальной жизни, вирусная нагрузка растёт медленно, и последствия пропуска таблетки видны не сразу. В игре — уже через 30 секунд. Это и есть педагогическая цель: показать, как быстро всё идёт к критической точке при нерегулярном приёме либо его отсутствии. Иммунитет со временем восстанавливается, но медленно.

Hiv simulator
Hiv simulator

2. Упрощенные схемы лечения

Для удобства, сделал одну кнопку, запускающую прием лекарства. В реальности, схемы могут быть более индивидуальными и сложными.

3. Количество инфекционных агентов

2³⁰ — миллиард. Примерно столько в организме, через месяц после заражения. Сколько отрисовывать на экране? В симуляторе, одна трепонема символизирует целую популяцию,а старт начинается с 3–5 объектов. Почти сразу можно заметить, что чем раньше начинается лечение, тем выше вероятность успеха.

Syph. simulator
Syph. simulator

4. При переключении вкладок: таймер идёт, а отрисовка останавливается


Для MVP — решил оставить как есть. Это — поведение браузера. 

Планы

Добавить уровни сложности. В сложном режиме:
Запуск не с 3–5 единиц, а со 100 единиц
Вероятность перехода в спящую форму: 50%
Время в спящем режиме: 100–300 s.

const CONFIG = {
 gameday_s: 60,
 division_period_real_s: 30,
 divisionAnim_s: 1.2,
 startCount: 1,
 startCountMin: 3,        // минимальное количество бактерий при запуске   
 startCountMax: 5,        // максимальное количество бактерий при запуске
 maxSpirals: 1500,
 killMaxCharges: 2,
 killCooldownBetweenUses_s: 30,
 sleepProbabilityOnKill: 0.3,       // вероятность перехода в защитную L-форму
 sleepDurationRange_s: [60,180],   // время нахождения в спящей L-форме
 lodThreshold: 150,
 maxDetailedTubularSegments: 200,
 minRenderIntervalMs: 1000/30,
 highPerfRenderIntervalMs: 1000/60,
 dynamicRenderScale: 0.75,
 lowRenderScale: 0.5,
 perfSamplingMs: 2000,
 autoThrottleFPSDropThreshold: 40,
 instancedBatchSize: 500
};

Как вам идея? Будет ли она полезна в 2026 году, пока не изобрели вакцину?