sword_game/include/SwordLogic.h
2026-02-04 12:49:42 +00:00

63 lines
1.5 KiB
C++

#pragma once
#include "Packet.h"
#include <cstdint>
#include <random>
class SwordLogic {
public:
// 강화 비용 계산
static uint64_t GetUpgradeCost(uint32_t currentLevel) {
// 0강은 무료
if (currentLevel == 0)
return 0;
// 레벨이 오를수록 비용 증가
return (currentLevel * 1000) + 500;
}
// 판매 가격 계산
static uint64_t GetSellPrice(uint32_t currentLevel) {
if (currentLevel == 0)
return 100;
// 성공 횟수에 비례하여 상승
return (currentLevel * 2000) + 1000;
}
// 강화 시도 결과 계산 (0: 파괴, 1: 성공, 2: 실패)
static uint8_t TryUpgrade(uint32_t currentLevel) {
// 최대 레벨 도달 시 실패 처리
if (currentLevel >= GameConfig::MAX_SWORD_LEVEL)
return 2;
static std::random_device rd;
static std::mt19937 gen(rd());
std::uniform_int_distribution<int> dis(1, 100);
int randVal = dis(gen);
// 확률 설정
int successProb = 0;
int destroyProb = 0;
if (currentLevel < 10) {
// 0~9강: 성공 확률 높음, 파괴 없음
// 90% ~ 45%
successProb = 90 - (currentLevel * 5);
destroyProb = 0;
} else {
// 10~19강: 성공 확률 낮음, 파괴 존재
// 40% ~ 4%
successProb = 40 - ((currentLevel - 10) * 4);
// 5% ~ 23%
destroyProb = 5 + ((currentLevel - 10) * 2);
}
// 성공
if (randVal <= successProb)
return 1;
// 파괴
if (randVal <= (successProb + destroyProb))
return 0;
// 실패
return 2;
}
};