home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / tcpp / examples / figures.cpp < prev    next >
C/C++ Source or Header  |  1990-06-09  |  4KB  |  176 lines

  1. /* FIGURES.CPP: Diese Datei enthält die
  2.    Definitionen der Klasse Point (deklariert
  3.    in figures.h). Elementfunktionen für die
  4.    Klasse Location erscheinen als
  5.    Inline-Funktionen in figures.h.
  6. */
  7.  
  8. #include "figures.h"
  9. #include <graphics.h>
  10. #include <conio.h>
  11.  
  12. // Elementfunktionen für die Klasse Point
  13.  
  14. //Konstruktor
  15. Point::Point(int InitX, int InitY) :
  16.        Location (InitX, InitY)
  17. {
  18.    // Voreinstellung ist unsichtbar
  19.    Visible = false;
  20. }
  21.  
  22. void Point::Show()
  23. {
  24.    Visible = true;
  25.  
  26.    // voreingestellte Farben verwenden
  27.    putpixel(X, Y, getcolor()); 
  28. }
  29.  
  30. void Point::Hide()
  31. {
  32.    Visible = false;
  33.  
  34.    // mit der Hintergrundfarbe löschen
  35.    putpixel(X, Y, getbkcolor()); 
  36. }
  37.  
  38. void Point::MoveTo(int NewX, int NewY)
  39. {
  40.    Hide();   // den aktuellen Punkt unsichtbar
  41.          // machen
  42.    X = NewX; // den X- und Y-Koordinaten den
  43.    Y = NewY; // neuen Ort zuweisen
  44.    Show();   // den Punkt am neuen Ort zeigen
  45. }
  46.  
  47. // eine allgemeine Funktion, um die Cursortasten
  48. // über die Tastatur einzulesen (keine
  49. // Elementfunktion)
  50.  
  51. Boolean GetDelta(int& DeltaX, int& DeltaY)
  52. {
  53.    char KeyChar;
  54.    Boolean Quit;
  55.    DeltaX = 0;
  56.    DeltaY = 0;
  57.  
  58.    do
  59.    {
  60.       // Tastendruck lesen
  61.       KeyChar = getch();
  62.  
  63.       // Carriage Return
  64.       if (KeyChar == 13)     
  65.      return(false);
  66.  
  67.       // ein erweiterter Tastencode
  68.       if (KeyChar == 0)      
  69.      {
  70.           // Annahme: der Tastendruck ist brauchbar
  71.       Quit = true;
  72.  
  73.           // den Rest des Codes lesen
  74.       KeyChar = getch(); 
  75.           switch (KeyChar)
  76.              {
  77.          case 72: DeltaY = -1; // unten
  78.                           break;
  79.          case 80: DeltaY =  1; // oben
  80.                           break;
  81.          case 75: DeltaX = -1; // links
  82.                           break;
  83.          case 77: DeltaX =  1; // rechts
  84.                           break;
  85.  
  86.                  // keine Pfeiltaste
  87.          default: Quit = false;
  88.          };
  89.      };
  90.    } while (!Quit);
  91.    return(true);
  92. }
  93.  
  94. void Point::Drag(int DragBy)
  95. {
  96.    int DeltaX, DeltaY;
  97.    int FigureX, FigureY;
  98.  
  99.    // die Figur zeigen, die verschoben werden soll
  100.    Show(); 
  101.  
  102.    // die erste Position der Figur lesen
  103.    FigureX = GetX(); 
  104.    FigureY = GetY();
  105.  
  106.    // Die Schleife zum Verschieben
  107.    while (GetDelta(DeltaX, DeltaY))
  108.       {
  109.       FigureX += (DeltaX * DragBy);
  110.       FigureY += (DeltaY * DragBy);
  111.  
  112.       // die Figur soll bewegt werden
  113.       MoveTo(FigureX, FigureY); 
  114.       };
  115. }
  116.  
  117.  
  118. // Elementfunktionen für die Klasse Circle
  119.  
  120. //Konstruktor
  121. Circle::Circle(int InitX, int InitY,
  122.                int InitRadius)
  123.        : Point (InitX, InitY)
  124. {
  125.    Radius = InitRadius;
  126. }
  127.  
  128. void Circle::Show()
  129. {
  130.    Visible = true;
  131.  
  132.    // Kreis zeichnen
  133.    circle(X, Y, Radius);     
  134. }
  135.  
  136. void Circle::Hide()
  137. {
  138.    // aktuelle Farben speichern
  139.    unsigned int TempColor;
  140.  
  141.    // die aktuelle Farbe initialisieren
  142.    TempColor = getcolor();
  143.  
  144.    // Zeichenfarbe ist die Hintergrundfarbe
  145.    setcolor(getbkcolor());   
  146.    Visible = false;
  147.  
  148.    // in der Hintergrundfarbe zeichnen
  149.    circle(X, Y, Radius);
  150.  
  151.    // Farbe auf die aktuelle Farbe zurücksetzen
  152.    setcolor(TempColor);      
  153. }
  154.  
  155. void Circle::Expand(int ExpandBy)
  156. {
  157.    // alten Kreis löschen
  158.    Hide();
  159.  
  160.    // den Radius erweitern
  161.    Radius += ExpandBy;
  162.  
  163.    // negativen Radius vermeiden
  164.    if (Radius < 0)               
  165.       Radius = 0;
  166.  
  167.    // neuen Kreis zeichnen
  168.    Show();                       
  169. }
  170.  
  171. void Circle::Contract(int ContractBy)
  172. {
  173.    // neu zeichnen mit (Radius-ContractBy)
  174.    Expand(-ContractBy);
  175. }
  176.