diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2020-09-05 01:09:44 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2020-09-05 01:22:13 +0900 |
commit | 37aaa67152936f4fefff22d559c03e943a86ae69 (patch) | |
tree | ffffcd595eecef631bc1fc38922c63060aa175ea /kpacman/monster.cpp | |
parent | ac81a3c3e8d1a61fc2ff39da89c7c2ea290d5e34 (diff) | |
download | tdepacman-37aaa67152936f4fefff22d559c03e943a86ae69.tar.gz tdepacman-37aaa67152936f4fefff22d559c03e943a86ae69.zip |
Renamed kpacman -> tdepacman.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'kpacman/monster.cpp')
-rw-r--r-- | kpacman/monster.cpp | 262 |
1 files changed, 0 insertions, 262 deletions
diff --git a/kpacman/monster.cpp b/kpacman/monster.cpp deleted file mode 100644 index 2f402b4..0000000 --- a/kpacman/monster.cpp +++ /dev/null @@ -1,262 +0,0 @@ -#include "monster.h" -#include "board.h" - -Monster::Monster(Board *b, int mid) -{ - board = b; - ID = mid; - - setREM(0); - setHarmless(0, 0, 0); - setArrested(0, 0); - setFreedom(board->position(prisonexit)); - if (mid == 0) - setPrison(board->position(prisonentry)); - else - setPrison(board->position(monsterhome, mid)); - - actualPosition = lastPosition = OUT; - feetPosition = 0; - IQ = 0; - maxBodyPixmaps = 0; - maxEyesPixmaps = 0; -} - -void Monster::setMaxPixmaps(int maxBody, int maxEyes) -{ - if (feetPosition >= (maxBody/10)) - feetPosition = 0; - maxBodyPixmaps = maxBody; - maxEyesPixmaps = maxEyes; -} - -void Monster::setArrested(int ticks, int duration) -{ - actualState = dangerous; - pauseDuration = ticks; - pause = 0; - arrestDuration = arrestLeft = duration; - arrestPause = ticks; - harmlessLeft = 0; -} - -void Monster::setDangerous(int ticks, int iq) -{ - actualState = dangerous; - pauseDuration = ticks; - pause = 0; - dangerousPause = ticks; - harmlessLeft = 0; - IQ = iq; -} - -void Monster::setHarmless(int ticks, int hDuration, int wDuration) -{ - actualState = harmless; - pauseDuration = ticks; - pause = 0; - harmlessDuration = harmlessLeft = hDuration; - warningDuration = wDuration; -} - -void Monster::setREM(int ticks) -{ - actualState = rem; - pauseDuration = ticks; - pause = 0; -} - -void Monster::setPosition(int pos) -{ - board->reset(lastPosition, monster, ID); // reset old position on the board - actualPosition = lastPosition = pos; // set position of monster - board->set(actualPosition, monster, ID); - feetPosition = 0; -} - -void Monster::setPrison(int pos) -{ - prisonPosition = pos; -} - -void Monster::setFreedom(int pos) -{ - freedomPosition = pos; -} - -void Monster::setDirection(int dir) -{ - if (dir == X) - lastDirection = actualDirection; - actualDirection = dir; -} - -monsterState Monster::state() -{ - return actualState; -} - -int Monster::position() -{ - return actualPosition; -} - -int Monster::direction() -{ - return actualDirection; -} - -int Monster::id() -{ - return ID; -} - -bool Monster::move() -{ - if (arrestLeft > 1) - arrestLeft--; - - if (harmlessLeft > 0) { - harmlessLeft--; - if (harmlessLeft == 0 && actualState == harmless) { - actualState = dangerous; - pauseDuration = dangerousPause; - } - } - - if (pause-- > 0) - return FALSE; - else - pause = pauseDuration; - - if (actualPosition == OUT) - return FALSE; - - if (actualDirection == X) { - if (++feetPosition >= (maxBodyPixmaps/10)) - feetPosition = 0; - return TRUE; - } - - lastPosition = actualPosition; - int d = actualDirection; - - if (arrestLeft > 1) { // during the arrest, only up and down - if (!board->isWay(actualPosition, d, empty) && - !board->isWay(actualPosition, d, tunnel)) - d = board->turn(actualDirection); - } - - if (arrestLeft == 1) { // going out of the prison - if (((d == W || d == E) && - board->x(actualPosition) == board->x(freedomPosition)) || - ((d == S || d == N) && - board->y(actualPosition) == board->y(freedomPosition)) || - board->isWay(actualPosition, d, brick) || - board->isWay(actualPosition, d, prison)) { - d = board->closeup(actualPosition, d, freedomPosition); - } - while (board->isWay(actualPosition, d, brick) || - board->isWay(actualPosition, d, prison)) { - if (d == actualDirection) - d = rand() % 4; - else - d = actualDirection; - } - if (actualState == dangerous) - pauseDuration = dangerousPause; - - } - - if (arrestLeft == 0) - if (actualState == rem) { // on the way to prison - - d = board->closeup(actualPosition, d, prisonPosition); - - while (board->isWay(actualPosition, d, brick) || - board->isWay(actualPosition, d, prison)) { - if (d != actualDirection) // if new direction is not possible, - d = actualDirection; // try current direction first. - else - d = rand() % 4; - } - - } else { // dangerous or harmless movement - if (rand() % (int) ((190-IQ)/10) == 0) { - d = board->closeup(actualPosition, d, board->position(pacman)); - if (actualState == harmless) - d = board->turn(d); - } else - do // try new direction, but not the opposite - d = rand() % 4; // direction, to prevent hectic movement. - while (d == board->turn(actualDirection)); - - while ((!board->isWay(actualPosition, d, empty) && - !board->isWay(actualPosition, d, tunnel)) || - d == board->turn(actualDirection)) { - if (d != actualDirection) // if new direction is not possible, - d = actualDirection; // try current direction first. - else - d = rand() % 4; - } - } - - actualDirection = d; - actualPosition = board->move(actualPosition, actualDirection); - - if (arrestLeft == 1 && actualPosition == freedomPosition) - arrestLeft = 0; - - if (actualState == rem && actualPosition == prisonPosition) { - actualState = dangerous; - pauseDuration = arrestPause; - arrestLeft = arrestDuration+1; - actualDirection = S; - } - - if (actualPosition != lastPosition) { - board->reset(lastPosition, monster, ID); - board->set(actualPosition, monster, ID); - } - - if (++feetPosition >= (maxBodyPixmaps/10)) - feetPosition = 0; - - return TRUE; -} - -int Monster::body() -{ - if (actualState == rem || actualPosition == OUT) - return -1; - else - if (actualState == harmless) - if (harmlessLeft > warningDuration || - harmlessLeft % (int) (warningDuration/4.5) > (int) (warningDuration/9)) - return ((maxBodyPixmaps/10)*8)+feetPosition; - else - return ((maxBodyPixmaps/10)*9)+feetPosition; - else - return ((maxBodyPixmaps/10)*ID)+feetPosition; -} - -int Monster::eyes() -{ - if (actualState == harmless || actualPosition == OUT) - return -1; - else - switch (actualDirection) { - case N : return 0; - case E : return 1; - case S : return 2; - case W : return 3; - case X : switch (lastDirection) { - case N : return 0; - case E : return 1; - case S : return 2; - default : return 3; - } - default : return -1; - } -} - |