Exemple #1
0
            // ============== 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);
            }
Exemple #2
0
        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);
        }
Exemple #3
0
 void IModelPacMan.UpdateGhostA(eDirection direction, bool isScared)
 {
     _ePacmanPosition = ePacmanPosition.DownDown;
     CreateAndExecuteTurn(
         (ITurn turn) =>
         {
             CmdMoveGhostA cmdMoveGhostA = new CmdMoveGhostA(direction, _ePacmanPosition, isScared);
             turn.Push(cmdMoveGhostA);
         });
 }
Exemple #4
0
 void IModelPacMan.UpdateGhostA()
 {
     _eDirectionGhostA = eDirection.DOWN;
     _ePacmanPosition  = ePacmanPosition.DownDown;
     CreateAndExecuteTurn(
         (ITurn turn) =>
     {
         CmdMoveGhostA cmdMoveGhostA = new CmdMoveGhostA(_eDirectionGhostA, _ePacmanPosition);
         turn.Push(cmdMoveGhostA);
     });
 }
Exemple #5
0
            // ============== 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);
                }
            }
Exemple #6
0
            // ============== 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);
            }
Exemple #7
0
        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);
        }
Exemple #8
0
            // ========================================

            public CmdMoveGhostA(eDirection direction, ePacmanPosition pacmanPosition, bool isScared)
            {
                _direction      = direction;
                _pacmanPosition = pacmanPosition;
                _isScared       = isScared;
            }
Exemple #9
0
            // ========================================

            public CmdMoveGhostA(eDirection direction, ePacmanPosition pacmanPosition)
            {
                _direction      = direction;
                _pacmanPosition = pacmanPosition;
            }