123 lines
3.2 KiB
C++
123 lines
3.2 KiB
C++
// 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)
|
||
}
|
||
|