내일배움캠프 TIL

본캠프 11/12 TIL

parkcw0325 2024. 11. 12. 20:40

오늘 배운 것: 스켈레톤 코드를 다운받아 이제 본격적인 텍스트 로그라이크 작업을 시작하였다.

 

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