Advertisement
Guest User

Untitled

a guest
Dec 13th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.58 KB | None | 0 0
  1. #include <iostream>
  2. #define CIMGGIP_MAIN
  3. #include "CImgGIP05.h"
  4. using namespace std;
  5. struct Box
  6. {
  7. int x;
  8. int y;
  9. int delta_y; // aktuelle Fallgeschwindigkeit dieses Kaestchens
  10. };
  11. const int box_max = 10, box_size = 40;
  12. // draw_boxes():
  13. // Die Anzahl der Kaestchen wird nicht als zweiter Parameter uebergeben,
  14. // da diese Anzahl als globale Konstante box_max im gesamten Programm bekannt ist ...
  15. void draw_boxes(Box boxes[])
  16. {
  17. // Loesche den bisherigen Fensterinhalt komplett,
  18. // d.h. komplettes Neuzeichnen aller Kaestchen etc ...
  19. gip_white_background();
  20. // Und jetzt alle Kaestchen zeichnen mittels gip_draw_rectangle().
  21. // Linke obere Ecke: (boxes[i].x, boxes[i].y)
  22. // Groesse: box_size x box_size
  23. // Farbe: blue
  24. // TO DO
  25.  
  26. for (int i = 0; i < box_max; i++) // zeichne 10 Quadrate
  27. {
  28. gip_draw_rectangle(boxes[i].x, boxes[i].y, boxes[i].x + box_size, boxes[i].y + box_size, blue);
  29. }
  30. }
  31. // update_boxes():
  32. // 1. Berechne neue y-Koordinate (jedes Kaestchen boxes[i] faellt um boxes[i].delta_y)
  33. // 2. Pruefe, ob ein Kaestchen das untere Fensterende gip_win_size_y (ist ein int)
  34. // ueberschritten hat. Falls ja: gib sofort false zurueck
  35. // 3. (Sonst:) gib true zurueck, wenn keines der Kaestchen den unteren Rand
  36. // ueberschritten hatte
  37. // Die Anzahl der Kaestchen wird nicht als zweiter Parameter uebergeben,
  38. // da diese Anzahl als globale Konstante box_max im gesamten Programm bekannt ist ...
  39. bool update_boxes(Box boxes[])
  40. {
  41. // TO DO
  42. for (int i = 0; i < box_max; i++)
  43. {
  44. boxes[i].y = boxes[i].y + boxes[i].delta_y;
  45. if (boxes[i].y + box_size > gip_win_size_y) // wenn die Box das untere Ende erreicht hat...
  46. {
  47. return false;
  48. }
  49. }
  50. return true;
  51. }
  52.  
  53. // handle_mouse_click():
  54. // Annahme: Funktion wird nur aufgerufen, wenn die Maus wirklich
  55. // geklickt wurde. Die Funktion braucht dies also nicht mehr zu pruefen.
  56. //
  57. // Nimm die Koordinaten der Mausposition und pruefe dann fuer jedes Kaestchen,
  58. // ob die Koordinaten innerhalb des Kaestchens liegen.
  59. // Falls ja:
  60. // * Erhoehe die Fallgeschwindigkeit des Kaestchens um 10
  61. // * Setze das Kaestchen an den oberen Rand
  62. void handle_mouse_click(Box boxes[])
  63. {
  64. int mouse_x = gip_mouse_x();
  65. int mouse_y = gip_mouse_y();
  66. // TO DO
  67. for (int i = 0; i < box_max; i++)
  68. {
  69. if (boxes[i].x <= gip_mouse_x() && boxes[i].x + box_size >= gip_mouse_x() && boxes[i].y <= gip_mouse_y() && boxes[i].y + box_size >= gip_mouse_y())
  70. {
  71.  
  72. boxes[i].y += 10;
  73. boxes[i].y =- boxes[i].delta_y; //
  74.  
  75. }
  76. }
  77. }
  78.  
  79. int main()
  80. {
  81. Box boxes[box_max] = { 0 };
  82. bool keep_going = true;
  83. // Initialisiere alle Kaestchen ...
  84. for (int i = 0; i < box_max; i++)
  85. {
  86. // Die "+10" bewirken, dass alle Kaestchen leicht nach rechts versetzt werden
  87. // und somit links vom linksten Kaestchen noch etwas Platz bleibt (dieses
  88. // also nicht am Rand klebt).
  89. // Die "+20" sorgen fuer einen Zwischenraum von 20 zwischen den Kaestchen ...
  90. boxes[i].x = i * (box_size + 20) + 10;
  91. boxes[i].y = 0;
  92. // Startgeschwindigkeit ist ganzzahlige Zufallszahl zwischen 10 und 30 ...
  93. boxes[i].delta_y = gip_random(10, 30);
  94. }
  95. while (keep_going && gip_window_not_closed())
  96. {
  97. draw_boxes(boxes);
  98. for (int loop_count = 0; loop_count < 200; loop_count++)
  99. {
  100. gip_wait(5); // warte 5 Milli-Sekunden
  101.  
  102. if (gip_mouse_button1_pressed())
  103. {
  104. handle_mouse_click(boxes);
  105. }
  106. }
  107. // Berechne die neue Fall-Position aller Kaestchen und pruefe,
  108. // ob eines der Kaestchen unten aus dem Fenster "herausgefallen" ist
  109. // (falls ja, wird der Wert false zurueckgegeben) ...
  110. keep_going = update_boxes(boxes);
  111. }
  112. return 0;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement