dos_compilers/Borland Turbo C++ v1/EXAMPLES/FIGURES.CPP
2024-07-02 07:34:51 -07:00

123 lines
3.2 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// FIGURES.CPP: This file contains the definitions for the Point
// class (declared in figures.h). Member functions for the
// Location class appear as inline functions in figures.h.
#include "figures.h"
#include <graphics.h>
#include <conio.h>
// member functions for the Point class
//constructor
Point::Point(int InitX, int InitY) : Location (InitX, InitY)
{
Visible = false; // make invisible by default
}
void Point::Show()
{
Visible = true;
putpixel(X, Y, getcolor()); // uses default color
}
void Point::Hide()
{
Visible = false;
putpixel(X, Y, getbkcolor()); // uses background color to erase
}
void Point::MoveTo(int NewX, int NewY)
{
Hide(); // make current point invisible
X = NewX; // change X and Y coordinates to new location
Y = NewY;
Show(); // show point at new location
}
// a general-purpose function for getting keyboard
// cursor movement keys (not a member function)
Boolean GetDelta(int& DeltaX, int& DeltaY)
{
char KeyChar;
Boolean Quit;
DeltaX = 0;
DeltaY = 0;
do
{
KeyChar = getch(); // read the keystroke
if (KeyChar == 13) // carriage return
return(false);
if (KeyChar == 0) // an extended keycode
{
Quit = true; // assume it is usable
KeyChar = getch(); // get rest of keycode
switch (KeyChar) {
case 72: DeltaY = -1; break; // down arrow
case 80: DeltaY = 1; break; // up arrow
case 75: DeltaX = -1; break; // left arrow
case 77: DeltaX = 1; break; // right arrow
default: Quit = false; // bad key
};
};
} while (!Quit);
return(true);
}
void Point::Drag(int DragBy)
{
int DeltaX, DeltaY;
int FigureX, FigureY;
Show(); // display figure to be dragged
FigureX = GetX(); // get initial position of figure
FigureY = GetY();
// This is the drag loop
while (GetDelta(DeltaX, DeltaY))
{
// Apply delta to figure at X, Y
FigureX += (DeltaX * DragBy);
FigureY += (DeltaY * DragBy);
MoveTo(FigureX, FigureY); // tell figure to move
};
}
// Member functions for the Circle class
//constructor
Circle::Circle(int InitX, int InitY, int InitRadius) : Point (InitX, InitY)
{
Radius = InitRadius;
}
void Circle::Show()
{
Visible = true;
circle(X, Y, Radius); // draw the circle
}
void Circle::Hide()
{
unsigned int TempColor; // to save current color
TempColor = getcolor(); // set to current color
setcolor(getbkcolor()); // set drawing color to background
Visible = false;
circle(X, Y, Radius); // draw in background color to
setcolor(TempColor); // set color back to current color
}
void Circle::Expand(int ExpandBy)
{
Hide(); // erase old circle
Radius += ExpandBy; // expand radius
if (Radius < 0) // avoid negative radius
Radius = 0;
Show(); // draw new circle
}
void Circle::Contract(int ContractBy)
{
Expand(-ContractBy); // redraws with (Radius-ContractBy)
}