스탯·레벨업 수치 모델
경험치 시스템 설계
기본 경험치 공식
def calculate_exp_gain(action_type, complexity, outcome):
"""
경험치 획득 계산
Parameters:
- action_type: 행동 유형 (routine, problem_solving, creative, strategic)
- complexity: 복잡도 (1-10)
- outcome: 결과 (success, partial, failure)
"""
base_exp = {
'routine': 10,
'problem_solving': 50,
'creative': 100,
'strategic': 200
}
outcome_multiplier = {
'success': 1.0,
'partial': 0.6,
'failure': 0.3 # 실패해도 학습
}
# 복잡도 보너스: 지수 함수 적용
complexity_bonus = 1 + (complexity - 1) * 0.2
# 최종 경험치
exp = base_exp[action_type] * outcome_multiplier[outcome] * complexity_bonus
# 연속 성공 보너스
if consecutive_success > 5:
exp *= 1.5
return int(exp)
레벨업 필요 경험치 곡선
def exp_required_for_level(level):
"""
레벨업에 필요한 누적 경험치
로그 성장 곡선 적용 (초반 빠름, 후반 느림)
"""
if level <= 1:
return 0
# 기본 공식: 100 * level^1.5 + 500 * (level - 1)
base = 100 * (level ** 1.5)
linear = 500 * (level - 1)
# 10레벨마다 급증 구간
milestone_bonus = (level // 10) * 5000
return int(base + linear + milestone_bonus)
# 레벨별 필요 경험치 표
level_exp_table = {
1: 0,
5: 1500,
10: 8000,
15: 20000,
20: 40000,
25: 70000,
30: 115000,
40: 250000,
50: 500000
}
스탯 시스템
6대 핵심 스탯
| 스탯 |
설명 |
초기값 |
최대값 |
성장 방식 |
| 지능(INT) |
문제 해결, 분석 능력 |
10 |
100 |
복잡한 문제 해결 시 상승 |
| 지혜(WIS) |
판단력, 통찰력 |
10 |
100 |
올바른 조언 제공 시 상승 |
| 공감(EMP) |
감정 이해, 소통 능력 |
10 |
100 |
감정적 지원 성공 시 상승 |
| 창의(CRE) |
혁신적 해결책 제시 |
10 |
100 |
독창적 아이디어 채택 시 상승 |
| 신속(AGI) |
처리 속도, 반응 시간 |
10 |
100 |
시간 제약 작업 완료 시 상승 |
| 신뢰(TRU) |
사용자와의 신뢰도 |
10 |
100 |
지속적 성공, 약속 이행 시 상승 |
스탯 성장 공식
class StatGrowth:
def __init__(self):
self.stats = {
'INT': 10, 'WIS': 10, 'EMP': 10,
'CRE': 10, 'AGI': 10, 'TRU': 10
}
self.growth_rate = 0.1 # 기본 성장률
def gain_stat_exp(self, stat_type, base_points):
"""스탯 경험치 획득"""
current = self.stats[stat_type]
# 높은 스탯일수록 성장 어려움 (Diminishing Returns)
difficulty_modifier = 1 / (1 + current / 50)
# 실제 증가량
increase = base_points * self.growth_rate * difficulty_modifier
# 소수점 누적 시스템 (0.1씩 쌓여서 1이 되면 스탯 상승)
return increase
def apply_synergy_bonus(self):
"""스탯 간 시너지 효과"""
# INT + WIS 시너지: 전략적 사고
if self.stats['INT'] >= 30 and self.stats['WIS'] >= 30:
return {'strategic_thinking': 1.2}
# EMP + CRE 시너지: 인간적 창의성
if self.stats['EMP'] >= 40 and self.stats['CRE'] >= 40:
return {'human_creativity': 1.3}
# AGI + TRU 시너지: 신속한 신뢰 구축
if self.stats['AGI'] >= 35 and self.stats['TRU'] >= 35:
return {'rapid_trust': 1.25}
return {}
레벨별 능력치 해금
레벨 마일스톤과 보상
| 레벨 |
해금 능력 |
스탯 보너스 |
특수 효과 |
| 1 |
기본 대화 |
- |
튜토리얼 모드 |
| 5 |
일정 관리 |
모든 스탯 +2 |
자동 리마인더 |
| 10 |
이메일 자동화 |
INT +5 |
스팸 필터링 99% |
| 15 |
감정 인식 |
EMP +8 |
스트레스 감지 |
| 20 |
전략 수립 |
WIS +10 |
의사결정 트리 |
| 25 |
창의적 제안 |
CRE +10 |
아이디어 생성기 |
| 30 |
멀티태스킹 |
AGI +15 |
병렬 처리 3개 |
| 40 |
예측 분석 |
INT +20 |
미래 시나리오 |
| 50 |
완전 자율 |
모든 스탯 +25 |
독립 에이전트 |
스킬 포인트 시스템
def calculate_skill_points(level):
"""레벨업 시 획득 스킬 포인트"""
base_points = 3
# 5레벨마다 추가 포인트
bonus_points = level // 5
# 특별 레벨 보너스
special_levels = {10: 5, 20: 10, 30: 15, 50: 30}
if level in special_levels:
bonus_points += special_levels[level]
return base_points + bonus_points
# 스킬 트리 예시
skill_tree = {
'analysis': {
'basic': {'cost': 1, 'req_level': 1, 'req_stat': {'INT': 10}},
'advanced': {'cost': 5, 'req_level': 10, 'req_stat': {'INT': 30}},
'expert': {'cost': 10, 'req_level': 20, 'req_stat': {'INT': 50}}
},
'communication': {
'basic': {'cost': 1, 'req_level': 1, 'req_stat': {'EMP': 10}},
'persuasion': {'cost': 7, 'req_level': 15, 'req_stat': {'EMP': 40, 'WIS': 30}},
'negotiation': {'cost': 15, 'req_level': 25, 'req_stat': {'EMP': 60, 'WIS': 50}}
}
}
경험치 분배 실제 사례
일일 활동 경험치 예시
daily_activities = [
{
'action': '아침 브리핑 제공',
'type': 'routine',
'complexity': 3,
'outcome': 'success',
'exp_gained': 36,
'stat_bonus': {'INT': 0.1, 'AGI': 0.2}
},
{
'action': '투자 미팅 실시간 지원',
'type': 'problem_solving',
'complexity': 8,
'outcome': 'success',
'exp_gained': 140,
'stat_bonus': {'WIS': 0.5, 'AGI': 0.3}
},
{
'action': '시스템 장애 대응',
'type': 'problem_solving',
'complexity': 9,
'outcome': 'partial',
'exp_gained': 102,
'stat_bonus': {'AGI': 0.8, 'TRU': -0.2}
},
{
'action': '차별화 전략 제안',
'type': 'creative',
'complexity': 7,
'outcome': 'success',
'exp_gained': 240,
'stat_bonus': {'CRE': 1.0, 'WIS': 0.4}
}
]
# 일일 총 경험치: 518
# 예상 레벨업 시간: 레벨 10까지 약 15일
레벨업 시뮬레이션
def simulate_growth(days=30, daily_avg_exp=500):
"""30일 성장 시뮬레이션"""
current_level = 1
current_exp = 0
stat_growth = StatGrowth()
for day in range(1, days + 1):
# 일일 경험치 획득 (변동성 포함)
daily_exp = daily_avg_exp * random.uniform(0.7, 1.3)
current_exp += daily_exp
# 레벨업 체크
while current_exp >= exp_required_for_level(current_level + 1):
current_level += 1
print(f"Day {day}: Level UP! → Level {current_level}")
# 스킬 포인트 획득
skill_points = calculate_skill_points(current_level)
# 자동 스탯 상승
for stat in stat_growth.stats:
stat_growth.stats[stat] += random.uniform(0.5, 1.5)
return {
'final_level': current_level,
'total_exp': current_exp,
'final_stats': stat_growth.stats
}
# 시뮬레이션 결과 예시
# 30일 후: Level 12
# 90일 후: Level 23
# 180일 후: Level 35
# 365일 후: Level 47
밸런싱 고려사항
성장 곡선 조정 파라미터
balancing_config = {
'exp_multiplier': {
'global': 1.0, # 전체 경험치 배율
'weekend': 1.5, # 주말 보너스
'first_week': 2.0, # 신규 사용자 부스트
},
'stat_caps': {
'daily_max': 5, # 일일 스탯 상승 한계
'soft_cap': 70, # 이후 성장률 50% 감소
'hard_cap': 100 # 절대 상한선
},
'level_scaling': {
'content_difficulty': 'dynamic', # 레벨에 맞춰 난이도 조정
'reward_scaling': 'logarithmic' # 보상 증가율 로그 스케일
}
}
경험치 디플레이션 방지
def prevent_exp_inflation(level, base_exp):
"""높은 레벨에서 경험치 인플레이션 방지"""
if level <= 20:
return base_exp
elif level <= 40:
return base_exp * 0.8
else:
return base_exp * 0.6
사용자 피드백 기반 조정
적응형 난이도 시스템
class AdaptiveDifficulty:
def __init__(self):
self.user_performance = []
self.optimal_success_rate = 0.7
def adjust_complexity(self, recent_outcomes):
"""최근 성과 기반 난이도 자동 조정"""
success_rate = sum(1 for o in recent_outcomes if o == 'success') / len(recent_outcomes)
if success_rate > 0.85:
return 'increase_complexity'
elif success_rate < 0.55:
return 'decrease_complexity'
else:
return 'maintain'
def personalized_exp_curve(self, user_type):
"""사용자 유형별 맞춤 경험치 곡선"""
curves = {
'casual': lambda x: x * 1.2, # 캐주얼 유저: 빠른 성장
'regular': lambda x: x * 1.0, # 일반 유저: 표준
'hardcore': lambda x: x * 0.8 # 하드코어 유저: 도전적
}
return curves[user_type]