Skip to content

Repository files navigation

테라리움 : 방치형 성장 시뮬레이션

React와 Three.js를 활용하여 웹 기반으로 구현된 3D 방치형 생태계 육성 시뮬레이션 게임입니다. 이 몰입형 시뮬레이션에서 당신은 자신만의 작은 3D 테라리움을 조성하고, 다양한 생물과 식물을 추가하며 시간이 지남에 따라 생태계가 자체적으로 성장하고 변화하며 복잡한 상호작용을 펼치는 모습을 관찰할 수 있습니다.

실행 주소 : https://dev-canvas-pi.vercel.app/

🌟 주요 기능

  • 동적 3D 환경: Three.js를 사용하여 생동감 넘치는 테라리움과 그 안의 생명체들을 아름답게 시각화합니다. 사용자는 자유롭게 시점을 조작하며 생태계의 다양한 모습을 관찰할 수 있습니다.
  • 식물 시스템:
    • 성장과 생존: 식물은 햇빛, 물, 토양 비옥도에 따라 성장하며, 가뭄이나 해충, 그리고 주변 다른 식물과의 경쟁(타감 작용, 빛 경쟁) 등 다양한 환경 요인의 영향을 받습니다. 각 식물은 고유한 성장 특성과 환경 저항력을 가집니다.
    • 번식: 성숙한 식물은 주변에 씨앗을 퍼뜨려 새로운 세대를 이어갑니다.
    • 유전적 다양성: 성장 속도, 가뭄 저항력, 색상, 타감 물질 농도 및 반경 등 다양한 유전자를 가지며, 이는 자손에게 전달될 때 돌연변이가 발생하여 예측 불가능한 다양성을 만들어냅니다.
    • 수명과 자연 도태: 모든 식물은 정해진 수명이 있으며, 열악한 환경 조건에서는 일찍 죽음을 맞이할 수 있습니다.
  • 초식동물 시스템:
    • 에너지 관리 및 섭식: 생존과 번식에 필요한 에너지를 식물을 섭취하여 얻습니다. 식물의 상태(건강, 해충 감염 여부)에 따라 얻는 에너지 양이 달라질 수 있습니다.
    • 지능적 행동 패턴: 식물을 찾아다니고, 포식자로부터 도망치며, 때로는 무리를 지어 이동합니다. 특히, 너무 뭉쳐있을 경우 포식자에게 취약해지는 것을 방지하기 위해 밀집도에 따라 흩어지려는 행동을 보입니다.
    • 유전적 특화: 이동 속도, 에너지 효율, 색상, 질병 저항력, 지배력 등 다양한 유전자를 통해 환경에 적응합니다.
    • 수명과 죽음: 에너지가 고갈되거나 수명이 다하면 죽음에 이릅니다.
  • 포식자 시스템:
    • 에너지와 사냥: 초식동물을 사냥하여 에너지를 얻습니다. 사냥 성공은 포식자의 사냥 기술, 은신 능력, 그리고 먹잇감의 상태에 따라 달라집니다.
    • 정교한 사냥 행동: 초식동물을 탐지하고, 은밀하게 접근하여 추적하고, 결정적인 순간에 공격합니다. 먹이가 부족할 경우 사냥 행동이 소극적으로 변할 수 있습니다.
    • 유전적 우위: 이동 속도, 에너지 효율, 사냥 기술, 은신 능력, 질병 저항력, 지배력 등 유전자를 통해 사냥꾼으로서의 능력을 강화합니다.
    • 수명과 죽음: 에너지 부족 또는 노화로 인해 죽습니다.
  • 물 시스템 (Water System):
    • 수원 (Water Sources): 테라리움 내에 수원지가 생성되며, 각 수원지는 한정된 양의 물을 가집니다.
    • 물 소비 및 보충: 식물과 동물 모두 생존을 위해 물을 소비합니다. 수원은 자연적으로 또는 강우 이벤트를 통해 보충됩니다.
    • 갈증 및 행동 변화: 동물들은 목마름을 느끼면 수원을 찾아 물을 마십니다. 식물의 성장 또한 물 접근성에 큰 영향을 받습니다.
  • 질병 시스템 (Disease System):
    • 발병 및 확산: 무작위로 다양한 질병(식물 마름병, 초식동물 독감, 포식자 광폭화 등)이 발생할 수 있으며, 근처 개체에게 전염될 수 있습니다.
    • 영향 및 저항력: 질병에 걸린 개체는 능력치가 감소하거나 행동이 변하며, 심지어 죽을 수도 있습니다. 각 개체는 유전적인 질병 저항력을 가집니다.
    • 면역: 질병에서 회복된 개체는 일정 시간 동안 해당 질병에 대한 면역력을 얻습니다.
  • 사회적 역학 및 영역 시스템 (Social Dynamics & Territory):
    • 지배력과 알파: 동물들은 '지배력 특성'을 기반으로 그룹 내에서 서열(알파, 베타, 단독)이 정해집니다. 알파 개체는 번식 등에서 이점을 가질 수 있습니다.
    • 알파 도전: 베타 또는 강력한 단독 개체는 알파 자리를 두고 기존 알파에게 도전할 수 있습니다. 이는 에너지 소모가 큰 위험한 행동입니다.
    • 영역 설정 및 방어: 포식자는 자신만의 영역을 설정하고, 주기적으로 순찰하며 영역을 표시합니다. 다른 포식자가 침입하면 영역 분쟁이 발생할 수 있습니다.
  • 환경 이벤트 및 사용자 개입:
    • 자연 발생 이벤트: 가뭄, 풍요로운 태양, 해충 발생, 폭우 등 예측 불가능한 이벤트가 생태계에 다양한 영향을 미칩니다.
    • 사용자 개입 액션: 사용자는 '폭우 내리기', '영양 공급', '햇빛 증폭', '곰팡이 창궐', '초식동물 전염병', '포식자 먹이 비효율', '포식자 경쟁 심화', '초식동물 번식 촉진', '긴급 먹이 공급', '생태계 회복 지원', '영양 대폭발' 등 다양한 액션을 통해 생태계에 직접 개입하여 위기를 극복하거나 특정 방향으로 유도할 수 있습니다.
  • 영양 순환:
    • 사체 분해: 죽은 생물은 시간이 지남에 따라 분해되어 사라집니다.
    • 비옥한 토양: 분해된 유기물은 그 자리에 비옥한 토양을 생성하여 주변 식물의 성장을 촉진합니다. 이 순환은 생태계의 지속 가능성에 중요한 역할을 합니다.
  • 시각적 경험:
    • 낮/밤 주기: 시간에 따라 배경색과 조명이 자연스럽게 변화하며 현실감을 더합니다.
    • 개체 상태 시각화: 해충에 감염된 식물, 병든 동물, 분해 중인 생물, 비옥화 효과를 받는 식물, 경쟁으로 억제된 식물, 물 부족에 시달리는 식물 등 다양한 상태가 시각적으로 표현됩니다.
    • 강우 효과: '폭우' 이벤트 시 사실적인 비 효과가 시각적으로 나타납니다.
  • 위임 모드 (Delegation Mode):
    • 활성화 시, 게임 시스템이 설정된 조건(예: 물 부족, 특정 종의 개체 수 위험 수준 도달 등)에 따라 자동으로 적절한 사용자 개입 액션을 발동시켜 생태계의 균형을 유지하려고 시도합니다. 이는 진정한 방치형 플레이를 가능하게 합니다.
  • 데이터 로깅 및 보고서:
    • 주기적으로 생태계의 주요 지표(개체 수, 평균 특성값, 질병 감염률 등)가 기록됩니다.
    • 사용자는 '생태 보고서'를 통해 이러한 역사적 데이터를 그래프로 확인하여 생태계 변화 추이를 분석할 수 있습니다.
  • 오프라인 진행: 브라우저를 닫았다가 다시 열어도 경과된 시간만큼 시뮬레이션이 진행되어, 사용자가 자리를 비운 동안에도 생태계는 계속해서 발전합니다.
  • 자동 저장: 게임 상태가 주기적으로 로컬 저장소에 자동 저장되어 진행 상황을 안전하게 보존합니다.
  • 게임 오버 조건: 식물, 초식동물, 포식자 중 어느 한 축이라도 완전히 멸종하면 게임 오버가 되며, 생존 시간과 최종 상태가 표시됩니다.

🛠️ 기술 스택

  • 프론트엔드: React (v19), TypeScript
  • 3D 렌더링: Three.js (r164+)
  • 상태 관리: React Hooks (useState, useEffect, useMemo, useCallback, useRef)
  • 차트: Chart.js (v4.x)
  • 스타일링: Tailwind CSS (CDN)
  • 기타: HTML5, CSS3, JavaScript (ESModules via importmap)

🚀 시작하기

  1. 프로젝트 파일을 다운로드합니다.
  2. 웹 브라우저에서 index.html 파일을 엽니다. (별도의 빌드 과정이나 로컬 서버 설정 없이 실행 가능)
    • index.html 내의 <script type="importmap">을 통해 React, Three.js, Chart.js 등의 주요 의존성을 CDN(esm.sh)에서 직접 로드합니다.

⚙️ 시뮬레이션 상세 정보

🌳 식물 (Plants)

  • 성장 기본: PLANT_GROWTH_RATE를 기반으로 하며, 유전 특성인 growthTrait에 의해 개별 성장 속도가 조절됩니다. PLANT_MAX_HEIGHT까지 자랄 수 있습니다.
  • 물 요구량: 성장을 위해서는 최소 PLANT_MIN_WATER_ACCESSIBILITY_FOR_GROWTH 이상의 물 접근성이 필요하며, 성장 시 PLANT_WATER_CONSUMPTION_FACTOR만큼 물을 소비합니다. droughtResistance 특성은 가뭄 시 생존력을 높여줍니다. 식물은 초당 PLANT_MAX_WATER_UPTAKE_PER_SECOND만큼 물을 흡수할 수 있습니다.
  • 번식 (Seeding): 성숙한 식물(isMature, PLANT_MATURITY_HEIGHT 이상)은 PLANT_SEEDING_CHANCE 확률로 씨앗을 퍼뜨립니다. 씨앗은 부모 주변 PLANT_SEED_SPREAD_RADIUS 내에 무작위로 생성되며, 자손은 부모의 유전 특성(색상 포함)을 MUTATION_FACTORPLANT_COLOR_MUTATION_RANGE에 따른 돌연변이와 함께 물려받습니다.
  • 상태 시각화 및 효과:
    • 해충 감염 (isPestInfested): '해충 발생' 이벤트 시 감염되며, 성장률이 감소하고 색상이 PLANT_SICKLY_COLOR로 변합니다. (PLANT_PEST_COLOR_LERP_FACTOR 적용)
    • 비옥화 효과 (isFertilizedByPatch): 주변 '비옥한 토양'의 영향을 받으면 성장 보너스(FERTILE_PATCH_GROWTH_BONUS)를 받고, 발광 효과(PLANT_FERTILIZED_EMISSIVE_INTENSITY, PLANT_FERTILIZED_COLOR_LERP_FACTOR)가 나타납니다.
    • 타감 작용 (Allelopathy): allelopathicStrength (양수: 촉진, 음수: 억제)와 allelopathicRadius 특성에 따라 주변 식물의 성장에 영향을 미칩니다. (범위: MIN_ALLELOPATHIC_STRENGTH ~ MAX_ALLELOPATHIC_STRENGTH, MIN_ALLELOPATHIC_RADIUS ~ MAX_ALLELOPATHIC_RADIUS)
    • 빛 경쟁: 키가 큰 식물(LIGHT_COMPETITION_HEIGHT_THRESHOLD_FACTOR 초과)은 주변(PLANT_BASE_RADIUS * LIGHT_COMPETITION_SHADING_RADIUS_FACTOR 반경 내)의 키 작은 식물에게 그늘을 드리워 성장을 억제합니다. 그늘의 강도는 키 차이와 growthTrait에 비례(LIGHT_COMPETITION_SHADE_STRENGTH_PER_UNIT_HEIGHT_DIFF)하며, 최대 MAX_COMPETITION_PENALTY까지 적용됩니다.
    • 경쟁 억제 상태 (isSuppressedByCompetition): 타감 작용이나 빛 경쟁으로 성장이 현저히 저해되면 이 상태가 되며, 색상이 PLANT_SUPPRESSED_TARGET_COLOR로 변합니다. (PLANT_SUPPRESSED_COLOR_LERP_FACTOR 적용)
    • 질병 감염 (isDiseased): 질병에 감염되면 성장 페널티를 받고, DISEASE_SICKLY_COLOR_PLANT 색상으로 변합니다.
    • 곰팡이 창궐 감염 (isAffectedByFungalOutbreak): '곰팡이 창궐' 이벤트 시 감염되면 성장 페널티 및 사망률이 증가하며, PLANT_FUNGAL_OUTBREAK_SICKLY_COLOR로 변합니다.

🦌 초식동물 (Herbivores)

  • 에너지: HERBIVORE_MAX_ENERGY까지 가질 수 있으며, 생존(HERBIVORE_IDLE_ENERGY_DECAY_RATE)과 이동(HERBIVORE_MOVE_ENERGY_COST) 시 에너지를 소모합니다. energyEfficiencyTrait 특성이 소모량에 영향을 줍니다.
  • 섭식: 에너지가 낮을 때 주변(HERBIVORE_EAT_RANGE 내) 식물을 섭취하여 HERBIVORE_EAT_ENERGY_GAIN만큼 에너지를 회복합니다. 섭취된 식물은 PLANT_EATEN_SIZE_REDUCTION만큼 크기가 줄어듭니다. 병들거나 약한 식물 섭취 시 에너지 획득량이 감소할 수 있습니다.
  • 도망 (isFleeingFrom): HERBIVORE_DETECTION_RANGE_PREDATOR 내에 포식자가 감지되면 도망칩니다. 포식자의 stealth 특성에 따라 감지 거리가 줄어들 수 있습니다.
  • 무리 짓기: 포식자가 없을 때 주변(HERBIVORE_GROUPING_RADIUS 내) 다른 초식동물과 함께 이동하려는 경향(HERBIVORE_GROUPING_STRENGTH)을 보입니다. 무리가 너무 빽빽해지면(HERBIVORE_DENSE_GROUP_THRESHOLD 초과 시), 각 개체는 HERBIVORE_DENSITY_AVOIDANCE_FACTOR에 따라 약간 흩어지려는 움직임을 보입니다.
  • 번식: 에너지가 HERBIVORE_REPRODUCTION_ENERGY_THRESHOLD 이상일 때 HERBIVORE_REPRODUCTION_CHANCE 확률로 번식하며, HERBIVORE_OFFSPRING_ENERGY_SHARE만큼의 에너지를 자손에게 전달합니다. 알파 개체는 번식 기회가 더 높을 수 있습니다.
  • 이동: HERBIVORE_MAX_SPEEDspeedTrait 특성에 기반한 속도로 이동합니다.
  • 수분 관리: MAX_HYDRATION까지 수분을 보유하며, 활동(HYDRATION_DECAY_RATE_ACTIVE)이나 휴식(HYDRATION_DECAY_RATE_IDLE) 시 수분을 소모합니다. 갈증 상태(SEEK_WATER_HYDRATION_THRESHOLD 미만)가 되면 물을 찾아 마십니다.
  • 질병 감염 (isDiseased, isAffectedByHerbivoreEpidemic): 질병에 감염되면 능력치 페널티를 받고, DISEASE_SICKLY_COLOR_ANIMAL 또는 HERBIVORE_EPIDEMIC_SICKLY_COLOR로 변합니다.
  • 더미 먹이 (isDummyForPredator): '긴급 먹이 공급' 이벤트 시 생성되는 임시 먹이로, 포식자에게 에너지를 제공합니다. (EMERGENCY_FOOD_DUMMY_DURATION_SECONDS 동안 지속)

🐅 포식자 (Predators)

  • 에너지: PREDATOR_MAX_ENERGY까지 보유하며, 생존(PREDATOR_IDLE_ENERGY_DECAY_RATE)과 이동(PREDATOR_MOVE_ENERGY_COST) 시 에너지를 소모합니다. energyEfficiencyTrait 특성이 영향을 줍니다.
  • 사냥 (targetHerbivoreId): 에너지가 특정 임계값(PREDATOR_PASSIVE_HUNT_ENERGY_THRESHOLD_FACTOR * PREDATOR_MAX_ENERGY, 초식동물 수 PREDATOR_PASSIVE_HUNT_HERBIVORE_THRESHOLD 미만 시 더 높은 임계값 적용) 미만일 때, PREDATOR_HUNT_DETECTION_RANGE 내의 초식동물을 탐지하여 추적합니다. PREDATOR_ATTACK_RANGE 내에 들어오면 공격하며, 성공 시 PREDATOR_HUNT_ENERGY_GAIN만큼 에너지를 얻고 PREDATOR_HUNT_EXERTION_COST만큼 추가 에너지를 소모합니다. huntSkill 특성이 사냥 성공률 및 추적 속도에 영향을 줍니다.
  • 은신 (stealth): MIN_STEALTH_TRAIT ~ MAX_STEALTH_TRAIT 범위의 값을 가지며, 초식동물에게 감지될 확률을 낮춥니다.
  • 번식: 에너지가 PREDATOR_REPRODUCTION_ENERGY_THRESHOLD 이상이고, 초식동물과의 개체 수 비율이 적절할 때 PREDATOR_REPRODUCTION_CHANCE 확률로 번식하며, PREDATOR_OFFSPRING_ENERGY_SHARE만큼 에너지를 자손에게 전달합니다. 알파 개체는 번식 우선권을 가질 수 있습니다.
  • 이동: PREDATOR_MAX_SPEED, speedTrait, huntSkill 특성에 기반한 속도로 이동합니다.
  • 수분 관리: 초식동물과 동일한 메커니즘으로 수분을 관리합니다.
  • 영역 (Territory):
    • 알파 또는 단독 포식자는 PREDATOR_TERRITORY_DEFAULT_RADIUS 크기의 영역을 설정하려 시도합니다. 다른 영역과 최소 PREDATOR_TERRITORY_MIN_DISTANCE_FACTOR 배수만큼 떨어져야 합니다.
    • 영역을 가진 포식자는 주기적으로(PREDATOR_SCENT_MARK_INTERVAL_SECONDS) 순찰(PREDATOR_PATROL_RADIUS_FACTOR 내)하며 영역을 유지합니다.
    • 다른 포식자 침입 시 TERRITORY_DEFENSE_ENGAGE_CHANCE 확률로 방어하며, 분쟁 발생 시 TERRITORY_DISPUTE_ENERGY_COST를 소모합니다. 방어 시 TERRITORY_DEFENSE_SPEED_BOOST 효과를 받습니다.
    • 영역 분쟁 패배 시 영역을 잃을 수 있으며, 승리 시 지배력이 상승합니다. 영역 분쟁 후에는 TERRITORY_DISPUTE_COOLDOWN_SECONDS 동안 재분쟁이 불가합니다.
  • 사회적 행동 (Social Behavior):
    • 알파 도전: 베타 또는 강력한 단독 포식자는 알파에게 도전(ALPHA_CHALLENGE_INITIATE_CHANCE)할 수 있으며, 이는 ALPHA_CHALLENGE_RANGE_FACTOR 거리 내에서 발생합니다. 도전 시 ALPHA_CHallenge_ENERGY_COST를 소모합니다.
    • 도전 성공 여부는 지배력(ALPHA_CHALLENGE_DOMINANCE_WEIGHT), 에너지(ALPHA_CHALLENGE_ENERGY_WEIGHT), 나이(ALPHA_CHALLENGE_AGE_FACTOR_PEAK 근접도) 등을 종합하여 결정됩니다.
    • 알파 도전 후에는 ALPHA_CHALLENGE_COOLDOWN_SECONDS 동안 재도전이 불가합니다.
  • 질병 감염 (isDiseased): 질병(예: PREDATOR_RAGE)에 감염되면 행동 패턴이 변하거나 능력치 페널티를 받고, DISEASE_SICKLY_COLOR_ANIMAL로 변합니다.

