Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Numerics;
- using Raylib_cs;
- namespace SymulacjaUpuszczaniaPileczki
- {
- class Program
- {
- static void Main(string[] args)
- {
- // Inicjalizacja okna
- Raylib.InitWindow(800, 600, "Symulacja upuszczania piłeczki");
- Raylib.SetTargetFPS(60);
- List<Pileczka> pileczki = new List<Pileczka>();
- while (!Raylib.WindowShouldClose())
- {
- // Sprawdź kliknięcie myszki
- if (Raylib.IsMouseButtonPressed(MouseButton.Left))
- {
- Vector2 pozycja = Raylib.GetMousePosition();
- pileczki.Add(new Pileczka(pozycja));
- }
- // Aktualizacja piłeczek
- foreach (var pileczka in pileczki)
- {
- pileczka.Aktualizuj();
- }
- // Rysowanie
- Raylib.BeginDrawing();
- Raylib.ClearBackground(Color.White);
- foreach (var pileczka in pileczki)
- {
- pileczka.Rysuj();
- }
- Raylib.EndDrawing();
- }
- Raylib.CloseWindow();
- }
- }
- class Pileczka
- {
- public Vector2 Pozycja { get; private set; }
- public Vector2 Predkosc { get; private set; }
- private List<Vector2> slad;
- private const float Grawitacja = 0.5f;
- private const float WspolczynnikOdbicia = -0.95f;
- private const int DlugoscSladu = 20;
- public Pileczka(Vector2 startowaPozycja)
- {
- Pozycja = startowaPozycja;
- Random random = new Random();
- Predkosc = new Vector2((float)(random.NextDouble() * 2 - 1) * 5, (float)(random.NextDouble() * 2 - 1) * 5);
- slad = new List<Vector2>();
- }
- public void Aktualizuj()
- {
- // Tworzenie kopii Predkosc do modyfikacji
- Vector2 nowaPredkosc = Predkosc;
- nowaPredkosc.Y += Grawitacja;
- // Tworzenie kopii Pozycja do modyfikacji
- Vector2 nowaPozycja = Pozycja;
- nowaPozycja += nowaPredkosc;
- // Odbicie od podłogi
- if (nowaPozycja.Y >= Raylib.GetScreenHeight())
- {
- nowaPozycja.Y = Raylib.GetScreenHeight();
- nowaPredkosc.Y *= WspolczynnikOdbicia;
- }
- // Aktualizacja właściwości Pozycja i Predkosc
- Pozycja = nowaPozycja;
- Predkosc = nowaPredkosc;
- // Dodaj pozycję do śladu
- slad.Add(Pozycja);
- if (slad.Count > DlugoscSladu)
- {
- slad.RemoveAt(0);
- }
- }
- public void Rysuj()
- {
- // Rysowanie śladu
- for (int i = 0; i < slad.Count - 1; i++)
- {
- float alpha = (float)i / slad.Count;
- Raylib.DrawLineV(slad[i], slad[i + 1], Color.Red);
- }
- // Rysowanie piłeczki
- Raylib.DrawCircleV(Pozycja, 10, Color.Green);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement