Пример #1
0
 public void Spawn(Vector2f position, Vector2f direction, float speed, RectangleObject rectangleObject)
 {
     this.Position        = position;
     this.Direction       = direction;
     this.Speed           = speed;
     this.RectangleObject = rectangleObject;
 }
        public List <RectangleObject> LoadLevel(string levelName)
        {
            document.Load("LevelData.xml");
            XmlNode level = document.SelectSingleNode("//level/" + levelName);

            if (level == null)
            {
                throw new FileNotFoundException();
            }
            else
            {
                List <RectangleObject> bricks = new List <RectangleObject>();
                foreach (XmlNode node in level.ChildNodes)
                {
                    Vector2D        size     = new Vector2D(Double.Parse(node.Attributes.GetNamedItem("SizeX").Value), Double.Parse(node.Attributes.GetNamedItem("SizeY").Value));
                    Vector2D        position = new Vector2D(Double.Parse(node.Attributes.GetNamedItem("PositionX").Value), Double.Parse(node.Attributes.GetNamedItem("PositionY").Value));
                    RectangleObject brick    = new RectangleObject(size, int.Parse(node.Attributes.GetNamedItem("Life").Value));
                    brick.Rectangle.Position = position;
                    brick.Life = int.Parse(node.Attributes.GetNamedItem("Life").Value);
                    brick.ID   = int.Parse(node.Attributes.GetNamedItem("ID").Value);
                    //brick.Rectangle.FillColor = Color.White;

                    bricks.Add(brick);
                }
                return(bricks);
            }
        }
Пример #3
0
 public Ai(RectangleObject rectangleObject, CircleObject circleObject, Vector2f windowSize, Difficulty difficulty)
 {
     _rectangleObject = rectangleObject;
     _circleObject    = circleObject;
     _windowSize      = windowSize;
     _nextPosition    = windowSize.Y / 2;
     _difficulty      = difficulty;
 }
Пример #4
0
 private void RectangleMovement(RectangleObject rs, Keyboard.Key left, Keyboard.Key right, double elapsedTime)
 {
     if (Keyboard.IsKeyPressed(left))
     {
         rs.RectangleMovementLeft(elapsedTime);
     }
     else if (Keyboard.IsKeyPressed(right))
     {
         rs.RectangleMovementRight(elapsedTime, Program.windowSize.X);
     }
 }
Пример #5
0
 private void RectangleMovement(RectangleObject rs, Keyboard.Key up, Keyboard.Key down, double elapsedTime)
 {
     if (Keyboard.IsKeyPressed(up))
     {
         rs.RectangleMovementUp(elapsedTime);
     }
     else if (Keyboard.IsKeyPressed(down))
     {
         rs.RectangleMovementDown(elapsedTime, _windowSize.Y);
     }
 }
        public override void Update(RectangleObject player, double elapsedTime)
        {
            if (!_isBig)
            {
                _originalRectangleSizeX = player.Rectangle.Size.X;

                player.Rectangle.Size   = new Vector2D(_bigRectangleSizeX, player.Rectangle.Size.Y);
                player.Rectangle.Origin = new Vector2D(_bigRectangleSizeX / 2, player.Rectangle.Origin.Y);

                _isBig = true;
            }
        }
Пример #7
0
        private void Initialise(Ai.Difficulty difficultyLeft, Ai.Difficulty difficultyRight)
        {
            _window = new RenderWindow(new VideoMode((uint)_windowSize.X, (uint)_windowSize.Y), "PONG");
            _window.SetActive();

            _circlePosition = new Vector2f(_windowSize.X / 2, _windowSize.Y / 2);


            _rectangleObject1           = new RectangleObject(new Vector2f(_rectangleSizeX, _rectangleSizeY));
            _rectangleObject1.FillColor = Color.White;
            _rectangleObject1.Attach(new SoundObserver(_soundManager));
            _rectangleObject2           = new RectangleObject(new Vector2f(_rectangleSizeX, _rectangleSizeY));
            _rectangleObject2.FillColor = Color.White;
            _rectangleObject2.Attach(new SoundObserver(_soundManager));

            _circleObject = new CircleObject(_circleSize);
            _circleObject.Attach(new SoundObserver(_soundManager));
            _circleObject.FillColor = Color.White;


            _prefabPowerUps.Add(new SpeedDown(_circleObject));
            _prefabPowerUps.Add(new BiggerRectangleObject(_circleObject));
            _prefabPowerUps.Add(new BiggerRectangleObject(_circleObject));
            _prefabPowerUps.Add(new Disco(_circleObject));
            _prefabPowerUps.Add(new Disco(_circleObject));



            _circleObject.Position = _circlePosition;
            _circleObject.Update(0);


            _rectangleObject1.Position = new Vector2f(_rectanglePositionX, _windowSize.Y / 2);
            _rectangleObject2.Position = new Vector2f(_windowSize.X - _rectanglePositionX, _windowSize.Y / 2);

            _scoreLeftText          = new Text(_scoreLeft.ToString(), _font, _characterSizeScore);
            _scoreLeftText.Position = new Vector2f(_windowSize.X / 2 - _scoreLeftText.GetGlobalBounds().Width - 100, 100);

            _scoreRightText          = new Text(_scoreRight.ToString(), _font, _characterSizeScore);
            _scoreRightText.Position = new Vector2f(_windowSize.X / 2 + 100, 100);

            _middleLine          = new Text("I", _font);
            _middleLine.Position = new Vector2f(_windowSize.X / 2 - _middleLine.GetGlobalBounds().Width / 2, 0);
            while (_middleLine.GetGlobalBounds().Height < _windowSize.Y)
            {
                _middleLine.DisplayedString += "\n\nI";
            }

            _aiLeft  = new Ai(_rectangleObject1, _circleObject, _windowSize, difficultyLeft);
            _aiRight = new Ai(_rectangleObject2, _circleObject, _windowSize, difficultyRight);

            _nextPowerUps.Add(Random(0, _prefabPowerUps.Count));
        }
Пример #8
0
        public override void Update(RectangleObject player, double elapsedTime)
        {
            if (!_isSpeedDown)
            {
                _circleObject.AdditionalSpeed = _circleObject.AdditionalSpeed / 2 - _circleObject.Speed / 2;

                if (_circleObject.AdditionalSpeed < 0)
                {
                    _circleObject.AdditionalSpeed = 0;
                }

                _isSpeedDown = true;
            }
        }
        public void AddState(RectangleObject player, State state, double duration)
        {
            _stateActive[_states.FindIndex(x => x.ID == state.ID), _players.FindIndex(x => x.GetHashCode() == player.GetHashCode())] = duration;

            /*for (int i = 0; i < _states.Count; i++)
             * {
             *  for (int j = 0; j < _players.Count; j++)
             *  {
             *      if (state.ID == _states[i].ID && player.GetHashCode() == _players[j].GetHashCode())
             *      {
             *          _stateActive[i, j] = duration;
             *          return;
             *      }
             *  }
             * }*/
        }
Пример #10
0
        private void ReInitialisePlayerAndAI(Ai.Difficulty difficultyLeft, Ai.Difficulty difficultyRight)
        {
            _firstRectanglePositionY  = Program.windowSize.Y - _rectangleSizeY / 2 - 50;
            _secondRectanglePositionY = _firstRectanglePositionY + _rectangleSizeY * 2;

            if (difficultyLeft != Ai.Difficulty.None)
            {
                _player1 = new RectangleObject(new Vector2D(_rectangleSizeX, _rectangleSizeY), 0);
                _player1.Rectangle.Position = new Vector2D(Program.windowSize.X / 2, _firstRectanglePositionY);
            }
            else
            {
                _player1 = null;
            }

            if (difficultyRight != Ai.Difficulty.None)
            {
                _player2 = new RectangleObject(new Vector2D(_rectangleSizeX, _rectangleSizeY), 3);
                if (_player1 == null)
                {
                    _player2.Rectangle.Position = new Vector2D(Program.windowSize.X / 2, _firstRectanglePositionY);
                }
                else
                {
                    _player2.Rectangle.Position = new Vector2D(Program.windowSize.X / 2, _secondRectanglePositionY);
                }
            }
            else
            {
                _player2 = null;
            }

            _aiLeft  = new Ai(_player1, _circleObject, Program.windowSize, difficultyLeft);
            _aiRight = new Ai(_player2, _circleObject, Program.windowSize, difficultyRight);

            _players.Clear();
            _players.Add(_player1);
            _players.Add(_player2);
        }
Пример #11
0
 public override void Finish(RectangleObject player)
 {
     _circleObject.Circle.FillColor = Color.White;
 }
Пример #12
0
 public override void Update(RectangleObject player, double elapsedTime)
 {
     _circleObject.Circle.FillColor = RandomColor(elapsedTime);
 }
Пример #13
0
 public override void Finish(RectangleObject player)
 {
     _isSpeedDown = false;
 }
Пример #14
0
        private void Update(double elapsedTime)
        {
            int lifeImagesCount = _lifeImages.Count;

            for (int i = lifeImagesCount; i < Program.lifes; i++)
            {
                Text lifeImage = new Text("|", _font, (uint)_lifeImagesSize);
                MainMenu.SetTextOriginToMiddle(lifeImage);
                lifeImage.Position = _lifeImagesPosition + (_lifeImagesDistance + Vector2D.Right() * lifeImage.GetGlobalBounds().Width) * i + (Vector2D.Right() * lifeImage.GetGlobalBounds().Width) / 2;
                _lifeImages.Add(lifeImage);
            }

            bool rectangleObject1Collided = false;
            bool rectangleObject2Collided = false;

            if (_player1 != null)
            {
                rectangleObject1Collided = _player1.PongCollision(_circleObject);
            }
            if (_player2 != null)
            {
                rectangleObject2Collided = _player2.PongCollision(_circleObject);
            }

            int numberOfBrickCollisions           = 0;
            List <RectangleObject> collidedBricks = new List <RectangleObject>();

            Vector2D oldCircleDirection = _circleObject.Direction;

            foreach (RectangleObject brick in _bricks)
            {
                if (brick.NewReflectionCollision(_circleObject, _animationManager))
                {
                    brick.Life--;

                    if (brick.Life >= 0)
                    {
                        brick.ChangeToPrefab(RectangleObject.rectangleShapePrefabs[brick.Life]);
                    }

                    numberOfBrickCollisions++;
                    collidedBricks.Add(brick);

                    Vector2D originalPosition = Vector2D.Zero();

                    foreach (RectangleObject brickPrefab in _bricksPrefab)
                    {
                        if (brickPrefab.ID == brick.ID)
                        {
                            originalPosition = brickPrefab.Rectangle.Position;
                        }
                    }

                    _animationManager.RemoveAnimationsToObject(brick.Rectangle);

                    Vector2D animationPosition = brick.Rectangle.Position + oldCircleDirection * 5;
                    _animationManager.AddAnimation(new Animation(brick.Rectangle.Position, new Transformable[] { brick.Rectangle }, 200, 0, animationPosition));
                    _animationManager.AddAnimation(new Animation(animationPosition, new Transformable[] { brick.Rectangle }, 200, 200, originalPosition));
                }
            }

            if (numberOfBrickCollisions > 0)
            {
                if (_player1 != null && _player2 != null)
                {
                    if (_lastHit.Equals(_player1))
                    {
                        _score1 += numberOfBrickCollisions;
                    }

                    if (_lastHit.Equals(_player2))
                    {
                        _score2 += numberOfBrickCollisions;
                    }
                }
                else
                {
                    if (_player1 != null)
                    {
                        _score1++;
                    }

                    if (_player2 != null)
                    {
                        _score2++;
                    }
                }

                foreach (RectangleObject brick in collidedBricks)
                {
                    if (brick.Life < 0)
                    {
                        if (_random.Next(0, _probabilityOfPowerUp) == 0)
                        {
                            PowerUp newPowerUp = _prefabPowerUps[_random.Next(0, _prefabPowerUps.Count)].Clone();


                            double speed = 0.3f;
                            newPowerUp.Spawn(new Vector2D(brick.Rectangle.Position.X, brick.Rectangle.Position.Y), new Vector2D(0, 1), speed);

                            _powerUps.Add(newPowerUp);
                        }

                        _bricks.Remove(brick);
                    }
                }
            }


            if (_bricks.Count == 0 && _loadedLevel == _persistenceManager.LoadLevelList()[_persistenceManager.LoadLevelList().Count - 1])
            {
                Program.windowState = Program.WindowState.GameOver;
            }
            else if (_bricks.Count == 0 && (rectangleObject1Collided || rectangleObject2Collided))
            {
                _loadedLevel  = _persistenceManager.LoadLevelList()[_levelID++];
                _bricks       = _persistenceManager.LoadLevel(_loadedLevel);
                _bricksPrefab = _persistenceManager.LoadLevel(_loadedLevel);
                for (int i = 0; i < _bricks.Count; i++)
                {
                    _bricks[i].Rectangle.Position       += _brickPosition;
                    _bricksPrefab[i].Rectangle.Position += _brickPosition;
                }
            }


            List <PowerUp> usedPowerUps = new List <PowerUp>();

            foreach (PowerUp powerUp in _powerUps)
            {
                powerUp.Update(elapsedTime);

                RectangleObject collidedRectangle = null;
                if (_player1 != null)
                {
                    if (_player1.PowerUpCollision(powerUp))
                    {
                        collidedRectangle = _player1;
                    }
                }

                if (_player2 != null)
                {
                    if (_player2.PowerUpCollision(powerUp))
                    {
                        collidedRectangle = _player2;
                    }
                }

                if (collidedRectangle != null)
                {
                    powerUp.ExecutePowerUp(collidedRectangle);
                    usedPowerUps.Add(powerUp);
                }
                else if (powerUp.Position.X < 0 || powerUp.Position.X > Program.windowSize.X)
                {
                    usedPowerUps.Add(powerUp);
                }
            }

            foreach (PowerUp powerUp in usedPowerUps)
            {
                _powerUps.Remove(powerUp);
            }

            usedPowerUps.Clear();

            _stateManager.Update(elapsedTime);

            _circleObject.Update(elapsedTime);

            bool resetCircleObject = false;

            if (_circleObject.CheckOutOfField((int)Program.windowSize.X, (int)Program.windowSize.Y))
            {
                Program.lifes--;
                _lifeImages.RemoveAt(_lifeImages.Count - 1);
                if (Program.lifes <= 0)
                {
                    Program.windowState = Program.WindowState.GameOver;
                }

                resetCircleObject = true;
                _circleObject.ResetPosition(_circlePosition);
                _circleObject.Direction = new Vector2D(-_circleObject.Direction.X, _circleObject.Direction.Y);
                _circleObject.Update(0);
                _powerUps.Clear();
            }



            if ((rectangleObject1Collided || rectangleObject2Collided) && _player1 != null && _player2 != null)
            {
                /*Vector2D savedPos = _player1.Rectangle.Position;
                 * _player1.Rectangle.Position = _player2.Rectangle.Position;
                 * _player2.Rectangle.Position = savedPos;*/

                _animationManager.AddAnimation(new Animation(_player1.Rectangle.Position, new Transformable[] { _player2.Rectangle }, 100, 0, false));
                _animationManager.AddAnimation(new Animation(_player2.Rectangle.Position, new Transformable[] { _player1.Rectangle }, 100, 0, false));

                if (rectangleObject1Collided)
                {
                    _lastHit = _player1;
                }
                if (rectangleObject2Collided)
                {
                    _lastHit = _player2;
                }
            }



            _aiLeft.Update(elapsedTime, rectangleObject2Collided, rectangleObject1Collided, resetCircleObject);
            _aiRight.Update(elapsedTime, rectangleObject1Collided, rectangleObject2Collided, resetCircleObject);


            if (_score1 < 10)
            {
                _scoreLeftText.DisplayedString = "0" + _score1.ToString();
            }
            else
            {
                _scoreLeftText.DisplayedString = _score1.ToString();
            }

            if (_score2 < 10)
            {
                _scoreRightText.DisplayedString = "0" + _score2.ToString();
            }
            else
            {
                _scoreRightText.DisplayedString = _score2.ToString();
            }


            _animationManager.Update(elapsedTime);
        }
Пример #15
0
 protected void Execute(RectangleObject rectangleObject)
 {
     _stateManager.AddState(rectangleObject, _state, _state.Duration);
 }
Пример #16
0
 public abstract void Update(RectangleObject player, double elapsedTime);
 public override void Finish(RectangleObject player)
 {
     player.Rectangle.Size   = new Vector2D(_originalRectangleSizeX, player.Rectangle.Size.Y);
     player.Rectangle.Origin = new Vector2D(_originalRectangleSizeX / 2, player.Rectangle.Origin.Y);
     _isBig = false;
 }
Пример #18
0
 public abstract void Finish(RectangleObject player);
Пример #19
0
 public void ExecutePowerUp(RectangleObject rectangleObject)
 {
     this.RectangleObject = rectangleObject;
     Execute(rectangleObject);
 }