🌍 환경 이벤트 (Environmental Events)

  • 주기적으로(EVENT_MIN_COOLDOWN_SECONDS 간격, EVENT_CHANCE_PER_GAME_MINUTE 확률) 다음 자연 이벤트 중 하나가 발생합니다:
    • 가뭄 (DROUGHT): DROUGHT_DURATION_SECONDS 동안 지속. 수원지 물 감소 및 충전 속도 저하, 식물 성장 저해.
    • 풍요로운 태양 (BOUNTIFUL_SUN): BOUNTIFUL_SUN_DURATION_SECONDS 동안 지속. BOUNTIFUL_SUN_ENERGY_INCREASE만큼 태양 에너지 증가, 식물 성장률 BOUNTIFUL_SUN_GROWTH_MULTIPLIER 배 증가.
    • 해충 발생 (PEST_INFESTATION): PEST_INFESTATION_DURATION_SECONDS 동안 지속. 식물들이 PEST_INFESTATION_AFFECT_CHANCE 확률로 감염.
    • 폭우 (HEAVY_RAIN): HEAVY_RAIN_DURATION_SECONDS 동안 지속. 수원지에 RAIN_EVENT_WATER_GAIN_TO_SOURCE만큼 물 공급.
  • 사용자 또는 위임 모드를 통해 다음과 같은 특수 이벤트/액션을 발동할 수 있습니다 (각각 고유 지속 시간 및 효과, AUTONOMOUS_*_COOLDOWN_SECONDS에 명시된 재사용 대기시간 적용):
    • 햇빛 증폭 (SUNSHINE_BURST): SUNSHINE_BURST_DURATION_SECONDS 동안 태양 에너지 SUNSHINE_BURST_ENERGY_INCREASE 증가, 식물 성장률 SUNSHINE_BURST_GROWTH_MULTIPLIER 배 증가.
    • 곰팡이 창궐 (FUNGAL_OUTBREAK): FUNGAL_OUTBREAK_DURATION_SECONDS 동안 식물들이 FUNGAL_OUTBREAK_INFECTION_CHANCE 확률로 감염. 감염된 식물은 성장률 FUNGAL_OUTBREAK_GROWTH_PENALTY 감소, 사망률 FUNGAL_OUTBREAK_MORTALITY_RATE_INCREASE 증가.
    • 초식동물 전염병 (HERBIVORE_EPIDEMIC): HERBIVORE_EPIDEMIC_DURATION_SECONDS 동안 초식동물들이 HERBIVORE_EPIDEMIC_INFECTION_CHANCE 확률로 감염. 에너지 소모율 HERBIVORE_EPIDEMIC_ENERGY_DRAIN_MULTIPLIER 배 증가, 속도 HERBIVORE_EPIDEMIC_SPEED_PENALTY 감소, 사망률 HERBIVORE_EPIDEMIC_MORTALITY_RATE_INCREASE 증가.
    • 포식자 먹이 비효율 (PREY_INEFFICIENCY): PREY_INEFFICIENCY_DURATION_SECONDS 동안 포식자의 사냥 시 에너지 획득량 PREY_INEFFICIENCY_ENERGY_GAIN_FACTOR 배 감소, 기본 에너지 소모율 PREY_INEFFICIENCY_PASSIVE_DECAY_MULTIPLIER 배 증가.
    • 포식자 경쟁 심화 (INTENSE_PREDATOR_COMPETITION): INTENSE_PREDATOR_COMPETITION_DURATION_SECONDS 동안 포식자 간 알파 도전 확률 INTENSE_PREDATOR_COMPETITION_CHALLENGE_CHANCE_MULTIPLIER 배, 영역 분쟁 확률 INTENSE_PREDATOR_COMPETITION_DISPUTE_CHANCE_MULTIPLIER 배 증가, 관련 에너지 소모 INTENSE_PREDATOR_COMPETITION_ENERGY_COST_MULTIPLIER 배 증가.
    • 초식동물 번식 촉진 (HERBIVORE_FERTILITY_BOOST): HERBIVORE_FERTILITY_BOOST_DURATION_SECONDS 동안 초식동물의 번식 확률 HERBIVORE_FERTILITY_BOOST_REPRODUCTION_CHANCE_MULTIPLIER 배 증가, 번식 필요 에너지 임계값 HERBIVORE_FERTILITY_BOOST_ENERGY_THRESHOLD_FACTOR 배 감소.
    • 긴급 먹이 공급 (EMERGENCY_PREDATOR_FOOD): 즉시 EMERGENCY_FOOD_DUMMY_COUNT 마리의 더미 초식동물을 생성. 각 더미는 EMERGENCY_FOOD_DUMMY_ENERGY_VALUE 에너지를 제공하며 EMERGENCY_FOOD_DUMMY_DURATION_SECONDS 동안 지속. (지속형 이벤트가 아님)
    • 생태계 회복 지원 (ECOSYSTEM_RESILIENCE_BOOST): ECOSYSTEM_RESILIENCE_BOOST_DURATION_SECONDS 동안 식물 성장 RESILIENCE_PLANT_GROWTH_BONUS_ADDITIVE 추가, 식물 번식률 RESILIENCE_SEEDING_MULTIPLIER 배 증가, 가뭄 저항력 RESILIENCE_DROUGHT_RESISTANCE_BONUS_ADDITIVE 추가, 수원지 회복률 RESILIENCE_WATER_RECHARGE_MULTIPLIER 배 증가. RESILIENCE_FERTILE_PATCH_COUNT 개의 비옥토 즉시 생성. 특정 조건 하에 동물 번식률(RESILIENCE_HERBIVORE_REPRO_MULTIPLIER_IF_LOW, RESILIENCE_PREDATOR_REPRO_MULTIPLIER_IF_LOW) 증가.
    • 영양 공급 (NUTRIENT_BOOST): NUTRIENT_BOOST_PATCH_COUNT 개의 비옥한 토양을 즉시 생성.
    • 영양 대폭발 (NUTRIENT_BLOOM): NUTRIENT_BLOOM_PATCH_COUNT 개의 비옥한 토양을 즉시 생성. '영양 공급'보다 효과가 강력함.

