Example #1
0
        public override Direction CalculateMoveDirection()
        {
            if (_ChangeDirectionTime < 0 || !AllowedDirections.Contains(_MoveDirection))
            {
                if (AllowedDirections.Count > 0)
                {
                    do
                    {
                        _MoveDirection = RandomUtils.GetRandomDirection();
                    } while (!AllowedDirections.Contains(_MoveDirection));
                }
                else
                {
                    _MoveDirection = Direction.None;
                }
                SetChangeDirectionTime();
            }

            return(_MoveDirection);
        }
Example #2
0
        public override Direction CalculateMoveDirection()
        {
            if (Keyboard.GetState().IsKeyDown(Keys.A))
            {
                DrawDirection = Direction.Left;
                if (AllowedDirections.Contains(Direction.Left))
                {
                    return(Direction.Left);
                }
            }
            if (Keyboard.GetState().IsKeyDown(Keys.S))
            {
                DrawDirection = Direction.Down;
                if (AllowedDirections.Contains(Direction.Down))
                {
                    return(Direction.Down);
                }
            }
            if (Keyboard.GetState().IsKeyDown(Keys.W))
            {
                DrawDirection = Direction.Up;
                if (AllowedDirections.Contains(Direction.Up))
                {
                    return(Direction.Up);
                }
            }
            if (Keyboard.GetState().IsKeyDown(Keys.D))
            {
                DrawDirection = Direction.Right;
                if (AllowedDirections.Contains(Direction.Right))
                {
                    return(Direction.Right);
                }
            }

            return(Direction.None);
        }
Example #3
0
 public override void Update(Microsoft.Xna.Framework.GameTime gameTime)
 {
     // Increment to next frame
     base.Update(gameTime);
     if (UserVisibleDirection == DrawDirection || MoveDirection == Direction.None || !AllowedDirections.Contains(MoveDirection))
     {
         Fire();
     }
 }
Example #4
0
        public override Direction CalculateMoveDirection()
        {
            //Set current cell Visit
            MapInfo.SetVisitTime(position);

            //Check visible user. If can see user "inform" all other tanks
            Vector2 userPos = MapInfo.GetUserVisiblePosition(position);

            if (userPos != Vector2.Zero)
            {
                MapInfo.SetUserPosition(userPos);
                UserVisibleDirection = AIUtils.GetMaxDirection(GetPosition - userPos);
            }
            else
            {
                UserVisibleDirection = Direction.None;
            }

            //Get User position. if == current lost user
            Vector2 userTankPosition = MapInfo.GetUserPosition();

            if (userTankPosition == position)
            {
                LostUserPosition();
            }

            if (MapInfo.UserDetected)
            {
                Vector2 difference = this.GetPosition - userTankPosition;
                if (SpriteUtils.IsYAxisFromDirection(_MoveDirection) && SpriteUtils.CoordinateEqualToZero((int)difference.Y) ||
                    !SpriteUtils.IsYAxisFromDirection(_MoveDirection) && SpriteUtils.CoordinateEqualToZero((int)difference.X))
                {
                    _MoveDirection = Direction.None;
                }

                if (!AllowedDirections.Contains(_MoveDirection))
                {
                    //Smart Algo Start
                    Direction maxD = AIUtils.GetMaxDirection(this.GetPosition - userTankPosition);
                    if (AllowedDirections.Contains(maxD))
                    {
                        _MoveDirection = maxD;
                    }
                    else
                    {
                        Direction minD = AIUtils.GetMinDirection(this.GetPosition - userTankPosition);
                        if (AllowedDirections.Contains(minD))
                        {
                            _MoveDirection = minD;
                        }
                        else
                        {
                            if (CurrentMissle == null || CurrentMissle.State == SpriteState.Destroyed)
                            {
                                _MoveDirection = maxD;
                            }
                            else
                            {
                                if (AllowedDirections.Count > 0)
                                {
                                    do
                                    {
                                        _MoveDirection = RandomUtils.GetRandomDirection();
                                    } while (!AllowedDirections.Contains(_MoveDirection));
                                }
                                else
                                {
                                    _MoveDirection = Direction.None;
                                }
                            }
                        }
                    }
                }
                //Smart Algo End
            }
            else
            {
                if (!AllowedDirections.Contains(_MoveDirection) || movedDistance > Default.CellSetting.CellSize.X)
                {
                    movedDistance  = 0;
                    _MoveDirection = MapInfo.GetOldestDirection(position, AllowedDirections);
                }
                movedDistance += speedValue;
            }


            return(_MoveDirection);
        }
Example #5
0
 public override void Update(Microsoft.Xna.Framework.GameTime gameTime, Microsoft.Xna.Framework.Rectangle clientBounds)
 {
     base.Update(gameTime, clientBounds);
     if (UserVisibleDirection == DrawDirection || MoveDirection != Direction.None && !AllowedDirections.Contains(MoveDirection))
     {
         Fire();
     }
 }