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