|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <iostream>
|
|
#include <fstream>
|
|
#include <string>
|
|
#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 <climits>
|
|
#include <ctime>
|
|
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:
|
|
if (m.getMazeArray(x, y-1)!='-' && m.getMazeArray(x, y-1)!='|')
|
|
y--;
|
|
break;
|
|
case 80:
|
|
if (m.getMazeArray(x, y+1)!='-' && m.getMazeArray(x, y+1)!='|')
|
|
y++;
|
|
break;
|
|
case 75:
|
|
if (m.getMazeArray(x-1, y)!='-' && m.getMazeArray(x-1, y)!='|')
|
|
x--;
|
|
break;
|
|
case 77:
|
|
if (m.getMazeArray(x+1, y)!='-' && m.getMazeArray(x+1, y)!='|')
|
|
x++;
|
|
break;
|
|
}
|
|
|
|
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);
|
|
|
|
while(time(NULL) - start < 10 && g.getLoopGameBool() == true)
|
|
{
|
|
|
|
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();
|
|
}
|
|
|
|
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)
|
|
{
|
|
|
|
x = Ox;
|
|
y = Oy;
|
|
u.gotoXY(Ox,Oy);
|
|
u.changeColour(FOREGROUND_YELLOW);
|
|
cout << "p";
|
|
|
|
}
|
|
|
|
|
|
|
|
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:
|
|
if (m.getMazeArray(x, y-1)!='-' && m.getMazeArray(x, y-1)!='|')
|
|
y--;
|
|
break;
|
|
case 80:
|
|
if (m.getMazeArray(x, y+1)!='-' && m.getMazeArray(x, y+1)!='|')
|
|
y++;
|
|
break;
|
|
case 75:
|
|
if (m.getMazeArray(x-1, y)!='-' && m.getMazeArray(x-1, y)!='|')
|
|
x--;
|
|
break;
|
|
case 77:
|
|
if (m.getMazeArray(x+1, y)!='-' && m.getMazeArray(x+1, y)!='|')
|
|
x++;
|
|
break;
|
|
}
|
|
|
|
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)
|
|
{
|
|
|
|
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);
|
|
}
|
|
|
|
} |