오늘 배운 것: 스켈레톤 코드를 다운받아 이제 본격적인 텍스트 로그라이크 작업을 시작하였다.
11/18일까지 구현해야 하는 필수기능들로는
필수 구현
단순 행동 패턴 2가지 구현
공격하기
도망치기
플레이어 클래스에서 플레이어 스탯 관리하기
간단한 전투 로직 구현
플레이어 공격, 몬스터 피격
스테이지 클리어 시 유저 체력 회복
스테이지의 진행과 비례해서 몬스터의 체력과 공격력 증가 시키기
등이 있다.
오늘 구현한 기능으로는
플레이어와 몬스터 클래스에 체력과 기본 공격력을 설정 공격 매서드를 작성
class Player {
constructor() {
this.hp = 100;
this.atkPower = 20;
}
attack() {
// 플레이어의 공격
const attackdamage = Math.round(Math.random() * this.atkPower) + 5;
return attackdamage
}
}
class Monster {
constructor() {
this.hp = 100;
this.MonsterAtkPower = 10;
}
attack() {
// 몬스터의 공격
const MosterAttackdamage = Math.round(Math.random() * this.MonsterAtkPower) + 7;
return MosterAttackdamage
}
}
다음으로
battle함수에서 가한 피해만큼 플레이어와 몬스터의 서로의 체력이 감소되는 로직 구현
const battle = async (stage, player, monster) => {
let logs = [];
while (player.hp > 0 && monster.hp > 0) {
console.clear();
displayStatus(stage, player, monster);
logs.forEach((log) => console.log(log));
console.log(
chalk.green(
`\n1. 공격한다 2. 도망친다 `,
),
);
const choice = readlineSync.question('당신의 선택은? ');
logs.push(chalk.green(`${choice}를 선택하셨습니다.`));
if (choice === '1') {
const playerAtk = player.attack();
monster.hp -= playerAtk;
logs.push(chalk.yellow(`몬스터에게 ${playerAtk}만큼의 피해를 입혔습니다!`));
const MonsterAtk = monster.attack();
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 반환
}
}
};
마지막으로는
몬스터의 hp가 0이 되면 새로운 스테이지에서 새로운 몬스터를 소환
만약 플레이어의 hp가 0이 되면 게임오버 로그 출력 및 프로그램 종료
export async function startGame() {
console.clear();
const player = new Player();
let stage = 1;
while (stage <= 10) {
const monster = new Monster(stage);
const result = await battle(stage, player, monster);
if (result === false) {
console.clear();
console.log(chalk.red('게임 오버! 다시 도전해보세요.'));
// 플레이어가 죽으면 게임 종료
}
// 스테이지 클리어 및 게임 종료 조건
stage++;
}
console.log(chalk.green('게임이 종료되었습니다.'));
}
이렇게 세가지 기능들을 구현했다. 많이 어렵고 복잡해서 강의를 다시보고 인터넷으로 찾고 여러방법으로 진행하였지만
직접 이해한 내용들만 작성하였으니 다른 학습에는 큰 도움이 될 것이다
'내일배움캠프 TIL' 카테고리의 다른 글
본캠프 11/14 TIL (0) | 2024.11.15 |
---|---|
본캠프 11/13 TIL (0) | 2024.11.13 |
본캠프 11/05 TIL (0) | 2024.11.05 |
본캠프 11/04 TIL (0) | 2024.11.04 |
본캠프 11/01 TIL (0) | 2024.11.01 |