개발일지공부아이디어
    • 3월
    • 2월
    • 1월
  • 2차 프로젝트 일지 - 5일차

    26. 3. 9.

  • 09

    26. 3. 9.

  • 2차 프로젝트 일지 - 4일차

    26. 3. 8.

  • 2차 프로젝트 일지 - 3일차

    26. 3. 7.

  • 06

    26. 3. 6.

  • 2차 프로젝트 일지 - 2일차

    26. 3. 6.

  • 05

    26. 3. 5.

  • 2차 프로젝트 일지 - 1일차

    26. 3. 5.

  • C++ 기본기 연습 프로젝트: 아이템 사전 프로그램

    26. 3. 4.

  • 03

    26. 3. 3.

  • C++ 기본기 연습 프로젝트: 카드 덱 브라우저

    26. 3. 2.

로딩 중...

2차 프로젝트 일지 - 5일차

2026. 3. 9.

5일차: 고도화, 난이도 조정

문제: 폭발 위험 지역으로의 의미없는 왕복운동

원인: 위험지역 평가 후(IsDangerNearbyCondition) 위험지역을 벗어나는 액션 노드(FleeFromDangerAction)의 FindEscapeDir 평가 과정에서:

  1. 위험지역이라도 경유 후 생존 가능하면 q.push(next)를 허용
  2. 상위 트리는 “위험이면 도망”을 매 틱 다시 평가 → 안전 지역 이동 요청 -> 재평가 -> 위험 경유 이동 -> 다시 안전 지역으로 도망 루프가 생김

해결:

  • FleeFromDangerAction은 함수 이름처럼 안전 지역 이동만 담당하도록 축소
  • 위험 지역 경유 및 활용은 별도 전술 노드로 분리(ExploitDanger)
    • 조건: 박스 기대 이득, 탈출 가능성, 폭발 타이밍 여유 등을 종합적으로 계산하도록
BTSelector(root)│├─[1] BTSequence(dangerSeq)|	├── IsDangerNearbyCondition|	└── BTSelector(dangerSel)|		├── ExploitDangerAction|		|	└── IsExplosionDangerAt() |		|		&& IsWorthPlacingBubbleAt() |		|			? RequestGenerateBubble() |		|			: 안전지역으로 탈출|		└── FleeFromDangerAction|			└── BFS로 인접한 안전지역 중 탐색 후 이동|├─[2] IsMovingCondition│└─[3] BTSelector(innerSel)	  ├─ AStarMoveAction - 부술 수 있는 최단거리 계산 후 이동	  └─ BTSequence(innerBoxSeq)		   ├── HasBubbleAmmoCondition		   └── PlaceBubbleNearBoxAction			    ├── 설치 위치가 아니면 한 칸 이동				└── 물풍선 설치 위치면 설치하기

Offensive/Defensive/OutsideArea 구분

  • movementTree
BTSelector(root)│├─[1] BTSequence(dangerSeq)│   ├── IsDangerNearbyCondition│   └── BTSelector(dangerSel)│       ├── ExploitDangerAction│       │   └── (위험지역 활용 가치 판단)│       │       - 현재 위험지역 + 설치 가치 있음 -> RequestGenerateBubble│       │       - 아니면 가치 높은 위험 타일로 1칸 이동 시도│       └── FleeFromDangerAction│           └── BFS로 안전지역 탈출(필요 시 제한적 위험 경유)│├─[2] IsMovingCondition│└─[3] BTSelector(innerSel)    ├─ BTSequence(offensiveApproachSeq)    │   ├── IsPlayerBubbleTrappedCondition(true)    │   ├── IsPlayerInAreaCondition(min = OFFENSIVE+1)    │   └── AStarMoveAction    │       └── trapped된 플레이어에게 offensiveArea까지 접근    │    ├─ BTSequence(tracingApproachSeq)    │   ├── IsPlayerBubbleTrappedCondition(false)    │   ├── IsPlayerInAreaCondition(min = TRACING_MIN)  // defensive 바깥    │   └── AStarMoveAction    │       └── tracingArea에서만 추적    │    └─ BTSequence(innerBoxSeq)        ├── HasBubbleAmmoCondition        └── PlaceBubbleNearBoxAction            ├── 설치 위치 아니면 1칸 이동            └── 설치 위치면 물풍선 설치
  • actionTree
BTSelector(root)│└─ BTSequence(defensiveCombatSeq)    ├── IsPlayerBubbleTrappedCondition(false)    ├── IsPlayerInAreaCondition(min = OFFENSIVE+1, max = DEFENSIVE)    ├── HasBubbleAmmoCondition    └── PlaceBubbleAction        └── defensiveArea에서만 설치
왼쪽 화살표다음 글이 없습니다.