daily pastebin goal
65%
SHARE
TWEET

Untitled

a guest Dec 13th, 2018 50 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top