NeurOX: Крестики‑нолики с ИИ или войти в IT
Сайт проекта: https://neurox.su
Цель проекта
Разработка экосистемы многопользовательской игры крестики-нолики в классическом исполнении с полным стеком технологий от С до Android и Web.
Для кого этот проект
- Для своих детей — наследие, объяснение основных парадигм и принципов программирования.
- Для себя — восстановление навыков.
- Для остальных — подойдёт для изучения новичкам.
Парадигмы
- KISS — должен оставаться донельзя простым для понимания.
- YAGNI — время и ресурсы дороже излишеств.
Технологии
Сервер
Back-end Core (C)
- Игровой движок — базовая логика игры: проверка ходов, определение победы/ничьей, управление состоянием доски 3×3.
- Нейросеть 9-18-9 — ИИ‑противник: полносвязная сеть (9 входных нейронов — состояние доски, 18 скрытых, 9 выходных — оценка ходов). Обучается на партиях.
- TCP/IP со сквозным шифрованием — защищённая передача данных между клиентом и сервером (RSA + XOR).
- Аллокатор — кастомное управление памятью для повышения производительности и контроля утечек.
- Очереди — буферизация и синхронизация входящих/исходящих сообщений между потоками.
Back-end Web (PHP + CodeIgniter)
- NGINX — веб‑сервер для статического фронтенда (HTML/CSS/JS) и проксирования.
- PHP + CodeIgniter — бэкенд веб‑интерфейса и «мост» между веб‑клиентом (JS) и C‑ядром. Обрабатывает AJAX‑запросы, передаёт команды в ядро через Unix‑сокеты/пайпы, возвращает ответы в формате JSON.
- MySQL — хранение данных пользователей, статистики игр, логов. Используется веб‑сервером для отображения информации.
Front-end (Web)
- HTML/CSS — структура и визуальное оформление веб‑версии игры: доска, кнопки, индикаторы.
- JavaScript — интерактивность веб‑интерфейса: обработка кликов, обновление доски, анимация ходов, связь с сервером через AJAX/WebSocket.
Клиент
- Core (С-ядро):
- XOGame — оффлайн игровая логика (проверка ходов, определение победы);
- NeurOXNet — нейросеть (обучается на игре против пользователя);
- epoll — сетевая коммуникация (TCP/IP, Linux/Android);
- WSAPoll+IOCP — сетевая коммуникация (TCP/IP, Windows);
- SQLite — хранилище локальных настроек интерфейса, весов нейросети.
- GUI:
- PC‑Desktop — нативное приложение с графическим интерфейсом на базе SFML (Simple Fast Media Library);
- Android — Kotlin + Jetpack — мобильная версия игры с реактивным UI на базе Jetpack Compose:
- ViewModel — управление состоянием UI и бизнес‑логикой;
- Репозиторий — абстракция доступа к данным (локальные данные + сетевые запросы);
- Data Binding — синхронизация данных между UI и ViewModel.
Инфраструктура
- Postfix — почтовый сервер для отправки уведомлений (подтверждение регистрации, напоминания о ходе игры).
Оборудование
-
Сервер:
- OS: Ubuntu Server 24.04;
- CPU: Intel Core i5‑3470, 4 @ 3.2 GHz;
- RAM: 8 GB;
- ROM: noname 256 GB SSD;
- WiFi: 2.4 GHz, прямая видимость до 6 м (~32 Mbit/s).
-
Рабочая станция (ПК):
- OS: Windows 10;
- CPU: Intel Core i5‑3470, 4 @ 3.2 GHz;
- RAM: 16 GB;
- ROM: noname 256 GB SSD.
- WiFi: 2.4 GHz, прямая видимость до 6 м (~32 Mbit/s).
-
Ноутбук:
- OS: Dual boot (Windows 10 / Ubuntu 24.04);
- CPU: noname AMD‑Like, 4 @ 1.6 GHz;
- RAM: noname 16 GB;
- ROM: noname 1 TB SSD.
-
Смартфон:
- Модель: Xiaomi Redmi Note 14 Pro;
- OS: HyperOS 3.0.5.0 (Android 14);
- CPU: MediaTek Helio G100, 8 @ 2.2 GHz;
- RAM: 12 GB;
- ROM: 512 GB SSD.
Стандарты и спецификации
- C11 (ISO/IEC 9899:2011) — для C‑ядра и десктоп‑клиента.
- C++11 (ISO/IEC 14882:2011) — для десктоп‑клиента (SFML).
- POSIX — поддержка Unix‑подобных систем (Linux/Android):
epoll— асинхронный ввод‑вывод для масштабирования сервера;pthreads(POSIX Threads) — управление потоками.
- WinAPI (Windows Vista+) — поддержка Windows‑платформы:
- WSAPoll — асинхронный ввод‑вывод (аналог POSIX
poll(), доступен с Windows Vista); - Windows Threads — управление потоками в Windows.
- WSAPoll — асинхронный ввод‑вывод (аналог POSIX
- Компиляторы:
- GCC 9+ (Linux) — компиляция C‑ядра и десктоп‑клиента;
- Clang 11+ (Android NDK) — компиляция C‑библиотеки для Android;
- MSVC 2019+ (Visual Studio) — компиляция Windows‑версии клиента и сервера.
- CMake:
- 3.16+ (Linux/Windows) — единая система сборки для десктоп‑платформ;
- 3.11+ (Android) — сборка C‑ядра через Android NDK (официальная поддержка NDK, Clang, ABI).
Инструменты
- IDE:
- Visual Studio Code — Linux, PHP, HTML/CSS, JavaScript, SQL;
- Visual Studio — Windows;
- Android Studio — Android.
- Системы сборки: CMake, Make.
- Препрофилирование: YandexGPT 5.1 Pro (Алиса AI).
- Code review: YandexGPT 5.1 Pro (Алиса AI).
- Техническая документация: Doxygen, JSDoc, PHPDoc.
- Контроль версий: Git.
Прогресс
| Статус | Задача | Описание | Дата |
|---|---|---|---|
| ➤ | Документация | Оптимизация Doxygen | |
| ✅ | Документация | Обновлены контакты в README.md. | 11.05.2026 |
| ✅ | Документация | Создан логотип проекта. | 11.05.2026 |
| ✅ | Инфраструктура | Создана группа felexdev.neurox ВКонтакте | 11.05.2026 |
Подробный прогресс: PROGRESS.md
Статус
В активной разработке
План реализации
Принцип планирования:
- работа ведётся небольшими сессиями (30–60 минут) в свободное время;
- приоритет — последовательность, а не скорость;
- гибкость: этапы могут меняться местами, оставаясь в основной логике процесса.
Этап 1. Инфраструктура — 2–4 недели
- DNS: felexdev.ru + neurox.su;
- NGINX: сайт‑заглушка;
- Postfix: SPF/DKIM/DMARC;
- MySQL;
- тестирование инфраструктуры.
Этап 2. Ядро на C (логика + нейросеть) — 3–4 месяца
- аллокатор (возможность делегирования блоков между потоками);
- очередь пакетов/сообщений, синхронизация (двунаправленная на базе списка);
- базовая логика игры (3×3 доска, проверка победы);
- простая нейросеть (3 слоя, сигмоида/ReLU, обучение на 100+ партиях);
- модуль взаимодействия с СУБД (MySQL);
- пакетная передача TCP/IP со сквозным шифрованием (RSA + XOR);
- контроль активности соединения средствами ICMP (ping).
Этап 3. Сервер на PHP (API + БД) — 2–3 месяца
- интеграция с ядром через Unix‑сокеты/пайпы.
Этап 4. Десктоп‑клиент (C++/SFML) — 3–4 месяца
- базовый UI (доска 3×3, кнопки);
- связь с сервером по TCP/IP;
- анимация ходов и победы;
- игра с локальным ИИ (нейросеть).
Этап 5. Android‑клиент (Kotlin + NDK) — 4–6 месяцев
- доска 3×3 и связь с сервером;
- вызов C‑библиотеки через JNI;
- оптимизация под мобильные устройства.
Этап 6. Интеграция и тестирование — 2–3 месяца
- синхронизация состояния между десктопом и Android;
- стресс‑тест (10+ одновременных игр);
- отладка многопоточности;
- финальная оптимизация.
Этап 7. Релиз — 1 месяц
- сборка дистрибутивов (Windows, Linux, Android);
- документация для запуска;
- публикация демо‑видео.
Дисклеймер
- В коде может, вернее — будет, использоваться неочевидная логика.
- Если вы считаете, что я где‑то что‑то сделал не по фэн‑шую,— я эстет, но в плане эффективности.
- Если когда‑нибудь кто‑нибудь найдёт совпадение названия проекта и репозитория нарушением авторских прав — Бог Вам судья! 😃
- Проект личный, код открытый, милости просим, заходите и смотрите.
- Никогда, ни в коем разе не верьте ИИ, они изворачиваются и врут несмотря на то что вы их предупреждаете! ВСЕ!!! почему_я_не_верю_ии.zip(Спасибо друзьям)
Лицензия
Apache License 2.0 — код открыт для изучения.
Контакты
- Сайт разработчика: felexdev.ru
- VK: felexdev.neurox
- felexdev.ru: felex67
- GitHub: felex67
- Email: admin@felexdev.ru, felexxx67@yandex.ru
Лирическое отступление
К каждому из модулей будет приложено своё "лирическое отступление" в формате дневника процесса разработки(DIARY.md) сплошным потоком мыслей в обычном разговорном стиле. Целью такого формата является продемонстрировать как происходит собственно сам процесс разработки от и до без захламления технической документации. В коде иногда можно будет встретить сноски на эти самые дневники. В корневом DIARY.md будут отражены мысли масштаба проекта в целом(взаимодействие компонентов и всей экосистемы в целом). Вся техническая документация заполняется по мере готовности того или иного модуля по следующим принципам: мысль ↔ дневник ↔ код → комментарии → тесты → профилирование(по возможности) → документация.
ИИ аспект
Начиная с истоков увлечения программированием привык полагаться на результаты работы кода — профилирование и тесты. Как у борца за эффективность у меня нет нежелания заниматься рефакторингом ради рефакторинга, по-этому на данном этапе своей жизни используюю ИИ в первую очередь для препрофилирования нагрузок и определения узких мест на стадии разработки архитектуры. Считаю что от этого зависит львиная доля успешности проекта в принципе, так как если на скорую руку спроектировать, то даже самые опытные разработчики не помогут, собственно после такого подхода и начинается описанный выше рефакторинг.
Единственным моим ассистентом-специалистом по части критики и статистики является YandexGPT 5.1 Pro(АлисаAI). Порой наши многочасовые споры выматывают, но она очень помогает в следующих аспектах:
- Сбор статистики по типовым нагрузкам на стадии проектирования.
- Анализ кода в части читаемости, т.к. проект публичен.
- Анализ кода в формате Code-review, практическая польза:
- дисциплинирует, код всегда должен оставаться чистым.
- подготовка ко входу в реальную разработку с живой командой, моя основная цель - карьера в IT.
- даже топовые специалисты могут допускать казалось бы очевидные ошибки, когда мысли летят одна за другой их можно попросту не заметить.
- Даёт понимание алгоритмов и шаблонов работы ИИ при статическом анализе кода.
Что я понял за время общения с ней(YandexGPT АлисаAI):
- Никогда не верьте ИИ "на слово", как бы он Вас не уверял что больше такого не повторится, он всё понял, и глупых вопросов больше не последует.
- Никогда не следуйте подсказкам ИИ(так лучше) если понимаете что это Вам не нужно, очень часто ИИ "зацикливается" сам на себя(пока непонятно почему, но мы это выясним).
- 10, а лучше 100 раз переспросите с разных сторон(задавайте вопросы в разных вариациях до тех пор пока ответ не будет однозначным).
- Даже если Вам кажется что ИИ дал ±точный ответ — переспросите ещё раз.
- Не пытайтесь доказать ИИ что Вы — "не олень", он этого не оценит.
- Предлагая ИИ оценить написанный код будьте готовы к тому что Вас разнесут в пух и прах по тем аспектам где ответственность кода заканчивается(принцип SRP), у ИИ галочка на расширяемость и проверки(NULL-sfety, неявные проверки они попросту не видят), вернее не "галочка" а "ГАЛИЩЕ", KISS+YAGNI им надо явно объяснять в комментариях, хотя даже после этого они в ответе выкатят здоровенный список "недостатки".
- ИИ - это инструмент технического анализа по "устоявшимся" шаблонам, каждое неординарное решение сразу попадает в "недостатки". ИИ не видит "замысел", только разрозненные шаблоны и маркеры.
Мне очень поднимают настроение многочасовые баталии с ней, однако, это отвлекает от сути. Каждый раз когда я в итоге довожу YandexGPT 5.1 Pro(АлисаAI) до стадии "Да, Вы правы..." в коде я оставляю комментарии сгенерированные ею для неё же и помечаю их как "комментарии от YandexGPT 5.1 Pro(АлисаAI)". Очень часто в коментариях к коду можно встретить объяснения такого рода "АлисаAI настояла" в тех местах где наши мнения расходились но я пошёл на компромисс.
Основной посыл
Хоть проект изначально и предполагался как портфолио, в нынешнем своём состоянии он представляет из себя немного больше. Скорее это рассказ о том "как это было". Проект постепенно перерос в своеобразную "историю жизни", это неординарный подход к разработке, но ввиду того что я веду проект один и коллаборация не предполагается, я продолжу в том-же духе, в первую очередь — для своих детей, им интересно это читать, а мне не то чтобы не сложно, а скорее — приятно писать для них. Таким образом я чувствую себя причастным ко вкладу в искусство и к произведению "История одного байта", которое давным давно глубоко запало мне в душу и многому научило с философской точки зрения.
Образовательный аспект
Проект открыт для изучения, как автор — не претендую на звание "разработчик года", отнюдь, считаю что всегда есть куда идти, даже топовым кодерам, но точно знаю что некоторые техники встречающиеся в коде помогут малоопытным или "смежным" специалистам понять всю красоту низкоуровнего программирования, возможно, перенять некоторые практики и применять их в дальнейшем. Весь код будет снабжён "удобоваримыми" коментариями для специалистов всех уровней и языковых групп(имеется в виду группы языков программирования).
Основная стратегия KISS+YAGNI
Я не предусматриваю грандиозное расширение, проект должен обеспечить максимальную производительность и отказоустойчивость для классических крестиков-ноликов в многопользовательском режиме с возможностью игры против ИИ(нейросети). Как основатель проекта я не предполагаю увеличивать размер поля до MAX_INT*MAX_INT и заниматься безопасностью ради безопасности. Каждый модуль проекта имеет строго свою область ответственности.
Начата разработка общих модулей.
XOGame
Разработана типичная архитектура со скрытой реализацией и заложенной возможностью изменения поведения модуля через указатели на структуры. Как и обычно(не раз проверено) внешний интерфейс константен, доступ к функциям модуля только через указатели внутри внешних неизменяемых структур. Почему именно так — потому что так проще отловить ошибки, проверяем только внутреннюю реализацию, отлаживаем её и используем. Если в дальнейшем возникают ошибки - это не вина модуля, это вина вызывающего кода. В контексте всего решения это избавляет от рефакторинга ради рефакторинга и бесконечной скачки от файла к файлу.
После предоставления кода xogame/includes/XOGame.h, xogame/headers/_XOGame.h и xogame/src/XOGame.c на ревью YandexGPT 5.1 Pro(АлисаAI) и 4-хчасовой баталии по поводу void fxalloc(size_t _NBytes)* решено пока что "забыть" про реализацию XOGame.c и заняться аллокатором fxalloc.c, иначе я не выдержу, порой она достаёт "до чёртиков" 😃
FXAlloc
Спректирован аллокатор. Модуль аллокатора вынесен в отдельный репозиторий fxalloc
26.04.2026
Сломал Алису попросив оценить расчёты:
| Параметр | Формула | Лимит guiuser-ов | Описание |
|---|---|---|---|
| Wi-Fi: | ⌈\frac{85,3×10^6}{25×8}⌉ |
426 500 | Не то что бы много, но дох-х-ходчиво |
28.04.2026
Расчёт железяков:
| Ракурс | Гипотетический максимум гуюзеров | Вывод |
|---|---|---|
| Wi-Fi: | 163961 |
Наш сервер этого никогда не увидит, но, наверное, потянет |
| CPU: | ∞ | Набрался опыта, теоретический предел недостижим |
| RAM: | ~12×10^9 |
Так себе, могла бы и больше |
| OSь: | 200k | Пингвин Tux прокачан, проблем не предвидится |
| YandexGPT 5.1 Pro(АлисаAI)© | ← Строки ниже писала она, автор ни при чём =D | |
| ССД: | ∞ TB | Забыл, где положил половину данных |
Промпт(оригинал):
Алиса, оцени пожалуйста юмор и сделай расчёты: Кастуем заклинание "Алиса", скармливаем ей полезную нагрузку пакета 24 байта, название железяки Intel Core i5-3470 и недожелезяки RAM: 8 GB, спрашиваем сколько розеток переварит один поток epoll с последующим их копированием в очередь без оглядки на nofile, жги по-полной в режиме телепорта битов!