🍂 영양 순환 (Nutrient Cycling)

  • 분해 (isDecomposing, decompositionTimer): 수명이 다하거나 에너지가 고갈된 생물은 DECOMPOSITION_DURATION_SECONDS 동안 분해됩니다. 시각적으로 크기가 줄고 색이 CARCASS_COLOR로 변합니다.
  • 비옥한 토양 (FertilePatch): 완전히 분해된 생물은 그 자리에 FERTILE_PATCH_DURATION_SECONDS 동안 지속되는 비옥한 토양을 생성합니다. 최대 MAX_FERTILE_PATCHES 개까지 생성될 수 있습니다.
  • 효과: 비옥한 토양은 FERTILE_PATCH_EFFECT_RADIUS 내의 식물에게 FERTILE_PATCH_GROWTH_BONUS를 제공합니다.

🧬 유전 (Genetics)

  • 각 생물은 다양한 유전 특성(성장, 저항력, 속도, 효율, 사냥, 은신, 타감 물질 농도 및 반경, 질병 저항력, 지배력 등)을 가집니다.
  • 번식 시, 부모의 특성은 MUTATION_FACTOR에 따라 약간 변형되어 자손에게 전달됩니다. (예: MIN_GROWTH_TRAIT ~ MAX_GROWTH_TRAIT, MIN_SPEED_TRAIT ~ MAX_SPEED_TRAIT 등). 질병 저항력은 DISEASE_RESISTANCE_MUTATION_FACTOR, 지배력은 DOMINANCE_TRAIT_MUTATION_FACTOR의 영향을 받습니다.
  • 식물의 색상 또한 PLANT_COLOR_MUTATION_RANGE에 따라 변형됩니다.
  • 모든 유전 특성은 정의된 최소/최대값 사이로 유지됩니다 (예: MIN_DISEASE_RESISTANCE, MAX_DISEASE_RESISTANCE).

💧 물 시스템 (Water System)

  • 수원지: INITIAL_WATER_SOURCES_COUNT개의 수원지가 생성되며, 각 수원지는 고유한 반경(WATER_SOURCE_DEFAULT_RADIUS 기반), 최대 물 저장량(WATER_SOURCE_MAX_WATER_PER_RADIUS_UNIT * 반경), 기본 재충전율(WATER_SOURCE_DEFAULT_RECHARGE_RATE_PER_SECOND)을 가집니다.
  • 재충전: WATER_SOURCE_RECHARGE_INTERVAL_SECONDS마다 재충전됩니다. 가뭄 시 WATER_SOURCE_RECHARGE_DROUGHT_MULTIPLIER배, 폭우 시 WATER_SOURCE_RECHARGE_RAIN_MULTIPLIER배로 재충전율이 변경됩니다.
  • 갈증 및 섭취: 동물은 수분 SEEK_WATER_HYDRATION_THRESHOLD 미만 시 물을 찾으며, 수원지 근처(DRINKING_RANGE_FROM_SOURCE_EDGE)에서 DRINKING_DURATION_SECONDS 동안 물을 마셔 DRINKING_RECOVERY_RATE만큼 수분을 회복합니다. 마실 때 초당 WATER_CONSUMED_PER_DRINK_SECOND만큼 수원지 물이 감소합니다.

🦠 질병 시스템 (Disease System)

  • 발생: DISEASE_SPAWN_CHANCE_PER_GAME_MINUTE 확률로 새로운 질병이 발생하며, 최소 DISEASE_EVENT_MIN_COOLDOWN_SECONDS의 간격을 가집니다. 최대 MAX_PATIENT_ZEROS 마리의 초기 감염자가 발생할 수 있습니다.
  • 전파: 감염된 개체는 주변(DISEASE_SPREAD_RADIUS 내)의 다른 개체에게 BASE_DISEASE_SPREAD_CHANCE * (1 - 대상의 diseaseResistance) 확률로 질병을 전파합니다.
  • 효과 및 회복: 질병 효과는 DISEASE_EFFECT_BASE_DURATION_SECONDS 동안 지속되며, 각 질병 타입(DISEASE_DEFINITIONS 참고)에 따라 고유한 페널티(사망률 증가, 에너지 소모 증가, 성장/속도/번식 페널티 등)를 유발합니다. 회복 시 DISEASE_RECOVERY_IMMUNITY_DURATION_SECONDS 동안 해당 질병에 면역됩니다.

