В мире — миллионы заражений сифилисом и ВИЧ, и цифра растёт. Но мой пост не об этом.
Я решил техническую задачу: как сделать медицинский образовательный инструмент, который работает офлайн, не требует бэкенда и не собирает данные пользователей, используя веб‑технологии JS. Ведь в медицине приватность — это требование.
Код открыт, лендинг и игры доступны по ссылке.
При разработке я ориентировался на:
1. Анонимность — без сервера, без регистрации и сбора данных.
2. Мультиязычность. Без перезагрузки страницы.
3. Оптимизация. Возможность выбирать 30/60fps при двойном клике на старт (сбалансированный/производительный режимы)
Архитектура
index.html (лендинг)
├── /syph/index.html
└── /hiv/index.html
└── /…/..
Особенность реализации
1. Ускоренная игровая механика. Сжатие времени: 30 секунд = 24 часа
Ускорение в 2880 раз нужно, чтобы игрок за 5 минут ощутил неделю терапии. В реальной жизни, вирусная нагрузка растёт медленно, и последствия пропуска таблетки видны не сразу. В игре — уже через 30 секунд. Это и есть педагогическая цель: показать, как быстро всё идёт к критической точке при нерегулярном приёме либо его отсутствии. Иммунитет со временем восстанавливается, но медленно.
2. Упрощенные схемы лечения
Для удобства, сделал одну кнопку, запускающую прием лекарства. В реальности, схемы могут быть более индивидуальными и сложными.
3. Количество инфекционных агентов
2³⁰ — миллиард. Примерно столько в организме, через месяц после заражения. Сколько отрисовывать на экране? В симуляторе, одна трепонема символизирует целую популяцию,а старт начинается с 3–5 объектов. Почти сразу можно заметить, что чем раньше начинается лечение, тем выше вероятность успеха.
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 году, пока не изобрели вакцину?
ссылка на оригинал статьи https://habr.com/ru/articles/1046185/