카테고리 없음

개인 과제 구현하기 240826

leswing 2024. 8. 26. 21:03

저번에 적어둔 주석을 바탕으로 그걸 코드로 변환하는 과정을 거치는데

 

이사람 또 논리연산자 실수함

const battle = async (stage, player, monster) => {
  let logs = [];

  // 이거 플레이어 또는 몬스터의 hp가 둘중 아무나 0보다 작아지면 반복문이 끝나야 하지 않을까?
  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}를 선택하셨습니다.`));

    // switch ~ case로 플레이어 몬스터 스탯 변경
    // 해당 switch는 server에 있는 switch문을 그냥 복사해서 약간만 수정
    // 안되면 말고 일단 이렇게 넣어두기
    switch (choice) {
      case '1':
        logs.push(chalk.yellow('몬스터를 공격합니다.'));
        // 공격 함수를 통해 player와 monster의 hp수치에 변동
        // 이게 player의 attack메서드를 통해 몬스터의 hp 변동을 어떻게 줘야할 지 모르겠음
        // 타격 대상의 hp를 요소로 받아서 진행

        monster.hp = player.attack(monster.hp);        
        logs.push(chalk.green(`공격에 성공해 ${player.atk}의 데미지를 주었습니다.`))

        player.hp = monster.attack(player.hp);
        logs.push(chalk.red(`몬스터의 반격으로 ${monster.atk}의 데미지를 받았습니다.`));
        break;
      case '2':
        logs.push(chalk.yellow('도망갑니다'));
        // 라운드가 넘어가는 상황
        // stage를 넘기는 방법도 있고
        // 몬스터의 hp를 0으로 해버릴 수 있지 않을까
        // 근데 왜 이거쓰면 플레이어 hp가 안바뀌냐? >> 이사람 또 논리연산자 실수함
        monster.hp = monster.hp - monster.hp

        break;
      default:
        logs.push(chalk.red('올바른 선택을 하세요.'));
         // 다시 입력받는 상태로 만들기
      // 이것도 뭐가 필요한지는 별도로 생각

      // 게임 종료가 되도 해당 로그를 좀 띄우고 싶은데 (hp - 수치 등)
      // settime으로 되나? 안되고
      // 왜 게임이 hp 0되면 바로 끝나지 
      // = startGame() 이 게임 로그인데 해당 로그가 hp가 0이 되면 나가리라서
      // 그러면 battle() 안에서 해당 정보를 완료하기? 아니면 안쪽 로그를 표기하고 끝
    }
  }
};

 

오늘 진행한 battle() 부분 함수고

 

export async function startGame() {
  console.clear();
  const player = new Player();
  let stage = 1;

  while (stage <= 10) {
    const monster = new Monster(stage);
    await battle(stage, player, monster);
    // battle 이라는 함수가 끝날 때 까지 비활성
    
    // 클리어 조건 플레이어 hp > 0 , 몬스터 hp <= 0
    // 아니면 도망이 성공하던가
    // 게임 종료 조건 플레이어 hp <= 0
    if (monster.hp <= 0 && player.hp > 0) {
      // 클리어시 추가 스펙
      player.hp = player.hp + 20;
      player.atk = player.atk + 5;
    } else if (player.hp <= 0) {
      // 이거 게임종료가 여러번 나와서 탈출 넣어야함
      break;
    }    
    // 스테이지 클리어 및 게임 종료 조건 << 힌트
    stage++;
    
  }
  
  if (stage <= 10) {
    console.log('클리어 실패!')
  } else if (stage === 11) {
    console.log('클리어를 축하드립니다!')
  } else {
    console.log('버그?')
  }
}

 

오늘 진행한 startGame();

 

마지막 논리연산자 stage = 11 로 해놔서 오류놨다가 어 하다가 

 

다시 === 로 바꿨습니다

 

언제쯤 이런 실수를 안해볼까