home *** CD-ROM | disk | FTP | other *** search
- /* FIGURES.CPP: Diese Datei enthält die
- Definitionen der Klasse Point (deklariert
- in figures.h). Elementfunktionen für die
- Klasse Location erscheinen als
- Inline-Funktionen in figures.h.
- */
-
- #include "figures.h"
- #include <graphics.h>
- #include <conio.h>
-
- // Elementfunktionen für die Klasse Point
-
- //Konstruktor
- Point::Point(int InitX, int InitY) :
- Location (InitX, InitY)
- {
- // Voreinstellung ist unsichtbar
- Visible = false;
- }
-
- void Point::Show()
- {
- Visible = true;
-
- // voreingestellte Farben verwenden
- putpixel(X, Y, getcolor());
- }
-
- void Point::Hide()
- {
- Visible = false;
-
- // mit der Hintergrundfarbe löschen
- putpixel(X, Y, getbkcolor());
- }
-
- void Point::MoveTo(int NewX, int NewY)
- {
- Hide(); // den aktuellen Punkt unsichtbar
- // machen
- X = NewX; // den X- und Y-Koordinaten den
- Y = NewY; // neuen Ort zuweisen
- Show(); // den Punkt am neuen Ort zeigen
- }
-
- // eine allgemeine Funktion, um die Cursortasten
- // über die Tastatur einzulesen (keine
- // Elementfunktion)
-
- Boolean GetDelta(int& DeltaX, int& DeltaY)
- {
- char KeyChar;
- Boolean Quit;
- DeltaX = 0;
- DeltaY = 0;
-
- do
- {
- // Tastendruck lesen
- KeyChar = getch();
-
- // Carriage Return
- if (KeyChar == 13)
- return(false);
-
- // ein erweiterter Tastencode
- if (KeyChar == 0)
- {
- // Annahme: der Tastendruck ist brauchbar
- Quit = true;
-
- // den Rest des Codes lesen
- KeyChar = getch();
- switch (KeyChar)
- {
- case 72: DeltaY = -1; // unten
- break;
- case 80: DeltaY = 1; // oben
- break;
- case 75: DeltaX = -1; // links
- break;
- case 77: DeltaX = 1; // rechts
- break;
-
- // keine Pfeiltaste
- default: Quit = false;
- };
- };
- } while (!Quit);
- return(true);
- }
-
- void Point::Drag(int DragBy)
- {
- int DeltaX, DeltaY;
- int FigureX, FigureY;
-
- // die Figur zeigen, die verschoben werden soll
- Show();
-
- // die erste Position der Figur lesen
- FigureX = GetX();
- FigureY = GetY();
-
- // Die Schleife zum Verschieben
- while (GetDelta(DeltaX, DeltaY))
- {
- FigureX += (DeltaX * DragBy);
- FigureY += (DeltaY * DragBy);
-
- // die Figur soll bewegt werden
- MoveTo(FigureX, FigureY);
- };
- }
-
-
- // Elementfunktionen für die Klasse Circle
-
- //Konstruktor
- Circle::Circle(int InitX, int InitY,
- int InitRadius)
- : Point (InitX, InitY)
- {
- Radius = InitRadius;
- }
-
- void Circle::Show()
- {
- Visible = true;
-
- // Kreis zeichnen
- circle(X, Y, Radius);
- }
-
- void Circle::Hide()
- {
- // aktuelle Farben speichern
- unsigned int TempColor;
-
- // die aktuelle Farbe initialisieren
- TempColor = getcolor();
-
- // Zeichenfarbe ist die Hintergrundfarbe
- setcolor(getbkcolor());
- Visible = false;
-
- // in der Hintergrundfarbe zeichnen
- circle(X, Y, Radius);
-
- // Farbe auf die aktuelle Farbe zurücksetzen
- setcolor(TempColor);
- }
-
- void Circle::Expand(int ExpandBy)
- {
- // alten Kreis löschen
- Hide();
-
- // den Radius erweitern
- Radius += ExpandBy;
-
- // negativen Radius vermeiden
- if (Radius < 0)
- Radius = 0;
-
- // neuen Kreis zeichnen
- Show();
- }
-
- void Circle::Contract(int ContractBy)
- {
- // neu zeichnen mit (Radius-ContractBy)
- Expand(-ContractBy);
- }
-