Untitled
unknown
plain_text
a year ago
2.5 kB
7
Indexable
import Fighter from './Fighter'; import Energy from './Energy'; import getRandomInt from './utils'; import Race, { Elf } from './Races'; import Archetype, { Mage } from './Archetypes'; import SimpleFighter from './Fighter/SimpleFighter'; class Character implements Fighter { private _race: Race; private _archetype: Archetype; private _maxLifePoints: number; private _lifePoints: number; private _strength: number; private _defense: number; private _dexterity: number; private _energy: Energy; private name: string; constructor(name: string) { this._dexterity = getRandomInt(1, 10); this._race = new Elf(name, this.dexterity); this._archetype = new Mage(name); this._maxLifePoints = this._race.maxLifePoints / 2; this._lifePoints = this._maxLifePoints; this._strength = getRandomInt(1, 10); this._defense = getRandomInt(1, 10); this._energy = { type_: this._archetype.energyType, amount: getRandomInt(1, 10), }; this.name = name; } get race(): Race { return this._race; } get archetype(): Archetype { return this._archetype; } get lifePoints(): number { return this._lifePoints; } get strength(): number { return this._strength; } get defense(): number { return this._defense; } get dexterity(): number { return this._dexterity; } get energy(): Energy { return { ...this._energy }; } receiveDamage(attackPoints: number): number { const damage = attackPoints - this._defense; if (damage > 0) { this._lifePoints -= damage; } if (damage <= 0) { this._lifePoints -= 1; } if (this._lifePoints <= 0) { this._lifePoints = -1; } return this._lifePoints; } attack(enemy: Fighter | SimpleFighter): void { enemy.receiveDamage(this._strength); } levelUp(): void { this._maxLifePoints += getRandomInt(1, 10); this._strength += getRandomInt(1, 10); this._dexterity += getRandomInt(1, 10); this._defense += getRandomInt(1, 10); this._energy.amount = 10; if (this._maxLifePoints > this._race.maxLifePoints) { this._maxLifePoints = this._race.maxLifePoints; } this._lifePoints = this._maxLifePoints; } special(enemy: Fighter | SimpleFighter): void { const damageBuff = (Math.random() + 2).toFixed(2); enemy.receiveDamage(this._strength * Number(damageBuff)); console.log(`Critical Attack! ${damageBuff}x damage!`); } } export default Character;
Editor is loading...
Leave a Comment