/* Name:Wong Pui Shan Sdutent ID:52611804 program: AScISD Name: HAR Chiu Kwong Samson Sdutent ID:52629360 program: AScISD Name: LAM Cheuk Man Sdutent ID:52621140 program: AScISD Name:KO Jeffrey KO Sdutent ID:525 695 30 program: AScISD */ #include #include #include #include "Utilities.h" #include "Game.h" #include "Ghost.h" #include "Pacman.h" #include "Maze.h" #include "FileIO.h" #include "FileIO.h" #include "Fruit.h" #include #include using namespace std; Pacman::Pacman(){ c = 'c'; x = 10; y = 9; Ox = 10; Oy = 9; } int Pacman::getPacmanX() { return x; } int Pacman::getPacmanY() { return y; } void Pacman::Move(Game &g, Maze &m,Utilities u, int &dot, Ghost &ga, Ghost &gb, Ghost &gc, Ghost &gd, Utilities &ud,Utilities &uc,Utilities &ub,Utilities &ua,Utilities &z, Fruit &fruit1, Utilities &f) { FileIO fileIO; u.gotoXY(x,y); u.changeColour(FOREGROUND_YELLOW ); cout << "p"; c = u.checkKey(); u.gotoXY(x,y); cout << " "; switch (c) { case 72: // Up arrow if (m.getMazeArray(x, y-1)!='-' && m.getMazeArray(x, y-1)!='|') y--; break; case 80: // Down arrow if (m.getMazeArray(x, y+1)!='-' && m.getMazeArray(x, y+1)!='|') y++; break; case 75: // Left arrow if (m.getMazeArray(x-1, y)!='-' && m.getMazeArray(x-1, y)!='|') x--; break; case 77: // Right arrow if (m.getMazeArray(x+1, y)!='-' && m.getMazeArray(x+1, y)!='|') x++; break; } // Move cursor to updated position unsigned int start = time(NULL); u.gotoXY(x,y); cout << "p"; if (m.getMazeArray(x, y)=='X') { m.setTotalDot(-1); m.setMazeArray(x, y,' '); g.setPoint(50); //loop the situstion that pacman eat the power dot while(time(NULL) - start < 10 && g.getLoopGameBool() == true) { //_sleep(80); fileIO.SaveGame (m, u, g); Pacman::OppositePosition(g, m, u, dot); ga.ChangePosition(); gb.ChangePosition(); gc.ChangePosition(); gd.ChangePosition(); ga.showGhost(ua); ga.slowMove(m, ua); gb.showGhost(ub); gb.slowMove(m, ub); gc.showGhost(uc); gc.slowMove(m, uc); gd.showGhost(ud); gd.slowMove(m, ud); g.Move(m, z); g.checkForUpLevel(m); Pacman::EatingGhost(ga, g, ua, u); Pacman::EatingGhost(gb, g, ub, u); Pacman::EatingGhost(gc, g, uc, u); Pacman::EatingGhost(gd, g, ud, u); fruit1.showFruit(g, dot, m, f); } ga.RechangePosition(); gb.RechangePosition(); gc.RechangePosition(); gd.RechangePosition(); } //Pacman eat the dots, power dot, and fruit and add the point else if (m.getMazeArray(x, y)=='.') { m.setTotalDot(-1); m.setMazeArray(x, y,' '); g.setPoint(10); dot ++; } else if (m.getMazeArray(x, y)=='!') { m.setMazeArray(x, y,' '); g.setPoint(100); } else if (m.getMazeArray(x, y)=='*') { m.setMazeArray(x, y,' '); g.setPoint(300); } else if (m.getMazeArray(x, y)=='#') { m.setMazeArray(x, y,' '); g.setPoint(500); } } void Pacman::Die(Utilities &u) { //reset the pacman when it is eaten x = Ox; y = Oy; u.gotoXY(Ox,Oy); u.changeColour(FOREGROUND_YELLOW); cout << "p"; } //For the status of eat power dot pacman void Pacman::OppositePosition(Game &g, Maze &m,Utilities u, int &dot) { u.gotoXY(x,y); u.changeColour(FOREGROUND_YELLOW); cout << "P"; c = u.checkKey(); u.gotoXY(x,y); cout << " "; switch (c) { case 72: // Up arrow if (m.getMazeArray(x, y-1)!='-' && m.getMazeArray(x, y-1)!='|') y--; break; case 80: // Down arrow if (m.getMazeArray(x, y+1)!='-' && m.getMazeArray(x, y+1)!='|') y++; break; case 75: // Left arrow if (m.getMazeArray(x-1, y)!='-' && m.getMazeArray(x-1, y)!='|') x--; break; case 77: // Right arrow if (m.getMazeArray(x+1, y)!='-' && m.getMazeArray(x+1, y)!='|') x++; break; } // Move cursor to updated position u.gotoXY(x,y); cout << "P"; if (m.getMazeArray(x, y)=='X') { m.setTotalDot(-1); m.setMazeArray(x, y,' '); g.setPoint(50); } else if (m.getMazeArray(x, y)=='.') { m.setTotalDot(-1); m.setMazeArray(x, y,' '); g.setPoint(10); dot ++; } else if (m.getMazeArray(x, y)=='!') { m.setMazeArray(x, y,' '); g.setPoint(100); } else if (m.getMazeArray(x, y)=='*') { m.setMazeArray(x, y,' '); g.setPoint(300); } else if (m.getMazeArray(x, y)=='#') { m.setMazeArray(x, y,' '); g.setPoint(500); } } void Pacman::EatingGhost(Ghost &ghost, Game &g, Utilities &a, Utilities &u) { //pacman eat the ghost and add point string charGhost = ghost.GetGhostMember(); if (ghost.GetGhostX() == x && ghost.GetGhostY() == y) { if(charGhost == "a") g.setPoint(800); else if(charGhost == "b") g.setPoint(400); else if(charGhost == "c") g.setPoint(200); else if(charGhost == "d") g.setPoint(100); ghost.ResetGhost(a); } }