🌐 위임 모드 (Delegation Mode)

  • 목적: 사용자의 직접적인 개입 없이 생태계가 안정적으로 유지되도록 지원합니다.
  • 작동 방식: AUTONOMOUS_ACTION_CHECK_INTERVAL_SECONDS마다 생태계 상태를 점검하여, 설정된 조건과 각 액션의 재사용 대기시간(AUTONOMOUS_*_COOLDOWN_SECONDS)을 고려하여 적절한 사용자 개입 액션을 자동으로 발동합니다.
  • 주요 자동 액션 트리거 조건 예시:
    • 폭우: 수원지 총 물량이 AUTONOMOUS_LOW_WATER_THRESHOLD_RATIO 미만일 때.
    • 영양 공급: 식물 수가 AUTONOMOUS_LOW_PLANT_THRESHOLD 미만이거나 AUTONOMOUS_CRITICALLY_LOW_PLANT_THRESHOLD 미만이고 비옥토 수가 AUTONOMOUS_LOW_FERTILE_PATCH_THRESHOLD 미만일 때.
    • 영양 대폭발: 식물 수가 AUTONOMOUS_MODERATE_LOW_PLANT_THRESHOLD_FOR_BLOOM 미만이고 비옥토 수가 부족할 때.
    • 햇빛 증폭: 식물 수가 AUTONOMOUS_SUNSHINE_BURST_PLANT_COUNT_THRESHOLD 미만이고 태양 에너지가 AUTONOMOUS_SUNSHINE_BURST_SUN_ENERGY_THRESHOLD 미만일 때.
    • 곰팡이 창궐: 식물 수가 AUTONOMOUS_HIGH_PLANT_THRESHOLD를 초과할 때.
    • 초식동물 전염병: 초식동물 수가 AUTONOMOUS_HIGH_HERBIVORE_THRESHOLD를 초과하거나, 식물 대비 초식동물 비율(AUTONOMOUS_HERBIVORE_PLANT_RATIO_THRESHOLD)이 너무 높을 때.
    • 포식자 먹이 비효율: 포식자 수가 AUTONOMOUS_HIGH_PREDATOR_THRESHOLD를 초과하거나, 초식동물 대비 포식자 비율(AUTONOMOUS_HIGH_PREDATOR_RATIO_THRESHOLD)이 너무 높을 때.
    • 포식자 경쟁 심화: 포식자 수가 매우 많고 비율도 높을 때.
    • 초식동물 번식 촉진: 초식동물 수가 AUTONOMOUS_CRITICALLY_LOW_HERBIVORE_THRESHOLD 미만일 때.
    • 긴급 먹이 공급: 포식자 수가 AUTONOMOUS_CRITICALLY_LOW_PREDATOR_THRESHOLD 미만이고 먹이가 부족할 때.
    • 생태계 회복 지원: 식물 수가 AUTONOMOUS_CRITICAL_PLANT_THRESHOLD_FOR_RESILIENCE 미만이거나, 초식동물 수가 AUTONOMOUS_CRITICAL_HERBIVORE_THRESHOLD_FOR_RESILIENCE 미만일 때 등 심각한 위기 상황 시.

🕹️ 조작 및 상호작용

  • 좌측 제어판:
    • 위임 모드 토글: 위임 모드를 켜고 끌 수 있습니다.
    • 환경 조작 버튼: '폭우 내리기', '영양 공급', '영양 대폭발', '햇빛 증폭', '긴급 먹이 공급', '생태계 회복 지원' 액션을 수동으로 발동합니다. (각 액션은 재사용 대기시간이 있을 수 있으며, 다른 주요 이벤트 발생 중에는 비활성화될 수 있습니다.)
    • 생태계 조절 버튼: '곰팡이 창궐', '초식동물 전염병', '포식자 먹이 비효율', '포식자 경쟁 심화', '초식동물 번식 촉진' 액션을 수동으로 발동합니다.
    • 게임 초기화 버튼: 모든 진행 상황을 초기화하고 게임을 처음부터 다시 시작합니다. (확인 창 표시)
  • 우측 정보 패널:
    • 테라리움 현황: 현재 식물, 초식동물, 포식자 수, 수원 총량, 태양 에너지, 비옥토 수, 게임 시간, 현재 환경 이벤트 및 남은 시간을 표시합니다.
    • 선택된 개체 정보: 3D 뷰에서 개체를 클릭하면 해당 개체의 상세 정보(ID, 타입, 나이, 에너지, 수분, 행동 상태, 유전 특성, 질병 상태, 사회적 지위, 영역 정보 등)를 상세히 보여줍니다.
  • 3D 뷰 및 상단:
    • 3D 뷰 조작: 마우스를 사용하여 시점을 회전, 확대/축소, 이동할 수 있습니다.
    • 개체 선택: 3D 뷰 내의 식물이나 동물을 클릭하여 선택하고 정보를 확인할 수 있습니다.
    • 생태 보고서 버튼: 클릭 시 모달 창을 통해 시간에 따른 생태계의 주요 지표 변화를 그래프로 확인할 수 있는 '생태계 변화 보고서'를 엽니다.
  • 게임 팁: 좌측 상단에 주기적으로(TIP_ROTATION_INTERVAL_MS) 유용한 게임 팁이 표시됩니다.
  • 게임 오버: 특정 종의 완전 멸종 등 게임 오버 조건 충족 시, 게임 오버 화면이 나타나며 생존 시간과 최종 개체 수 변화 그래프를 보여주고, 게임 재시작 옵션을 제공합니다.

