daily pastebin goal
27%
SHARE
TWEET

Untitled

a guest Dec 10th, 2018 52 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.  
  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. void draw_boxes(Box boxes[])
  19. {
  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            //inline void gip_draw_rectangle(unsigned int x0, unsigned int y0,unsigned int x1, unsigned int y1, const unsigned char *const color = black)
  30.     for (int i = 0; i < box_max; i++)
  31.     {
  32.         gip_draw_rectangle(boxes[i].x, boxes[i].y, boxes[i].x + box_size, boxes[i].y + box_size, blue);
  33.     }
  34. }
  35.  
  36. // update_boxes():
  37. // 1. Berechne neue y-Koordinate (jedes Kaestchen boxes[i] faellt um boxes[i].delta_y)
  38. // 2. Pruefe, ob ein Kaestchen das untere Fensterende gip_win_size_y (ist ein int)  
  39. //    ueberschritten hat. Falls ja: gib sofort false zurueck
  40. // 3. (Sonst:) gib true zurueck, wenn keines der Kaestchen den unteren Rand  
  41. //             ueberschritten hatte
  42. // Die Anzahl der Kaestchen wird nicht als zweiter Parameter uebergeben,
  43. // da diese Anzahl als globale Konstante box_max im gesamten Programm bekannt ist ...
  44. bool update_boxes(Box boxes[])
  45. {
  46.     // TO DO
  47.     for (int i = 0; i < box_max; i++)
  48.     {
  49.         boxes[i].y += boxes[i].delta_y;
  50.         if (boxes[i].y + box_size > gip_win_size_y)
  51.         {
  52.             return false;
  53.         }
  54.     }
  55.     return true;
  56. }
  57.  
  58. // handle_mouse_click():
  59. // Annahme: Funktion wird nur aufgerufen, wenn die Maus wirklich
  60. // geklickt wurde. Die Funktion braucht dies also nicht mehr zu pruefen.
  61. //  
  62. // Nimm die Koordinaten der Mausposition und pruefe dann fuer jedes Kaestchen,
  63. // ob die Koordinaten innerhalb des Kaestchens liegen.  
  64. // Falls ja:
  65. // * Erhoehe die Fallgeschwindigkeit des Kaestchens um 10
  66. // * Setze das Kaestchen an den oberen Rand  
  67. void handle_mouse_click(Box boxes[])
  68. {
  69.     int mouse_x = gip_mouse_x();
  70.     int mouse_y = gip_mouse_y();
  71.  
  72.     // TO DO
  73.     for (int i = 0; i < box_max; i++)
  74.     {
  75.         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())
  76.         {
  77.             boxes[i].y = 0;
  78.             boxes[i].delta_y += 10;
  79.             draw_boxes(boxes); //wenn es direkt oben sein sollte, sonnst wird es erst angezeigt, wenn es einen sprung gemacht hat
  80.         }
  81.     }
  82. }
  83.  
  84. int main()
  85. {
  86.     Box boxes[box_max] = { 0 };
  87.     bool keep_going = true;
  88.  
  89.     // Initialisiere alle Kaestchen ...    
  90.     for (int i = 0; i < box_max; i++)
  91.     {
  92.         // Die "+10" bewirken, dass alle Kaestchen leicht nach rechts versetzt werden        
  93.         // und somit links vom linksten Kaestchen noch etwas Platz bleibt (dieses          
  94.         // also nicht am Rand klebt).        
  95.         // Die "+20" sorgen fuer einen Zwischenraum von 20 zwischen den Kaestchen ...        
  96.         boxes[i].x = i * (box_size + 20) + 10;
  97.         boxes[i].y = 0;
  98.         // Startgeschwindigkeit ist ganzzahlige Zufallszahl zwischen 10 und 30 ...        
  99.         boxes[i].delta_y = gip_random(10, 30);
  100.     }
  101.  
  102.     while (keep_going && gip_window_not_closed())
  103.     {
  104.         draw_boxes(boxes);
  105.  
  106.         for (int loop_count = 0; loop_count < 200; loop_count++)
  107.         {
  108.             gip_wait(5); // warte 5 Milli-Sekunden
  109.             if (gip_mouse_button1_pressed())
  110.             {
  111.                 handle_mouse_click(boxes);
  112.             }
  113.         }
  114.         // Berechne die neue Fall-Position aller Kaestchen und pruefe,
  115.         // ob eines der Kaestchen unten aus dem Fenster "herausgefallen" ist
  116.         // (falls ja, wird der Wert false zurueckgegeben) ...
  117.         keep_going = update_boxes(boxes);
  118.     }
  119.  
  120.     return 0;
  121. }
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