Advertisement
ada1711

Untitled

Jun 8th, 2024
13
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.15 KB | None | 0 0
  1. using System.Numerics;
  2. using Raylib_cs;
  3.  
  4. namespace SymulacjaUpuszczaniaPileczki
  5. {
  6. class Program
  7. {
  8. static void Main(string[] args)
  9. {
  10. // Inicjalizacja okna
  11. Raylib.InitWindow(800, 600, "Symulacja upuszczania piłeczki");
  12. Raylib.SetTargetFPS(60);
  13.  
  14. List<Pileczka> pileczki = new List<Pileczka>();
  15.  
  16. while (!Raylib.WindowShouldClose())
  17. {
  18. // Sprawdź kliknięcie myszki
  19. if (Raylib.IsMouseButtonPressed(MouseButton.Left))
  20. {
  21. Vector2 pozycja = Raylib.GetMousePosition();
  22. pileczki.Add(new Pileczka(pozycja));
  23. }
  24.  
  25. // Aktualizacja piłeczek
  26. foreach (var pileczka in pileczki)
  27. {
  28. pileczka.Aktualizuj();
  29. }
  30.  
  31. // Rysowanie
  32. Raylib.BeginDrawing();
  33. Raylib.ClearBackground(Color.White);
  34.  
  35. foreach (var pileczka in pileczki)
  36. {
  37. pileczka.Rysuj();
  38. }
  39.  
  40. Raylib.EndDrawing();
  41. }
  42.  
  43. Raylib.CloseWindow();
  44. }
  45. }
  46.  
  47. class Pileczka
  48. {
  49. public Vector2 Pozycja { get; private set; }
  50. public Vector2 Predkosc { get; private set; }
  51. private List<Vector2> slad;
  52. private const float Grawitacja = 0.5f;
  53. private const float WspolczynnikOdbicia = -0.95f;
  54. private const int DlugoscSladu = 20;
  55.  
  56. public Pileczka(Vector2 startowaPozycja)
  57. {
  58. Pozycja = startowaPozycja;
  59. Random random = new Random();
  60. Predkosc = new Vector2((float)(random.NextDouble() * 2 - 1) * 5, (float)(random.NextDouble() * 2 - 1) * 5);
  61. slad = new List<Vector2>();
  62. }
  63.  
  64. public void Aktualizuj()
  65. {
  66. // Tworzenie kopii Predkosc do modyfikacji
  67. Vector2 nowaPredkosc = Predkosc;
  68. nowaPredkosc.Y += Grawitacja;
  69.  
  70. // Tworzenie kopii Pozycja do modyfikacji
  71. Vector2 nowaPozycja = Pozycja;
  72. nowaPozycja += nowaPredkosc;
  73.  
  74. // Odbicie od podłogi
  75. if (nowaPozycja.Y >= Raylib.GetScreenHeight())
  76. {
  77. nowaPozycja.Y = Raylib.GetScreenHeight();
  78. nowaPredkosc.Y *= WspolczynnikOdbicia;
  79. }
  80.  
  81. // Aktualizacja właściwości Pozycja i Predkosc
  82. Pozycja = nowaPozycja;
  83. Predkosc = nowaPredkosc;
  84.  
  85. // Dodaj pozycję do śladu
  86. slad.Add(Pozycja);
  87. if (slad.Count > DlugoscSladu)
  88. {
  89. slad.RemoveAt(0);
  90. }
  91. }
  92.  
  93. public void Rysuj()
  94. {
  95. // Rysowanie śladu
  96. for (int i = 0; i < slad.Count - 1; i++)
  97. {
  98. float alpha = (float)i / slad.Count;
  99. Raylib.DrawLineV(slad[i], slad[i + 1], Color.Red);
  100. }
  101.  
  102. // Rysowanie piłeczki
  103. Raylib.DrawCircleV(Pozycja, 10, Color.Green);
  104. }
  105. }
  106. }
  107.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement