public void GoLoss() { Loss?.Invoke(); }
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; }