마지막 금요일날 구현한 기능
여러 확률 로직들을 적용해 보았다.
연속공격 기능
플레이어가 70% 확률로 공격을 두번 진행하고 30% 확률로 아무행동도 하지 않는 로직을 추가하였다.
ComboAttack() {
// 70% 확률로 두 번 공격, 30% 확률로 실패
const rand = Math.random(); // 0~1 사이의 랜덤 숫자 생성
if (rand <= 0.7) { // 70% 확률
const combodamage1 = this.attack(); // 첫 번째 공격
const combodamage2 = this.attack(); // 두 번째 공격
const totalDamage = combodamage1 + combodamage2; // 두 번의 공격을 합산
return totalDamage
} else { // 30% 확률로 실패
return 0;
}
else if (choice === '2') {
const playercomboAtk = player.ComboAttack();
if (player.hp > 0) {
monster.hp -= playercomboAtk;
if (playercomboAtk === 0) {
logs.push(chalk.yellow(`연속공격 실패! 몬스터에게 피해를 입히지 못했습니다!`));
} else {
logs.push(chalk.yellow(`연속공격 성공! 몬스터에게 ${playercomboAtk}만큼의 피해를 입혔습니다!`));
}
}
const MonsterAtk = monster.attack();
if (monster.hp > 0) {
player.hp -= MonsterAtk
logs.push(chalk.blueBright(`당신은 ${MonsterAtk}만큼의 피해를 받았습니다!!!`));
}
if (monster.hp <= 0) {
logs.push(chalk.red(`몬스터가 쓰러졌습니다!`));
return true; // 몬스터가 죽으면 true 반환
}
if (player.hp <= 0) {
logs.push(chalk.red(`플레이어가 쓰러졌습니다! 패배했습니다.`))
return false; // 플레이어가 죽으면 false 반환
}
악마의 포션기능
악마의 포션은 체력을 랜덤하게 회복시켜주지만 그에 따른 패널티로 플레이어의 공격력이 0.2 씩 감소한다 초반에 남용하게 되면 후반에 큰 패널티로 작용하게 된다
usePotion() {
// 포션을 사용할 때 랜덤으로 회복량을 결정
const uspt = Math.round(Math.random() * this.potion) + 15;
// 포션을 사용하면 공격력이 감소
this.atkPower -= 0.2;
// 체력을 회복하되, 최대 체력을 넘지 않도록 처리
if (this.hp < this.maxHp) {
this.hp += uspt;
return uspt; // 회복된 체력을 반환
}
}
else if (choice === '3') {
const playerPotion = player.usePotion();
if (playerPotion > 0) {
if (player.hp > player.maxHp) {
player.hp = player.maxHp
logs.push(chalk.yellow(`체력을 ${playerPotion}만큼 회복했지만, 최대체력 이상으로 회복할 수는 없습니다! - 공격력이 감소되었습니다.`));
} else {
logs.push(chalk.yellow(`악마의 포션을 사용하여 ${playerPotion}만큼의 체력을 회복했습니다! - 공격력이 감소되었습니다.`));
}
}
const monsterAtk = monster.attack();
if (monster.hp > 0) {
player.hp -= monsterAtk;
logs.push(chalk.blueBright(`당신은 ${monsterAtk}만큼의 피해를 받았습니다!!!`));
}
if (player.hp <= 0) {
logs.push(chalk.red(`플레이어가 쓰러졌습니다! 패배했습니다.`));
return false; // 플레이어가 죽으면 false 반환
}
반격하기 기능
사용 시 50% 확률로 적의 공격을 무효화하고 적의 공격데미지의 200퍼센트 만큼 반격한다.
초반에는 큰 메리트가 없지만 후반 적이 강해지면 강해질수록 운빨 한방을 노려볼수 있을 것이다.
else if (choice === '4') {
const rand = Math.random();
let mon1
let mon2
function counter() {
if (rand <= 0.5) {
mon1 = monster.attack(); // 몬스터의 기본 공격 피해를 받음
return mon1
} else {
mon2 = monster.attack() * 2; // 몬스터의 공격 피해 두 배
return mon2
}
}
let conterseed = counter();
if (conterseed = mon1) {
player.hp -= conterseed
logs.push(chalk.yellow(`반격에 실패하여 ${conterseed}만큼의 피해를 받았습니다!`));
} else if (conterseed = mon2) {
monster.hp -= conterseed
logs.push(chalk.yellow(`반격에 성공하여 몬스터에게 ${conterseed}만큼의 피해를 주었습니다!!`));
}
if (monster.hp <= 0) {
logs.push(chalk.red(`몬스터가 쓰러졌습니다!`));
return true; // 몬스터가 죽으면 true 반환
}
if (player.hp <= 0) {
logs.push(chalk.red(`플레이어가 쓰러졌습니다! 패배했습니다.`))
return false; // 플레이어가 죽으면 false 반환
확률 로직들은 확실히 다른 필수 기능들 보다 어려웠다. 하지만 직접 메모장에 생각을 적어두고 그것을 코드에 옮겨서
여러 시행착오 끝에 작동되는 장면을 느끼니 도파민이 나오는 기분을 느꼈다. 앞으로 강 튜터님의 말씀을 잘 기억해서
메모장을 애용할 것이다.
'내일배움캠프 TIL' 카테고리의 다른 글
본캠프 11/19 TIL (0) | 2024.11.20 |
---|---|
본캠프 11/18 TIL (0) | 2024.11.20 |
본캠프 11/14 TIL (0) | 2024.11.15 |
본캠프 11/13 TIL (0) | 2024.11.13 |
본캠프 11/12 TIL (0) | 2024.11.12 |