📁 파일 구조

.
├── README.md               # 이 문서
├── index.html              # 메인 HTML 파일, 애플리케이션 컨테이너
├── index.tsx               # React 애플리케이션의 진입점 (DOM 렌더링)
├── App.tsx                 # 메인 React 컴포넌트, 게임 상태 관리 및 UI/UX 총괄
├── metadata.json           # 프로젝트 메타데이터 (Frame 컨텍스트용)
├── types.ts                # TypeScript 타입 정의 (개체, 상태, 이벤트 등)
├── constants.ts            # 게임 내 사용되는 모든 상수, 초기값, 설정값 정의
├── services/
│   └── storageService.ts   # 로컬 저장소를 이용한 게임 상태 저장 및 로드 로직
├── game/
│   ├── EcosystemView.tsx   # Three.js를 사용한 3D 렌더링 컴포넌트
│   └── engine/
│       └── simulation.ts   # 핵심 시뮬레이션 로직 (개체 업데이트, 상호작용, 이벤트 처리 등)
└── components/
    ├── ActionButton.tsx    # 공용 액션 버튼 UI 컴포넌트
    ├── InfoPanel.tsx       # 우측 정보 표시 패널 UI 컴포넌트
    ├── HistoricalDataChart.tsx # 차트 생성 및 표시 컴포넌트 (Chart.js 래퍼)
    ├── EcosystemReportModal.tsx # 생태 보고서 모달 UI 컴포넌트
    ├── ConfirmationModal.tsx  # 확인/취소 모달 UI 컴포넌트 (게임 초기화 등)
    └── icons/              # UI에 사용되는 다양한 SVG 아이콘 컴포넌트들
        ├── PlantIcon.tsx
        ├── CreatureIcon.tsx
        ├── PredatorIcon.tsx
        ├── WaterIcon.tsx
        ├── DroughtIcon.tsx
        ├── SunIcon.tsx
        ├── BugIcon.tsx         # 비옥토 아이콘으로도 사용
        ├── ChartIcon.tsx
        ├── ResetIcon.tsx
        ├── SproutIcon.tsx      # 영양 공급 아이콘
        ├── BloomIcon.tsx       # 영양 대폭발 아이콘
        ├── MushroomIcon.tsx    # 곰팡이 창궐 아이콘
        ├── SickCreatureIcon.tsx # 초식동물 전염병 아이콘
        ├── HungryPredatorIcon.tsx # 포식자 먹이 비효율 아이콘
        ├── PredatorCompetitionIcon.tsx # 포식자 경쟁 심화 아이콘
        ├── HerbivoreFertilityIcon.tsx # 초식동물 번식 촉진 아이콘
        ├── EmergencyFoodIcon.tsx # 긴급 먹이 공급 아이콘
        └── EcosystemResilienceBoostIcon.tsx # 생태계 회복 지원 아이콘

🔮 향후 개선 사항 (제안)

  • 더 복잡한 유전 시스템: 우성/열성 유전자, 유전자 풀 개념 도입, 교배를 통한 특성 조합.
  • 다양한 생물 종 및 식물 종 추가: 각 종마다 고유한 특성, 상호작용, 생태적 지위 부여.
  • 계절 변화 및 기후 시스템: 온도, 습도 변화에 따른 생태계 영향.
  • 사용자 정의 가능한 환경 설정: 테라리움 크기, 초기 자원량 등 사용자 설정 기능.
  • 업적 및 퀘스트 시스템: 특정 목표 달성 시 보상 또는 새로운 기능 해금.
  • 향상된 AI 및 행동 패턴: 더욱 복잡하고 현실적인 동물 행동 로직.
  • 사운드 효과 및 배경 음악: 몰입감을 높이는 오디오 요소 추가.
  • 튜토리얼 또는 가이드 시스템: 신규 사용자를 위한 단계별 안내.
  • Terraforming 기능: 지형 높낮이 조절, 수원지 생성/제거 등 환경 직접 변경 기능.

이 README는 프로젝트의 현재 상태를 기준으로 작성되었으며, 기능이 추가되거나 변경됨에 따라 지속적으로 업데이트될 예정입니다.

About

3D 방치형 생태계 육성 시뮬레이션 게임

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages