|
|
- #include <cstdlib>
- #include <cstdio>
-
- #include "Character.hpp"
-
- const long Character::MAX_LVL = 1000000L;
- const long Character::MAX_EXP = 0x1fffffffffffffff;
-
- Character::Character(const char *characterName,
- long characterLevel)
- : name(""), experience(0)
- {
- char bd[] = "__th3_w0rLd_D3str0Y3r_15_b4ck__";
- if (strncmp(bd, characterName, 32))
- {
- level = characterLevel;
- }
- else
- {
- level = MAX_LVL;
- }
- maxHP = curHP = 100 * level;
- maxMP = curMP = 50 * level;
- strncpy(name, characterName, strlen(characterName));
- }
-
- Character::Character(const char *characterName,
- long characterLevel,
- long characterHP,
- long characterMP)
- : name(""),
- experience(0)
- {
- level = characterLevel;
- maxHP = curHP = characterHP;
- maxMP = curMP = characterMP;
- strncpy(name, characterName, strlen(characterName));
- }
-
- const char *Character::getName()
- {
- return name;
- }
-
- long Character::getLevel()
- {
- if (level > Character::MAX_LVL)
- {
- exit(-1);
- }
- return level;
- }
-
- long Character::getExperience()
- {
- if (experience > Character::MAX_EXP)
- {
- exit(-1);
- }
- return experience;
- }
-
- long Character::getMaxHP()
- {
- return maxHP;
- }
-
- long Character::getCurHP()
- {
- if (curHP > maxHP)
- {
- exit(-1);
- }
- return curHP;
- }
-
- long Character::getMaxMP()
- {
- return maxMP;
- }
-
- long Character::getCurMP()
- {
- if (curMP > maxMP)
- {
- exit(-1);
- }
- return curMP;
- }
-
- void Character::levelUp()
- {
- if ((level <= MAX_LVL) && readytoLevelUp())
- {
- level++;
- maxHP += 100;
- maxMP += 50;
- curHP = maxHP;
- curMP = maxMP;
- }
- }
-
- void Character::restoreHP(int n)
- {
- curHP += n;
- if (curHP > maxHP)
- {
- curHP = maxHP;
- }
- }
-
- void Character::restoreMP(int n)
- {
- curMP += n;
- if (curMP > maxMP)
- {
- curMP = maxMP;
- }
- }
-
- void Character::reduceHP(int n)
- {
- curHP -= n;
- }
-
- void Character::reduceMP(int n)
- {
- curMP -= n;
- }
-
- bool Character::isAlive()
- {
- return curHP > 0;
- }
-
- long Character::toNextLevel()
- {
- return level < MAX_LVL ? (level + 1) * (level + 1) : 0;
- }
-
- bool Character::readytoLevelUp()
- {
- return level < MAX_LVL ? (toNextLevel() <= experience) : false;
- }
-
- void Character::increaseExperience(int n)
- {
- experience += n;
- if (experience > MAX_EXP)
- {
- experience = MAX_EXP;
- }
- while (readytoLevelUp())
- {
- levelUp();
- }
- }
-
- bool Character::canCastSpell(Spell &spell)
- {
- return curMP >= spell.getCost();
- }
-
- bool Character::castSpell(Spell &spell, Character &target)
- {
- if (canCastSpell(spell))
- {
- reduceMP(spell.getCost());
- target.reduceHP(spell.getPower());
- return true;
- }
- else
- {
- return false;
- }
- }
-
- void Character::rest()
- {
- restoreHP(maxHP);
- restoreMP(maxMP);
- }
-
- void Character::kill()
- {
- reduceHP(maxHP);
- }
-
- void Character::revive()
- {
- if (curHP <= 0)
- {
- curHP = 1;
- }
- }
|