Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Drawing;
- using System.Drawing.Drawing2D;
- using System.Windows.Forms;
- namespace GravityBalls
- {
- public class WorldModel
- {
- public double BallX;
- public double BallY;
- public double BallRadius;
- public double WorldWidth;
- public double WorldHeight;
- public Color BallColor;
- public int CursorX;
- public int CursorY;
- Random rnd = new Random();
- public double horizontalSpeed = 400.0;
- public double verticalSpeed = 400.0;
- public double coefficientResistance = 0.7;
- public double coefficientAttraction = 0.2;
- public void SimulateTimeframe(double dt)
- {
- BallX = Math.Max(BallRadius, Math.Min(BallX + CalculateHorizontalSpeed(horizontalSpeed) * dt, WorldWidth - BallRadius));
- BallY = Math.Max(BallRadius, Math.Min(BallY + CalculateVerticalSpeed(verticalSpeed) * dt, WorldHeight - BallRadius));
- if (BallX >= WorldWidth - BallRadius || BallX <= BallRadius)
- {
- BallColor = GetRandomColor();
- horizontalSpeed *= -1;
- }
- if (BallY >= WorldHeight - BallRadius || BallY <= BallRadius)
- {
- BallColor = GetRandomColor();
- verticalSpeed *= -1;
- }
- }
- private double CalculateHorizontalSpeed(double speed)
- {
- return speed * coefficientResistance + 20 / GetDistanceToCursor();
- }
- private double CalculateVerticalSpeed(double speed)
- {
- if (speed >= 0)
- return speed * coefficientResistance * (1 + coefficientAttraction) + 20 / GetDistanceToCursor();
- return speed * coefficientResistance * (1 - coefficientAttraction) + 20 / GetDistanceToCursor();
- }
- private Color GetRandomColor()
- {
- return Color.FromArgb(rnd.Next() % 255, rnd.Next() % 255, rnd.Next() % 255);
- }
- private double GetDistanceToCursor()
- {
- return Math.Sqrt((CursorX - BallX) * (CursorX - BallX) + (CursorY - BallY) * (CursorY - BallY));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement