diff options
Diffstat (limited to 'kpacman/pacman.cpp')
-rw-r--r-- | kpacman/pacman.cpp | 147 |
1 files changed, 0 insertions, 147 deletions
diff --git a/kpacman/pacman.cpp b/kpacman/pacman.cpp deleted file mode 100644 index 40f60a8..0000000 --- a/kpacman/pacman.cpp +++ /dev/null @@ -1,147 +0,0 @@ -#include "pacman.h" -#include "board.h" - -Pacman::Pacman(Board *b) -{ - board = b; - setDemo(FALSE); - setAlive(0); - actualPosition = lastPosition = OUT; - mouthPosition = 0; - lastPix = 0; - maxPixmaps = 0; -} - -void Pacman::setMaxPixmaps(int max) -{ - if (actualDirection == X && lastPix >= 0) { - actualDirection = lastPix / (maxPixmaps/4); - if (max < maxPixmaps) - mouthPosition = 0; - else - mouthPosition = lastPix % (maxPixmaps/4); - maxPixmaps = max; - - lastPix = pix(); - - actualDirection = X; - } else - maxPixmaps = max; -} - -void Pacman::setAlive(int ticks) -{ - actualState = alive; - pauseDuration = ticks; - pause = 0; -} - -void Pacman::setPosition(int pos) -{ - board->reset(lastPosition, pacman); - actualPosition = lastPosition = pos; - board->set(actualPosition, pacman); - mouthPosition = 0; -} - -void Pacman::setDirection(int dir, bool forced) -{ - if (forced || - board->isWay(actualPosition, dir, empty) || - board->isWay(actualPosition, dir, tunnel)) { - if (dir == X) - lastPix = pix(); - actualDirection = dir; - nextDirection = X; - } else - nextDirection = dir; -} - -void Pacman::setDemo(bool yes) -{ - demo = yes; -} - -pacmanState Pacman::state() -{ - return actualState; -} - -int Pacman::position() -{ - return actualPosition; -} - -int Pacman::direction() -{ - return actualDirection; -} - -bool Pacman::move() -{ - if (pause-- > 0) - return FALSE; - else - pause = pauseDuration; - - if (actualDirection == X || actualPosition == OUT) - return FALSE; - - lastPosition = actualPosition; - - if (demo) { - int d = actualDirection; - - 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)) { - if (d != actualDirection) // if new actualDirection is not possible, - d = actualDirection; // try current actualDirection first. - else - d = rand() % 4; - } - - actualDirection = d; - actualPosition = board->move(actualPosition, actualDirection); - - } else { - - if (nextDirection != X) - if (board->isWay(actualPosition, nextDirection, empty) || - board->isWay(actualPosition, nextDirection, tunnel)) { - actualDirection = nextDirection; - nextDirection = X; - } - - if (board->isWay(actualPosition, actualDirection, empty) || - board->isWay(actualPosition, actualDirection, tunnel)) - actualPosition = board->move(actualPosition, actualDirection); - } - - if (actualPosition != lastPosition) { - board->reset(lastPosition, pacman); - board->set(actualPosition, pacman); - - if (++mouthPosition >= (maxPixmaps/4)) - mouthPosition = 0; - } - return TRUE; -} - -int Pacman::pix() -{ - if (actualPosition != OUT && maxPixmaps > 0) - switch (actualDirection) { - case N : return ((maxPixmaps/4)*0)+mouthPosition; - case E : return ((maxPixmaps/4)*1)+mouthPosition; - case S : return ((maxPixmaps/4)*2)+mouthPosition; - case W : return ((maxPixmaps/4)*3)+mouthPosition; - case X : return lastPix; - } - - return -1; -} - |