초파리를 훈련시켜서 3D 브라우저 탱크 게임을 하게 만들었다
I trained a fruit fly to play my 3D browser tank game
핵심 요약
124개의 초파리 뉴런 모델을 시뮬레이션하여 3D 탱크 게임을 직접 조종하게 만든 프로젝트입니다.
- 초파리 시뮬레이션 — 124개 뉴런과 1,106개 연결을 기반으로 탱크 조종 로직 구현함.
- 게임 조작 방식 — 조종대, 조준경, 사격 버튼 등을 초파리가 직접 조작하도록 설계됨.
- 개발 도구 — Claude와 Codex를 활용해 기존 탱크 게임 코드베이스에 시뮬레이션을 통합함.
- 웹 기반 데모 — Three.js와 TypeScript를 사용하여 브라우저에서 실시간 뉴런 활동 확인 가능함.

몇 주 전에 내가 만든 멀티플레이어 Three.js 탱크 게임인 Claude of Tanks를 올렸었지. 120개가 넘는 절차적 생성 차량에 장갑 시뮬레이션, 파괴 가능한 맵, 유도 미사일까지 다 때려 박은 게임이야.
그 뒤로 좀 병맛 섞인 포크 버전인 CoTFly를 작업 중인데, 이건 작은 탱크 헬멧을 쓴 초파리 한 마리가 미니어처 조종석에서 게임을 직접 조종하는 거야! 핸들을 돌리고, 조준경으로 목표를 잡고, 발사 버튼을 누르고, 탄종을 바꾸고, 장비 수리까지 다 한다고. 그냥 가만히 앉아서 파리의 신경 활동을 구경하면서 전투가 돌아가는 걸 볼 수 있어!
신경 시뮬레이션은 Fruitless의 축소된 MaleCNS 회로에서 확인된 초파리 뉴런 124개와 측정된 해부학적 연결 1,106개를 사용했어. 1ms 단위로 leaky integrate-and-fire 모델을 돌리면서 막 전위, 스파이크, 억제, 불응기를 추적하는 방식이지. P1 관련 개체군의 발화율이 모터 컨트롤러의 구동 게인을 조절하고, 별도의 24채널 순환 신경망이 목표물 방향이랑 장애물 입력을 받아서 조향, 스로틀, 발사 명령으로 바꿔주는 구조야. 역학이랑 게임 플레이 매핑은 이 게임에 맞춰서 특별히 개조했는데, 이게 진짜 존나 재밌어!!
파리가 탄 작은 조종석이 보일 텐데, 이게 사실 파리가 탱크를 조종하는 방식이야. 발사하려면 포탑 정렬이 돼야 하고 파리 앞다리가 조준이랑 발사 컨트롤러에 닿아야 해. 재장전할 때는 발사 버튼에서 손을 떼기도 하지. 탄약 선택이나 수리는 규칙 기반 로직을 따르고, 일반 게임 플레이랑 똑같이 자원 제한이랑 쿨타임도 적용돼.
15초짜리 설탕 자극도 추가했는데, 이게 신경 모델로 들어가는 입력을 바꿔서 컨트롤러의 교전 거리를 125m에서 70m로 줄여버려. 그래서 목표물에 더 바짝 다가가는 거지.
Three.js랑 TypeScript로 만들었고 브라우저에서 바로 돌아가! 탱크랑 맵을 고르고 테스트를 시작하면, 게임이 돌아가는 동안 개별 뉴런의 전압, 발화율, 스파이크 기록을 다 뜯어볼 수 있어. 물론 중간에 멈추거나 직접 탱크를 뺏어서 조종할 수도 있고.
기존 Claude of Tanks 코드베이스 위에 파리 시뮬레이션을 얹으려고 Claude랑 Codex를 썼어. 게임 자체에 이미 이동, 장갑, 탄도학, 탐지, 탄약, 수리 시스템이 다 구현돼 있어서, AI한테 파리 컨트롤러를 그 시스템들에 연결하고 조종석이랑 신경망 뷰어를 만들라고 시켰지. 작업 과정은 대충 이래. 앱을 켜서 실제 전투를 지켜보다가 AI한테 구체적인 수정 사항을 던지는 거지. "파리한테 핸들 달아줘", "발사하기 전에 다리가 버튼에 닿게 해", "재장전할 때는 버튼에서 손 떼", "조준할 때는 진짜 스코프 모드로 들어가게 해" 이런 식으로. 스크린샷으로 레이아웃이랑 애니메이션을 다듬고, 포탑 정렬이나 버튼 접촉 타이밍, 수동 조종 전환 같은 건 자동화된 체크로 검증했어. AI가 구현이랑 수정은 도와줬지만, 게임 플레이 중에는 로컬 신경 모델이랑 제어 로직만 돌아가니까 LLM 호출은 전혀 안 해.
데모: https://fly.kevinliu.studio/
코드: https://github.com/Kevin-Liu-01/CoTFly
회로 소스:

