Advertisement
Manyu99

Untitled

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