Ejemplo n.º 1
0
 public void GoLoss()
 {
     Loss?.Invoke();
 }
Ejemplo n.º 2
0
        public void Update(Graphics graphics) // грубо говоря вызывается при каждом кадре
        {
            int newX = 0, newY = 0;

            switch (_ball.Direction)
            {
            case BallDirection.LeftUp:
                newX = _ball.Position.X - _ball.Velocity;
                newY = _ball.Position.Y - _ball.Velocity;
                break;

            case BallDirection.RightUp:
                newX = _ball.Position.X + _ball.Velocity;
                newY = _ball.Position.Y - _ball.Velocity;
                break;

            case BallDirection.LeftBottom:
                newX = _ball.Position.X - _ball.Velocity;
                newY = _ball.Position.Y + _ball.Velocity;
                break;

            case BallDirection.RightBottom:
                newX = _ball.Position.X + _ball.Velocity;
                newY = _ball.Position.Y + _ball.Velocity;
                break;
            }

            _ball.Position = new Point(newX, newY);

            // Столкновение с верхним краем игрового поля
            //if (_ball.Position.Y <= 0)
            //  _ball.ReflectHorizontal();


            // При сталкивании мяча с нижним краем игрового поля
            if (_ball.Position.Y >= Height - _ball.Height)
            {
                Stop();
                // Loss?.Invoke(); // Проигрыш
                Loss.Invoke(); // Проигрыш
                Next(_level.IsComplited());
            }

            // При сталкивании мяча с верхним краем игрового поля
            if (_ball.Position.Y >= Height - _ball.Height || _ball.Position.Y <= 0)
            {
                Stop();
                // Loss?.Invoke(); // Проигрыш
                Loss.Invoke(); // Проигрыш
                Next(_level.IsComplited());
            }

            // Столкновение мячика с левым или правым краем игрового поля
            if ((_ball.Position.X >= Width - _ball.Width) || _ball.Position.X <= 0)
            {
                _ball.ReflectVertical();
            }

            // Столкновение мячика с ракеткой
            if (_ball.Bounds.IntersectsWith(_paddle.Bounds))
            {
                _ball.Collide(_paddle);
            }

            if (_ball.Bounds.IntersectsWith(_paddle2.Bounds))
            {
                _ball.Collide(_paddle2);
            }


            // Столкновение мячика с кирпичами
            foreach (var block in _level.Blocks)
            {
                if (_ball.Bounds.IntersectsWith(block.Bounds) && block.IsAlive)
                {
                    block.IsAlive = false;
                    _ball.Collide(block);
                }
            }


            if (_level.IsComplited())
            {
                Next(_level.IsComplited());
                Stop();
                // Win?.Invoke(); // Победа
                Win.Invoke(); // Победа
            }

            Draw(graphics);

            _dateTime = DateTime.Now;
        }