let reward_type = {
heal: { id: 1, text: '체력 회복', count: -1 },
increase_hp: { id: 2, text: '체력 증가', count: -1 },
increase_atk: { id: 3, text: '공격력 증가', count: -1 },
increase_escape: { id: 4, text: '도망 성공 확률 증가', count: -1 },
get_multi_attack: { id: 5, text: '스킬-연속공격', count: 1 },
get_counter_attack: { id: 6, text: '스킬-반격', count: 1 },
get_auto_heal: { id: 7, text: '회복력 증가', count: -1 },
blank: { id: 8, text: '꽝', count: -1 },
increase_avoid: { id: 9, text: '회피율 증가', count: -1 },
increase_critical_rate: { id: 10, text: '치명타 확률 증가', count: 4 },
increase_critical_dmg: { id: 11, text: '치명타 데미지 증가', count: -1 }
}
key를 id로 만드는 것도 좋았을 것 같다.
나는 reward_type[0].id 처럼 쓰는게 더 직관적이라고 생각했다.
function selectReward(stage, player, monster) {
const reward_keys = Object.keys(reward_type);
let rewards = [];
let exist_nums = [];
const reward_len = 4;
//보상중복방지 부분
for (let i = 0; i < reward_len; i++) {
let rand = Math.floor(Math.random() * reward_keys.length);
if (!exist_nums.includes(rand)) {
let randomKey = reward_keys[rand];
if (reward_type[randomKey].count !== 0) {
rewards[i] = reward_type[randomKey];
exist_nums.push(rand);
} else if (reward_type[randomKey].count === 0) {
i--;
continue;
}
} else {
i--;
continue;
}
}
let reward_text = `보상목록 : `;
for (let i = 0; i < reward_len; i++) {
if (i < reward_len / 2) reward_text += `${i + 1}. ${rewards[i].text} `;
else reward_text += `${i + 1}. ???? `;
}
console.log(reward_text);
let reward_choice = readlineSync.question('보상 선택: ');
if (reward_choice < 1 || reward_choice > rewards.length) {
console.log('1번부터 4번 중에 골라주세요.');
reward_choice = readlineSync.question('보상 선택: ');
} else {
console.log(`획득 보상 : `, rewards[reward_choice - 1].text);
console.log(player.getReward(rewards[reward_choice - 1], stage));
if (rewards[reward_choice - 1].count > 0) reward_type[reward_choice - 1].count--;
}
}
🎁🪽🏥