FlyPet 3D — это Windows-приложение с виртуальным питомцем-мухой, поведение которой управляется упрощённой моделью мозга на основе данных коннектома дрозофилы FlyWire. Муха живёт на столе, исследует его, ест, пьёт, спит, чистится, пугается хлопушки и может делить стол с мухой второго игрока по прямому сетевому соединению.
Проект сочетает:
- WinForms-интерфейс и программный 3D-рендерер;
- LIF-симуляцию нейронной сети;
- загрузку CSV-данных коннектома;
- P2P-мультиплеер через TCP + TLS;
- сохранение профиля и состояния питомца.
-
Виртуальная муха-питомец
- голод, жажда, энергия, чистота;
- сон и бодрствование;
- поиск еды и воды;
- чистка лапок;
- реакция на угрозу и хлопок.
-
Нейросимуляция
- загрузка данных коннектома FlyWire;
- LIF-модель нейронов;
- роли нейронов: зрительные looming-нейроны, giant fiber, DNA, MDN, DNP09, DNG11, ESCW и др.;
- сигналы мозга влияют на повороты, движение, испуг, груминг и возбуждение.
-
3D-стол
- программный рендерер без внешних 3D-библиотек;
- вращение камеры, зум, сброс;
- переключение 3D/2D.
-
Инструменты
- наблюдение;
- фрукт;
- вода;
- мягкая кисть;
- хлопушка.
-
Мультиплеер на двоих
- прямой TCP + TLS;
- приглашение
flypet://...; - синхронизация положения мухи и действий на столе;
- у каждого игрока свой профиль и своя муха.
-
Профили
- отдельные сохранения для разных игроков;
- хранение в
%LocalAppData%\FlyPet.
- Windows 10/11 x64;
- .NET Framework 4.8;
- Visual Studio 2022 с workload .NET desktop development;
- .NET Framework 4.8 targeting pack;
- для сборки из командной строки — MSBuild или совместимый .NET SDK.
Проект настроен на:
TargetFramework:net48PlatformTarget:x64OutputType:ExeUseWindowsForms:true- точка входа:
FlyPet.Entry
- Откройте
FlyPet3D.sln. - Выберите конфигурацию
Releaseи платформуx64. - Соберите решение.
- Запустите
FlyPet3D.exe.
msbuild FlyPet3D.sln /p:Configuration=Release /p:Platform=x64или, если установлен .NET SDK и targeting pack:
dotnet build FlyPet3D.sln -c ReleaseПосле сборки исполняемый файл появится в bin\x64\Release\ или рядом с проектом в зависимости от конфигурации.
Для работы нейросимуляции нужны CSV-файлы коннектома, сжатые gzip.
Проект ожидает как минимум:
classification.csv.gzconnections_princeton.csv.gzconsolidated_cell_types.csv.gz
Дополнительно может использоваться:
neurons.csv.gzcoordinates.csv.gz— для координат нейронов в консольном бенчмарке.
В FlyPet3D.csproj эти файлы могут быть подключены как встроенные ресурсы:
<EmbeddedResource Include="FlyPet.Data.classification.csv.gz" LogicalName="FlyPet.Data.classification.csv.gz" />
<EmbeddedResource Include="FlyPet.Data.connections_princeton.csv.gz" LogicalName="FlyPet.Data.connections_princeton.csv.gz" />
<EmbeddedResource Include="FlyPet.Data.consolidated_cell_types.csv.gz" LogicalName="FlyPet.Data.consolidated_cell_types.csv.gz" />
<EmbeddedResource Include="FlyPet.Data.neurons.csv.gz" LogicalName="FlyPet.Data.neurons.csv.gz" />Если файлы не встроены в сборку, положите их рядом с .exe. Приложение также ищет classification.csv.gz вверх по дереву каталогов от папки запуска.
FlyPet3D.exe --verify-data verify.jsonКоманда запускает загрузку коннектома и записывает JSON с результатом проверки. Ожидаемые значения включают:
- около
139255нейронов; - около
3732460связей; 314looming-нейронов;- не менее
64мс биологического времени симуляции; - наличие спайков.
| Действие | Управление |
|---|---|
| Выбрать инструмент | 1–5 |
| Наблюдение | 1 или правая кнопка мыши |
| Фрукт | 2 |
| Вода | 3 |
| Кисть | 4 |
| Хлопушка | 5 |
| Применить инструмент на столе | левая кнопка мыши |
| Пауза | Space |
| Лампа / сон | L |
| Сбросить камеру | R |
| Переключить 3D/2D | F2 |
| Вращать камеру в 3D | средняя кнопка мыши + перетаскивание |
| Приблизить/отдалить | колесо мыши |
В 3D-режиме на столе можно вращать камеру и приближать её. В 2D-режиме доступны те же инструменты, но без объёмной камеры.
Мультиплеер рассчитан на двух игроков.
- Нажмите кнопку приглашения в главном окне.
- Укажите внешний IPv4-адрес или адрес VPN.
- Выберите TCP-порт, по умолчанию
47831. - Нажмите Открыть стол.
- Скопируйте приглашение вида:
flypet://<host>:<port>/<key>#<fingerprint>
- Вставьте полное приглашение
flypet://.... - Нажмите Присоединиться.
- Для игры через интернет порт должен быть открыт в брандмауэре и на роутере.
- Автоматического обхода NAT нет.
- Альтернатива — общий VPN.
- Соединение защищено TLS с самоподписанным сертификатом; отпечаток передаётся в приглашении.
- Если запускаете два окна на одной машине, используйте разные профили:
FlyPet3D.exe --profile Alice
FlyPet3D.exe --profile BobПо умолчанию данные хранятся в:
%LocalAppData%\FlyPet\
Для профиля:
%LocalAppData%\FlyPet\profiles\<profile>\profile.json
Сохраняются:
Idигрока;- имя мухи;
- состояние питомца: сытость, вода, энергия, чистота, возраст, количество приёмов пищи.
Сохранение выполняется периодически и при закрытии окна.
FlyPet3D.exe
FlyPet3D.exe --profile Alice
FlyPet3D.exe --preview
FlyPet3D.exe --render shot.png --scene table
FlyPet3D.exe --render shot.png --scene swatter
FlyPet3D.exe --render shot.png --scene peer
FlyPet3D.exe --render shot.png --scene orbit
FlyPet3D.exe --render shot.png --scene 2d
FlyPet3D.exe --verify-data verify.jsonПараметры:
| Параметр | Значение |
|---|---|
--profile <name> |
имя профиля |
--preview |
режим предпросмотра |
--render <file> |
сохранить кадр в PNG |
--scene <name> |
сцена для --render: table, swatter, peer, orbit, 2d |
--verify-data <file> |
проверить загрузку данных и записать JSON |
FlyPet3D.sln
FlyPet3D.csproj
app.config
app.ico
FlyPet/
Art.cs — 2D-графика и иконки
Brain.cs — фоновый поток нейросимуляции
Entry.cs — точка входа, разбор аргументов
FlyFrame.cs — сетевой кадр состояния мухи
Habitat.cs — главное окно
PeerSession.cs — P2P TCP/TLS-сессия
Pet.cs — состояние питомца
PlayerProfile.cs — профиль игрока
RoomDialog.cs — диалог мультиплеера
SceneEffect.cs — эффекты сцены
TableAction.cs — сетевое действие
TableCamera.cs — камера 3D
TableItem.cs — предмет на столе
TableScene.cs — программный 3D-рендерер
TableTool.cs — инструменты
World.cs — логика мира и поведения
NeuroFlyEngine/
BrainSignals.cs — выходные сигналы мозга
Edge.cs — синапс
FlyBrainEngine.cs — обёртка над симуляцией
LIFSim.cs — LIF-симуляция
Neuron.cs — нейрон
Program.cs — консольный бенчмарк
RawConnectomeLoader.cs — загрузка CSV.GZ
SignalBuilder.cs — преобразование активности в сигналы
System*/ — совместимость с .NET Framework 4.8
RawConnectomeLoaderчитаетclassification.csv.gz,connections_princeton.csv.gzиconsolidated_cell_types.csv.gz.LIFSimстроит разреженную матрицу связей и моделирует leaky integrate-and-fire нейроны.SignalBuilderпревращает частоты спайков вBrainSignals.Worldиспользует сигналы мозга для движения, поворотов, испуга, груминга и поиска еды.Habitatотображает мир и отправляет состояние мухи второму игроку черезPeerSession.TableSceneрисует 3D-стол программным растеризатором.
- Только Windows и .NET Framework 4.8.
- Только x64.
- Мультиплеер рассчитан на двух игроков.
- Нет автоматического NAT traversal.
- 3D-рендерер программный, поэтому производительность зависит от CPU.
- Данные коннектома не являются частью исходного кода, если не встроены в сборку.
- Проект не является медицинской или биологически точной моделью; это игровой питомец на упрощённой нейросимуляции.
Проект лицензрован под GPLv3.