Exemple #1
0
        private ForvardVectorMovingRange GetForwardForGost(AbstractGhost ghost)
        {
            ForvardVectorMovingRange res;

            if (ghost.Path == null)
            {
                res.VectorType = "Y";
                res.range      = 0;
                ghost.Dispose();
                GC.Collect();
                return(res);
            }
            if (ghost.Path.Count < 2)
            {
                res.VectorType = "Y";
                res.range      = 0;
                return(res);
            }
            if (ghost.Path.Count <= _pathIndex)
            {
                Grid.SetRow(ghost.Model, ghost.FieldPointNow.X);
                Grid.SetColumn(ghost.Model, ghost.FieldPointNow.Y);
                _pathIndex = 1;
            }
            double range = 50 * ImageCreator._scale;
            var    tmp   = ghost.FieldPointNow - ghost.Path[_pathIndex];

            if (tmp.Y == -1)//right
            {
                res.VectorType = "X";
                res.range      = -range;
            }
            else if (tmp.Y == 1)//left
            {
                res.VectorType = "X";
                res.range      = range;
            }
            else if (tmp.X == 1)//up
            {
                res.VectorType = "Y";
                res.range      = range;
            }
            else if (tmp.X == -1)//down
            {
                res.VectorType = "Y";
                res.range      = -range;
            }
            else
            {
                res.VectorType = "Y";
                res.range      = range;
            }
            ghost.FieldPointNow = ghost.Path[_pathIndex];
            _pathIndex++;
            Grid.SetRow(ghost.Model, ghost.FieldPointNow.X);
            Grid.SetColumn(ghost.Model, ghost.FieldPointNow.Y);
            return(res);
        }
Exemple #2
0
        private void GhostAnimationCoplete(AbstractGhost ghost, double time)
        {
            if (_pathIndex == 0)//ExitPoint
            {
                return;
            }
            var pacman = PacmanPosition?.Invoke(ghost);

            if (ghost.Path == null)
            {
                ghost.Dispose();
                GC.Collect();
            }
            if (_pathIndex < ghost.Path.Count)
            {
                MoveGost(ghost, ghost.Speed);
            }
            else
            {
                ghost.Behavior.Think(ghost, pacman);
                _pathIndex = 1;
                PointAnimationHelperNotify?.Invoke(ghost);
            }
        }