TIL

내일배움캠프 2주차 목요일

news0516 2024. 11. 14. 20:41
class Player {
  constructor() {
    this.maxHp = 300; // 플레이어 최대 체력
    this.hp = this.maxHp; // 현재 체력
    this.p_strong = 15; // 기본공격력
    this.defensive = 5; // 방어력
    this.dodge = 0.3; // 회피율
    this.reviveitem = false; // 부활서 소유 상태


//////////////////////////////////////////////
revive() {
    if (this.hp <= 0 && this.reviveitem === true) {
      this.hp = this.maxHp;
      this.reviveitem = false;
      console.log('소유한 부활서가 사라지며 모든체력이 회복되고 재도전합니다.');
      readlineSync.question('아무키나 입력하세요.');
    }
  }


//////////////////////////////////////////////
const item10 = new Item(
      '[Mythic] 마법서',
      `"죽음에 달하는 피해를 입었을 때 플레이어가 모든 체력을 회복하고 스테이지에 재도전합니다. \n한개만 소유할 수 있습니다."`,
      (player) => {
        player.reviveitem = true;
      },
      0.01,
    );

부활 아이템 추가


import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';

///////////////////////////////////////////////

export async function report(totalTry, clearStage, entireClears, totalFails) {
									// 구현중
  console.clear();

  const __filename = fileURLToPath(import.meta.url);
  const __dirname = path.dirname(__filename);
  const reportPath = path.join(__dirname, 'reports', 'total_report.json');

  const reportData = {
    totalTry: totalTry,
    clearStage: clearStage,
    entireClears : entireClears,
    totalFails : totalFails
  }
  const saveData = JSON.stringify(reportData, null, 2);

  try {
    fs.writeFileSync(reportPath, saveData, 'utf-8');
  } catch (err) { 
    console.error("err : ", err);
  }

}

///////////////////////////////////////////////

let totalTry = 0; // 총 실행 횟수
let totalClears = 0; // 스테이지 클리어 수
let totalFails = 0; // 클리어 실패 수
let entireClears = 0; // 10 스테이지 클리어 수

() => {
  const reportDir = path.join(__dirname, 'reports');
  const reportData = {
    totalTry,
    totalClears,
    totalFails,
    entireClears,
  };
  const reportPath = path.join(reportDir, 'total_report.json');

  fs.writeFileSync(reportPath, JSON.stringify(reportData, null, 2), 'utf-8');
  //fs.writeFileSync를 사용, reportPath에 reportData 객체를 JSON 형식으로 ㄱ기록
};

 

아직 총 실행 횟수와 마지막 플레이의 클리어한 마지막 스테이지 표시만 구현

export function loadReport() {
    const __filename = fileURLToPath(import.meta.url);
  const __dirname = path.dirname(__filename);
  
  const reportPath = path.join(__dirname, 'reports', 'total_report.json');
  // 경로 생성 함수

  if (fs.existsSync(reportPath)) {
    const data = fs.readFileSync(reportPath, 'utf-8');
    const reportData = JSON.parse(data);

    console.log(chalk.yellowBright(`=== 게임 기록 ===`));
    console.log(`마지막 클리어 스테이지: ${reportData.clearStage}`);
    console.log(`총 게임 횟수: ${reportData.totalTry}`);
    console.log(`전체 스테이지 클리어 수: ${reportData.totalClears}`);
    console.log(`총 클리어 실패 수: ${reportData.totalFails}`);
    console.log(`===================`);
  } else {
    // 기록이 없으면
    // 기록을 함.
    console.log(chalk.red(`기록이 없습니다.`));
  }
}

server.js에서서 저장된 json파일을 불러와 로드하는 함수


이번주내 자세한 기록누적 구현을 위해 집중하여 개발 예정.
팀원들과 서로 구현한 기능, 오류를 공유하며 조금더 코드 흐름에 대한 이해도가 높아진듯하다.
다음주 월요일까지 할수있는 기능을 구현 후, 베이직반 과제 제출 예정