#include <string>
#include <vector>
#include <cstdio>
class Color
{
public:
float r, g, b, alpha;
Color() { }
Color(float r, float g, float b, float alpha);
//Color(const Color& orig);
void drawColor();
void setColor(const Color& color);
void exchangeColor(Color & color);
};
Color::Color(float red, float green, float blue, float alpha)
{
Color::r = red;
Color::g = green;
Color::b = blue;
Color::alpha = alpha;
}
const Color yellow = Color ( 1.0f, 1.0f, 0.0f, 1.0f );
const Color orange = Color ( 1.0f, 0.5f, 0.0f, 1.0f );
const Color green = Color ( 0.0f, 1.0f, 0.0f, 1.0f );
const Color red = Color ( 1.0f, 0.0f, 0.0f, 1.0f );
const Color blue = Color ( 0.4f, 0.4f, 1.0f, 1.0f );
const Color black = Color ( 0.0f, 0.0f, 0.0f, 1.0f );
enum Side
{
Front = 1, Left = 2, Back = 3, Right = 4, Top = 5, Bottom = 6
};
enum Edge
{
ELeft, ETop, ERight, EBottom, Non
};
class Stone{
public:
Color color1, color2, color3;
Side side;
Edge edge1, edge2;
bool StoneUsed;
Stone(){};
Stone(Side side, Edge edge1, Edge edge2);
};
class Cube{
public:
std::vector<std::vector<std::vector<Stone> > > cube;
int cubesize;
Cube() { }
Cube(int cubesize);
static std::string identifyColor(Color& color);
private:
bool isCorner(int x, int y, int z);
void setStone(int x, int y, int z);
};
using namespace std;
Cube :: Cube(int sizeOfCube)
{
cubesize = sizeOfCube;
for(int x = 0; x < cubesize; x++)
{
vector<vector<Stone> > side (cubesize);
cube.push_back(side);
for(int y = 0; y < cubesize; y++)
{
vector<Stone> line (cubesize);
cube.at(x).push_back(line);
for(int z = 0; z < cubesize; z++)
{
cube.at(x).at(y).push_back(Stone());
}
}
}
// Stein vorne oben links mit Farben grün-rot-gelb
string col;
Color color = Color(green);
// col = identifyColor(color);
printf("%s \n",col.c_str());
printf("%f, %f, %f \n",green.r, green.g, green.b);
printf("-------------------------------\n");
cube.at(0).at(0).at(0) = Stone(Front, ELeft, ETop);
col;
color = Color(green);
// col = identifyColor(color);
printf("%s \n",col.c_str());
printf("%f, %f, %f \n",green.r, green.g, green.b);
printf("-------------------------------\n");
}
Stone :: Stone(Side side, Edge edge1, Edge edge2){
printf("%f, %f, %f \n",green.r, green.g, green.b);
printf("-------------------------------\n");
// getSideColor(side,edge1,edge2);
printf("%f, %f, %f \n",green.r, green.g, green.b);
printf("-------------------------------\n");
}
int main()
{
std::vector<std::vector<std::vector<Stone> > > cube;
string col;
Color color = Color(green);
// col = identifyColor(color);
printf("%s \n",col.c_str());
printf("%f, %f, %f \n",green.r, green.g, green.b);
printf("-------------------------------\n");
// Hier wird ganz offensichtlich der Konstruktor von Stone aufgerufen.
Stone(Front, ELeft, ETop);
col;
color = Color(green);
//col = identifyColor(color);
printf("%s \n",col.c_str());
printf("%f, %f, %f \n",green.r, green.g, green.b);
printf("-------------------------------\n");
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNzdGRpbz4KCmNsYXNzIENvbG9yCnsKcHVibGljOgogIGZsb2F0IHIsIGcsIGIsIGFscGhhOwogIENvbG9yKCkgeyAgfSAgICAgICAKICBDb2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhbHBoYSk7CiAgLy9Db2xvcihjb25zdCBDb2xvciYgb3JpZyk7CgogIHZvaWQgZHJhd0NvbG9yKCk7CiAgdm9pZCBzZXRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpOwogIHZvaWQgZXhjaGFuZ2VDb2xvcihDb2xvciAmIGNvbG9yKTsKfTsKCkNvbG9yOjpDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSkKewogIENvbG9yOjpyID0gcmVkOwogIENvbG9yOjpnID0gZ3JlZW47CiAgQ29sb3I6OmIgPSBibHVlOwogIENvbG9yOjphbHBoYSA9IGFscGhhOwp9IAkKCmNvbnN0IENvbG9yIHllbGxvdyA9IENvbG9yICggMS4wZiwgMS4wZiwgMC4wZiwgMS4wZiApOwpjb25zdCBDb2xvciBvcmFuZ2UgPSBDb2xvciAoIDEuMGYsIDAuNWYsIDAuMGYsIDEuMGYgKTsKY29uc3QgQ29sb3IgZ3JlZW4gID0gQ29sb3IgKCAwLjBmLCAxLjBmLCAwLjBmLCAxLjBmICk7CmNvbnN0IENvbG9yIHJlZCAgICA9IENvbG9yICggMS4wZiwgMC4wZiwgMC4wZiwgMS4wZiApOwpjb25zdCBDb2xvciBibHVlICAgPSBDb2xvciAoIDAuNGYsIDAuNGYsIDEuMGYsIDEuMGYgKTsKY29uc3QgQ29sb3IgYmxhY2sgID0gQ29sb3IgKCAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmICk7CgplbnVtIFNpZGUKICB7CiAgICBGcm9udCA9IDEsIExlZnQgPSAyLCBCYWNrID0gMywgUmlnaHQgPSA0LCBUb3AgPSA1LCBCb3R0b20gPSA2CiAgfTsKCmVudW0gRWRnZQogIHsKICAgIEVMZWZ0LCBFVG9wLCBFUmlnaHQsIEVCb3R0b20sIE5vbgogIH07CgoKY2xhc3MgU3RvbmV7CnB1YmxpYzoKICBDb2xvciBjb2xvcjEsIGNvbG9yMiwgY29sb3IzOwogIFNpZGUgc2lkZTsKICBFZGdlIGVkZ2UxLCBlZGdlMjsKICBib29sIFN0b25lVXNlZDsKCiAgU3RvbmUoKXt9OyAgICAgICAKICBTdG9uZShTaWRlIHNpZGUsIEVkZ2UgZWRnZTEsIEVkZ2UgZWRnZTIpOwoKfTsgCgpjbGFzcyBDdWJlewpwdWJsaWM6CiAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8U3RvbmU+ID4gPiBjdWJlOwogIGludCBjdWJlc2l6ZTsKICBDdWJlKCkgeyAgfQogIEN1YmUoaW50IGN1YmVzaXplKTsKICBzdGF0aWMgc3RkOjpzdHJpbmcgaWRlbnRpZnlDb2xvcihDb2xvciYgY29sb3IpOwpwcml2YXRlOgogIGJvb2wgaXNDb3JuZXIoaW50IHgsIGludCB5LCBpbnQgeik7CiAgdm9pZCBzZXRTdG9uZShpbnQgeCwgaW50IHksIGludCB6KTsgICAgICAgCn07IAkKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpDdWJlIDo6IEN1YmUoaW50IHNpemVPZkN1YmUpCnsKICBjdWJlc2l6ZSA9IHNpemVPZkN1YmU7CgogIGZvcihpbnQgeCA9IDA7IHggPCBjdWJlc2l6ZTsgeCsrKQogICAgewogICAgICB2ZWN0b3I8dmVjdG9yPFN0b25lPiA+IHNpZGUgKGN1YmVzaXplKTsKICAgICAgY3ViZS5wdXNoX2JhY2soc2lkZSk7CiAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBjdWJlc2l6ZTsgeSsrKQogICAgICAgIHsKICAgICAgICAgIHZlY3RvcjxTdG9uZT4gbGluZSAoY3ViZXNpemUpOwogICAgICAgICAgY3ViZS5hdCh4KS5wdXNoX2JhY2sobGluZSk7CiAgICAgICAgICBmb3IoaW50IHogPSAwOyB6IDwgY3ViZXNpemU7IHorKykKICAgICAgICAgICAgeyAgCiAgICAgICAgICAgICAgY3ViZS5hdCh4KS5hdCh5KS5wdXNoX2JhY2soU3RvbmUoKSk7CiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAKICAgICAgICB9CiAgICB9CgogIC8vIFN0ZWluIHZvcm5lIG9iZW4gbGlua3MgbWl0IEZhcmJlbiBncsO8bi1yb3QtZ2VsYgoKICBzdHJpbmcgY29sOwogIENvbG9yIGNvbG9yID0gQ29sb3IoZ3JlZW4pOwogIC8vICBjb2wgPSBpZGVudGlmeUNvbG9yKGNvbG9yKTsKCiAgcHJpbnRmKCIlcyBcbiIsY29sLmNfc3RyKCkpOwogIHByaW50ZigiJWYsICVmLCAlZiBcbiIsZ3JlZW4uciwgZ3JlZW4uZywgZ3JlZW4uYik7CiAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKCiAgY3ViZS5hdCgwKS5hdCgwKS5hdCgwKSA9IFN0b25lKEZyb250LCBFTGVmdCwgRVRvcCk7CgogIGNvbDsKICBjb2xvciA9IENvbG9yKGdyZWVuKTsKICAvLyAgY29sID0gaWRlbnRpZnlDb2xvcihjb2xvcik7CgogIHByaW50ZigiJXMgXG4iLGNvbC5jX3N0cigpKTsKICBwcmludGYoIiVmLCAlZiwgJWYgXG4iLGdyZWVuLnIsIGdyZWVuLmcsIGdyZWVuLmIpOwogIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7IAp9CgoKClN0b25lIDo6IFN0b25lKFNpZGUgc2lkZSwgRWRnZSBlZGdlMSwgRWRnZSBlZGdlMil7CiAgCiAgcHJpbnRmKCIlZiwgJWYsICVmIFxuIixncmVlbi5yLCBncmVlbi5nLCBncmVlbi5iKTsKICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogIAogIC8vICBnZXRTaWRlQ29sb3Ioc2lkZSxlZGdlMSxlZGdlMik7CiAgCiAgcHJpbnRmKCIlZiwgJWYsICVmIFxuIixncmVlbi5yLCBncmVlbi5nLCBncmVlbi5iKTsKICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwp9IAoKaW50IG1haW4oKQp7CiAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8U3RvbmU+ID4gPiBjdWJlOwogIHN0cmluZyBjb2w7CiAgQ29sb3IgY29sb3IgPSBDb2xvcihncmVlbik7CiAgLy8gY29sID0gaWRlbnRpZnlDb2xvcihjb2xvcik7CiAgCiAgcHJpbnRmKCIlcyBcbiIsY29sLmNfc3RyKCkpOwogIHByaW50ZigiJWYsICVmLCAlZiBcbiIsZ3JlZW4uciwgZ3JlZW4uZywgZ3JlZW4uYik7CiAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKICAKICAvLyBIaWVyIHdpcmQgZ2FueiBvZmZlbnNpY2h0bGljaCBkZXIgS29uc3RydWt0b3Igdm9uIFN0b25lIGF1ZmdlcnVmZW4uCiAgU3RvbmUoRnJvbnQsIEVMZWZ0LCBFVG9wKTsKICAKICBjb2w7CiAgY29sb3IgPSBDb2xvcihncmVlbik7CiAgLy9jb2wgPSBpZGVudGlmeUNvbG9yKGNvbG9yKTsKICAKICBwcmludGYoIiVzIFxuIixjb2wuY19zdHIoKSk7CiAgcHJpbnRmKCIlZiwgJWYsICVmIFxuIixncmVlbi5yLCBncmVlbi5nLCBncmVlbi5iKTsKICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOyAKfQo=