오늘부터 개인 과제인
CMD 로그라이크 게임 만들기를 시작했다.
위와 같은 방식으로
유저는
공격, 연속 공격, 방어, 도망가기
가
가능하고,
몬스터는
공격
이 가능하다
(선택적으로 추가 기능 구현 해도 됨)
코드를 작성하면서
Monster 클래스를 상속 받아
Person 클래스를 만들면
코드의 재사용성이 높아지고,
확장성을 높일 수 있다는 사실을
알게 됐다.
그래서,
class Monster
{
~~~
}
class Person extends Monster
{
~~~~
}
형식으로 현재
기본 공격과 확률적으로 성공하는 도주 기능을 만들어줬다.
class Monster {
constructor(hp, minDamage, maxDamage) {
this._hp = hp;
this._minDamage = minDamage;
this._maxDamage = maxDamage;
}
set hp(value) {
this._hp = value;
}
get hp() {
return this._hp;
}
set minDamage(value) {
this._minDamage = value;
}
get minDamage() {
return this._minDamage;
}
set maxDamage(value) {
this._maxDamage = value;
}
get maxDamage() {
return this._maxDamage;
}
attack(value) {
let temp =
Math.floor(Math.random() * (this._maxDamage - this._minDamage + 1)) + this._minDamage;
value.hp -= temp;
return temp;
}
}
class Player extends Monster {
#runAwayProbability;
constructor(hp, minDamage, maxDamage, runAwayProbability) {
super(hp, minDamage, maxDamage);
this.#runAwayProbability = runAwayProbability;
}
set runAwayProbability(runAwayProbability) {
this.#runAwayProbability = runAwayProbability;
}
get runAwayProbability() {
return this.runAwayProbability;
}
runAway(turn) {
if (this.#Gambling(this.#runAwayProbability)) {
LogClass.print(chalk.green(`\n[${turn}] 도망을 시도했습니다\n`));
LogClass.print(chalk.yellow(`\n[${turn}] 도망쳤습니다!!\n`));
return true;
} else {
LogClass.push(chalk.green(`[${turn}] 도망을 시도했습니다\n`));
LogClass.push(chalk.yellow(`[${turn}] 실패했습니다...\n`));
}
}
#Gambling(probability) {
let coin = Math.random() * (100 - 1) + 1;
return coin < probability ? true : false;
}
}
아직은 미숙한 부분이 많지만...
차츰 성장해가면서 더 깔끔한 코드 구현이 가능해질거라 믿는다...
'Challenge' 카테고리의 다른 글
CMD 게임 만들기 3Days (0) | 2024.08.23 |
---|---|
CMD 게임 만들기 2Days (0) | 2024.08.22 |
2-5 Challenge 유효한 괄호 (0) | 2024.08.20 |
2-4 Challenge 두 수 선택 합 존재? (0) | 2024.08.20 |
2-3 Challenge 문자열 요약 (0) | 2024.08.20 |