일단 새벽부터 정말 많은 일이 있었다..
로그가 자꾸 출력되지 않아서 이걸 해결 못하면 잠은 없다 선언하고 열심히 위치도 옮겨보고 별에 별걸 다 했을때쯤이미 시간이 많이 지나갔고
잠을 얼마 자지 못한 채 그대로 씻기만 하고 출석하기..
1시간 알고리즘(정신과 수련의 시간)의 시간을 가지고 10시쯤 강의가 있었는데
매 주 화 목요일 오전 10시 반부터 문승현 튜터님이 컴퓨터 공학과 관련된 내용의 수업을 강의를 해주신다고 한다.
안그래도 이대로만 가면 코딩만 공부한 취미생과 다른 점이 없어 따로 공부를 해야하나 했는데 다행이다.
하지만 어제는 하나하나 기록하면서 만들었는데 무슨 정신인지 기록을 안하면서 이것저것 바꿨다..
최대한 기억나는대로 적기!!
import chalk from 'chalk';
import readlineSync from 'readline-sync';
class Player {
constructor(player) {
this.name = '';
this.hp = 100;
this.attacks = 10;
this.defense = 5;
this.speed = 8;
this.inventory = [];
}
equip(item) {
this.inventory.push(item);
}
attack(monster, logs) {
const critical = 0.1;
const Cri = Math.random() < critical;
const damage = this.attacks - monster.defense;
const finalDamage = Cri ? damage * 2 : damage;
monster.hp -= finalDamage > 0 ? finalDamage : 1;
logs.push(chalk.green(`${this.name}이 ${finalDamage}${Cri ? ' (크리티컬!)' : ''} 쌘 공격!`));
}
}
class Monster {
constructor(stage) {
this.hp = stage * 10;
this.attacks = stage * 5;
this.defense = stage * 3;
this.speed = stage * 5;
this.name = `몬스터${stage}`;
}
attack(player) {
const damage = this.attacks - player.defense;
player.hp -= damage > 0 ? damage : 10;
console.log(`${this.name}가 ${damage} 공격!`);
return damage;
}
}
function displayStatus(stage, player, monster) {
console.log(chalk.magentaBright(`\n=== Current Status ===\n`));
console.log(
chalk.cyanBright(`\n | Stage: ${stage} \n`) +
chalk.blueBright(
`\n | 플레이어 정보 | 체력 ${player.hp} | 공격력 ${player.attacks} | 방어력 ${player.defense} | 스피드 ${player.speed} | 장비 ${player.inventory} \n`,
) +
chalk.redBright(
`\n | 몬스터 정보 | 체력 ${monster.hp} | 공격력 ${monster.attacks} | 방어력 ${monster.defense} | 스피드 ${monster.speed} \n`,
),
);
console.log(chalk.magentaBright(`\n=====================\n`));
}
function Turn(player, monster) {
const speedy = player.speed - monster.speed;
const probability = 0.5 + speedy * 0.1;
return Math.random() < probability ? 'player' : 'monster';
}
const battle = async (stage, player, monster) => {
let logs = [];
let turn = 0;
while (player.hp > 0 && monster.hp > 0) {
console.clear();
displayStatus(stage, player, monster);
logs.forEach((log) => console.log(log));
const turns = Turn(player, monster);
console.log(`턴: ${turns}`);
if (turn === 0) {
console.log(chalk.green(`\n1. 공격한다 2. 아무것도 하지않는다.`));
const choice = readlineSync.question(chalk.bgGray('선택'));
logs.push(chalk.green(`**** ${choice}를 선택 ****`));
switch (choice) {
case '1':
player.attack(monster, logs);
break;
}
if (monster.hp <= 0) {
console.log(`${monster.name} 처치!! 다음 스테이지!`);
player.hp += 50;
console.log(` 체력이 50 증가 !! 현재 체력 : ${player.hp} `);
logs.push(chalk.green(`${player.name}가 ${player.attacks} 공격!`));
break;
}
} else {
console.log(chalk.red(`${monster.name}의 턴.`));
const damage = monster.attack(player);
logs.push(chalk.red(`${monster.name} ${damage} 공격!`));
if (monster.hp > 0) {
logs.push(chalk.red(` 몬스터 공격 후 플레이어 체력 : ${player.hp}`));
} else {
console.log('몬스터의 체력이 0 이하입니다.');
}
if (player.hp <= 0) {
console.log(`으악`);
break;
}
}
turn = (turn + 1) % 2;
}
};
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);
stage++;
}
}
일단 어제와 추가된 점은 첫번째로 로그와 관련된 내용이다.
아무리 위치를 바꿔도 로그가 안나타나는 이유를 몰라 검색을 좀 많이 했는데 결국 구조를 이해하지 못한 나의 잘못이였고...
일단 해결은 해야하기에 이 위치 저 위치 바꿔보면서 어째어째 로그는 잘 나오게 되었다.
두번째는 클래스 안에 스피드 능력치를 넣고 스피드에 따른 턴을 부여하는 것!
원래는 무조건 1번을 누르면 내가 먼저 때리고 맞는 형식인데 이제 객체 안의 스피드의 값에 따라 누가 먼저 때릴지 결정한다.
여기까지가 어제부터 계속 수정한 결과인데 아직은 에러가 안뜬다.
내일까지 할 목록은 스킬과 장비 이 두가지만 하면 과제는 얼추 끝날 것 같다.
그냥 구현만 하고 제출하면 성의가 없으니 최대한 글씨 색갈도 바꾸고 로그도 최종적으로 잘 나오게 수정 할 예정
> 로그가 제일 문제다.