// ============== ICommand ================ void ICommand.Exec(IContextWritable context) { IGhostBWritable ghostB = context.CharactardsContainer.Get <IGhostBWritable>(); if (_isScared) { IPacManWritable pacman = context.CharactardsContainer.Get <IPacManWritable>(); ePacmanPosition pacmanPosition = Direction.getPacmanPosition(pacman.X, pacman.Y, ghostB.X, ghostB.Y); List <eDirection> directions = Direction.RunFromPacman(pacmanPosition); foreach (eDirection direction in directions) { if (context.Field.IsCanMove(ghostB.X, ghostB.Y, direction)) { _direction = direction; break; } } } else { bool isCanMove = context.Field.IsCanMove(ghostB.X, ghostB.Y, _direction); while (!isCanMove) { ChangeDirection(); isCanMove = context.Field.IsCanMove(ghostB.X, ghostB.Y, _direction); } } (int x, int y)nextPositon = Direction.GetNextPosition(ghostB.X, ghostB.Y, _direction); ghostB.UpdatePositionB(nextPositon.x, nextPositon.y); context.EventManager.Get <IPacManEventsWritable>().UpdateGhostBPosition(nextPositon.x, nextPositon.y); }
public static List <eDirection> FindPacman(ePacmanPosition pacmanPosition) { List <eDirection> parts = new List <eDirection>(); if (pacmanPosition == ePacmanPosition.UpUp) // upup // 1 { parts.Add(eDirection.UP); parts.Add(eDirection.LEFT); parts.Add(eDirection.RIGHT); } else if (pacmanPosition == ePacmanPosition.UpRight) //up right // 2 { parts.Add(eDirection.UP); parts.Add(eDirection.RIGHT); parts.Add(eDirection.DOWN); } else if (pacmanPosition == ePacmanPosition.RightRight) // right right // 3 { parts.Add(eDirection.RIGHT); parts.Add(eDirection.UP); parts.Add(eDirection.DOWN); } else if (pacmanPosition == ePacmanPosition.RightDown) // right down // 4 { parts.Add(eDirection.RIGHT); parts.Add(eDirection.DOWN); parts.Add(eDirection.LEFT); } else if (pacmanPosition == ePacmanPosition.DownDown) //down down // 5 { parts.Add(eDirection.DOWN); parts.Add(eDirection.RIGHT); parts.Add(eDirection.LEFT); } else if (pacmanPosition == ePacmanPosition.DownLeft) // down left // 6 { parts.Add(eDirection.DOWN); parts.Add(eDirection.LEFT); parts.Add(eDirection.UP); } else if (pacmanPosition == ePacmanPosition.LeftLeft) // left left // 7 { parts.Add(eDirection.LEFT); parts.Add(eDirection.DOWN); parts.Add(eDirection.UP); } else if (pacmanPosition == ePacmanPosition.LeftUp) // left up // 8 { parts.Add(eDirection.UP); parts.Add(eDirection.LEFT); parts.Add(eDirection.RIGHT); } return(parts); }
void IModelPacMan.UpdateGhostA(eDirection direction, bool isScared) { _ePacmanPosition = ePacmanPosition.DownDown; CreateAndExecuteTurn( (ITurn turn) => { CmdMoveGhostA cmdMoveGhostA = new CmdMoveGhostA(direction, _ePacmanPosition, isScared); turn.Push(cmdMoveGhostA); }); }
void IModelPacMan.UpdateGhostA() { _eDirectionGhostA = eDirection.DOWN; _ePacmanPosition = ePacmanPosition.DownDown; CreateAndExecuteTurn( (ITurn turn) => { CmdMoveGhostA cmdMoveGhostA = new CmdMoveGhostA(_eDirectionGhostA, _ePacmanPosition); turn.Push(cmdMoveGhostA); }); }
// ============== ICommand ================ void ICommand.Exec(IContextWritable context) { if (Constant.IsTwoPlayers) { IGhostAWritable ghostA = context.CharactardsContainer.Get <IGhostAWritable>(); bool isCanMove = context.Field.IsCanMove(ghostA.X, ghostA.Y, _direction); if (isCanMove) { (int x, int y)nextPositon = Direction.GetNextPosition(ghostA.X, ghostA.Y, _direction); ghostA.UpdatePositionA(nextPositon.x, nextPositon.y); context.EventManager.Get <IPacManEventsWritable>().UpdateGhostAPosition(nextPositon.x, nextPositon.y); } } else { IGhostAWritable ghostA = context.CharactardsContainer.Get <IGhostAWritable>(); IPacManWritable pacman = context.CharactardsContainer.Get <IPacManWritable>(); ePacmanPosition pacmanPosition = Direction.getPacmanPosition(pacman.X, pacman.Y, ghostA.X, ghostA.Y); List <eDirection> directions = new List <eDirection>(); if (_isScared) { directions = Direction.RunFromPacman(pacmanPosition); } else { directions = Direction.FindPacman(pacmanPosition); } foreach (eDirection direction in directions) { if (context.Field.IsCanMove(ghostA.X, ghostA.Y, direction)) { _direction = direction; break; } } (int x, int y)nextPositon = Direction.GetNextPosition(ghostA.X, ghostA.Y, _direction); ghostA.UpdatePositionA(nextPositon.x, nextPositon.y); context.EventManager.Get <IPacManEventsWritable>().UpdateGhostAPosition(nextPositon.x, nextPositon.y); } }
// ============== ICommand ================ void ICommand.Exec(IContextWritable context) { IGhostAWritable ghostA = context.CharactardsContainer.Get <IGhostAWritable>(); IPacManWritable pacman = context.CharactardsContainer.Get <IPacManWritable>(); ePacmanPosition pacmanPosition = Direction.getPacmanPosition(pacman.X, pacman.Y, ghostA.X, ghostA.Y); List <eDirection> directions = Direction.FindPacman(pacmanPosition); foreach (eDirection direction in directions) { if (context.Field.IsCanMove(ghostA.X, ghostA.Y, direction)) { _direction = direction; break; } } (int x, int y)nextPositon = Direction.GetNextPosition(ghostA.X, ghostA.Y, _direction); ghostA.UpdatePositionA(nextPositon.x, nextPositon.y); context.EventManager.Get <IPacManEventsWritable>().UpdateGhostAPosition(nextPositon.x, nextPositon.y); }
public static ePacmanPosition getPacmanPosition(int pacman_x, int pacman_y, int ghost_x, int ghost_y) { ePacmanPosition pacmanPosition = ePacmanPosition.DownLeft; if (pacman_x == ghost_x && pacman_y > ghost_y) // upup // 1 { pacmanPosition = ePacmanPosition.UpUp; } else if (pacman_x > ghost_x && pacman_y > ghost_y) //up right // 2 { pacmanPosition = ePacmanPosition.UpRight; } else if (pacman_x > ghost_x && pacman_y == ghost_y) // right right // 3 { pacmanPosition = ePacmanPosition.RightRight; } else if (pacman_x > ghost_x && pacman_y < ghost_y) // right down // 4 { pacmanPosition = ePacmanPosition.RightDown; } else if (pacman_x == ghost_x && pacman_y < ghost_y) //down down // 5 { pacmanPosition = ePacmanPosition.DownDown; } else if (pacman_x < ghost_x && pacman_y < ghost_y) // down left // 6 { pacmanPosition = ePacmanPosition.DownLeft; } else if (pacman_x < ghost_x && pacman_y == ghost_y) // left left // 7 { pacmanPosition = ePacmanPosition.LeftLeft; } else if (pacman_x < ghost_x && pacman_y > ghost_y) // left up // 8 { pacmanPosition = ePacmanPosition.LeftUp; } return(pacmanPosition); }
// ======================================== public CmdMoveGhostA(eDirection direction, ePacmanPosition pacmanPosition, bool isScared) { _direction = direction; _pacmanPosition = pacmanPosition; _isScared = isScared; }
// ======================================== public CmdMoveGhostA(eDirection direction, ePacmanPosition pacmanPosition) { _direction = direction; _pacmanPosition = pacmanPosition; }