Не понял о чём ты.
// 17.08.2011 Cube.
// Author by Mr2.
#include<iostream>
#include "playpen.h"
#include "keyboard.h"
#include <cmath>
using namespace std;
using namespace fgw;
struct point{
int x;
int y;
int z;
};
void drawLine(playpen & paper,int x1, int y1, int x2, int y2, int const colour);
void drawPoints(playpen & paper, point cubePoints[], int const VERTEX_SUM);
void cubeScale(point cubePoints[],char operation, int const VERTEX_SUM);
void cubeMove(point cubePoints[],char operation, int const VERTEX_SUM);
void cubeRotate();
int main(){
playpen paper;
paper.scale(2);
keyboard keyb; //Объект клавиотуры.
int colour=0;
char operation;
const int VERTEX_SUM =8;
const int RED=192, BLUE=15, GREEN=57, YELLOW=-39, PURPLE=68, BLACK=0;
cout <<" Qube by Mr2 " <<endl;
cout <<" v 0.1 " <<endl;
cout <<" Controll: " <<endl;
cout <<" Move: A D W S " <<endl;
cout <<" Scale: E Q X Z " <<endl;
cout <<" Exit: R " <<endl;
point cube[VERTEX_SUM]={ //Распологаем точки по часовой стрелке начиная с левого нижнего.
cube[0].x=0, cube[0].y =0, cube[0].z=0, //Левая нижняя точка красная сторона.
cube[1].x=0, cube[1].y =30, cube[1].z=0, //Левая верхняя точка красная сторона.
cube[2].x=30, cube[2].y =30, cube[2].z=0, //Правая верхняя точка красная сторона.
cube[3].x=30, cube[3].y =0, cube[3].z=0, //Правая нижняя точка красная сторона.
cube[4].x=10, cube[4].y =10, cube[4].z=0, //Левая нижняя точка синяя сторона.
cube[5].x=10, cube[5].y =40, cube[5].z=0, //Левая верхняя точка синяя сторона.
cube[6].x=40, cube[6].y =40, cube[6].z=0, //Правая верхняя точка синяя сторона.
cube[7].x=40, cube[7].y =10, cube[7].z=0 //Правая нижняя точка синяя сторона.
};
//drawPoints(paper, cube, VERTEX_SUM);
while(!(operation == 'R')){
paper.clear();
operation = keyb.key_pressed();
cubeScale(cube,operation,VERTEX_SUM);
cubeMove(cube,operation,VERTEX_SUM);
drawLine(paper, cube[4].x, cube[4].y, cube[5].x, cube[5].y, BLUE); //Синяя сторона.
drawLine(paper, cube[5].x, cube[5].y, cube[6].x, cube[6].y, BLUE); //Синяя сторона.
drawLine(paper, cube[6].x, cube[6].y, cube[7].x, cube[7].y, BLUE); //Синяя сторона.
drawLine(paper, cube[7].x, cube[7].y, cube[4].x, cube[4].y, BLUE); //Синяя сторона.
drawLine(paper, cube[0].x, cube[0].y, cube[4].x, cube[4].y, BLACK); //Чёрная сторона.
drawLine(paper, cube[3].x, cube[3].y, cube[7].x, cube[7].y, BLACK); //Чёрная сторона.
drawLine(paper, cube[1].x, cube[1].y, cube[5].x, cube[5].y, YELLOW); //Жёлтая сторона.
drawLine(paper, cube[2].x, cube[2].y, cube[6].x, cube[6].y, YELLOW); //Жёлтая сторона.
drawLine(paper, cube[0].x, cube[0].y, cube[1].x, cube[1].y, RED); //Красная сторона.
drawLine(paper, cube[1].x, cube[1].y, cube[2].x, cube[2].y, RED); //Красная сторона.
drawLine(paper, cube[2].x, cube[2].y, cube[3].x, cube[3].y, RED); //Красная сторона.
drawLine(paper, cube[3].x, cube[3].y, cube[0].x, cube[0].y, RED); //Красная сторона.
paper.display();
}
}
void drawLine(playpen & paper,int x1, int y1, int x2, int y2, int const colour){
int deltaX = abs(x2 - x1);
int deltaY = abs(y2 - y1);
int signX = x1 < x2 ? 1 : -1;
int signY = y1 < y2 ? 1 : -1;
int error = deltaX - deltaY;
while(true) {
paper.plot(x1, y1, colour);
if(x1 == x2 && y1 == y2)
break;
int error2 = error * 2;
if(error2 > -deltaY) {
error -= deltaY;
x1 += signX;
}
if(error2 < deltaX) {
error += deltaX;
y1 += signY;
}
}
}
void drawPoints(playpen & paper, point cubePoints[], int const VERTEX_SUM){
for(int i; i<VERTEX_SUM;++i)
paper.plot(cubePoints[i].x, cubePoints[i].y, 0);
}
void cubeScale(point cubePoints[],char operation, int const VERTEX_SUM){
switch(operation){
case 'E':
++cubePoints[1].y;
++cubePoints[2].y;
++cubePoints[5].y;
++cubePoints[6].y;
break;
case 'Q':
--cubePoints[1].y;
--cubePoints[2].y;
--cubePoints[5].y;
--cubePoints[6].y;
break;
case 'X':
++cubePoints[3].x;
++cubePoints[2].x;
++cubePoints[6].x;
++cubePoints[7].x;
break;
case 'Z':
--cubePoints[3].x;
--cubePoints[2].x;
--cubePoints[6].x;
--cubePoints[7].x;
break;
}
}
void cubeMove(point cubePoints[],char operation,int const VERTEX_SUM){
switch(operation){
case 'D':
for(int i=0;i<VERTEX_SUM;++i){
++cubePoints[i].x;
}
break;
case 'A':
for(int i=0;i<VERTEX_SUM;++i){
--cubePoints[i].x;
}
break;
case 'W':
for(int i=0;i<VERTEX_SUM;++i){
++cubePoints[i].y;
}
break;
case 'S':
for(int i=0;i<VERTEX_SUM;++i){
--cubePoints[i].y;
}
break;
}
}
Если знать как это работает то думаю повторить это будет не сложно.
Чтобы использовать функции нужно о них что то знать.