|
#include "stdafx.h"
#include "CSolution.h"
void CSolution::Rotar()
{
CNodo* nodo;
vector<CNodo>::iterator itr;
CPiezaInfo* piezainfo;
CPieza* pieza;
for(itr = posiciones.begin(); itr != posiciones.end(); ++itr)
{
nodo = &(*itr);
piezainfo = &(piezas->piezasinfo[nodo->IdPiezaInfo]);
pieza = &(piezainfo->piezas[nodo->IdPieza]);
nodo->Fila = Alto - nodo->Fila + 1 - pieza->Alto + 1;
nodo->Columna = Ancho - nodo->Columna + 1 - pieza->Ancho + 1;
RotarPieza180(nodo, piezainfo);
}
}
void CSolution::Invertir()
{
CNodo* nodo;
vector<CNodo>::iterator itr;
CPiezaInfo* piezainfo;
CPieza* pieza;
for(itr = posiciones.begin(); itr != posiciones.end(); ++itr)
{
nodo = &(*itr);
piezainfo = &(piezas->piezasinfo[nodo->IdPiezaInfo]);
pieza = &(piezainfo->piezas[nodo->IdPieza]);
InvertirPieza(nodo, piezainfo);
nodo->Columna = Ancho - nodo->Columna + 1 - pieza->Ancho + 1;
}
}
void CSolution::RotarPieza180(CNodo* nodo, CPiezaInfo* piezainfo)
{
//Hay 2 o menos piezas, al darla vuelta queda igual;
if (piezainfo->piezas.size() <= 2) return;
nodo->Angulo+=180;
if (nodo->Angulo >= 360) nodo->Angulo-= 360;
vector<CPieza>::iterator itr;
CPieza* pieza;
int Contador = 0;
for(itr = piezainfo->piezas.begin(); itr != piezainfo->piezas.end(); ++itr)
{
pieza = &(*itr);
if (pieza->Invertido == nodo->Invertido && pieza->Angulo == nodo->Angulo)
{
nodo->IdPieza = Contador;
break;
}
Contador++;
}
}
void CSolution::InvertirPieza(CNodo* nodo, CPiezaInfo* piezainfo)
{
if (piezainfo->piezas.size() <= 2) return;
if (nodo->Invertido == 0) nodo->Invertido = 1;
if (nodo->Invertido == 1) nodo->Invertido = 0;
vector<CPieza>::iterator itr;
CPieza* pieza;
int Contador = 0;
for(itr = piezainfo->piezas.begin(); itr != piezainfo->piezas.end(); ++itr)
{
pieza = &(*itr);
if (pieza->Invertido == nodo->Invertido && pieza->Angulo == nodo->Angulo)
{
nodo->IdPieza = Contador;
break;
}
Contador++;
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
System developer from Argentina.
Programmed in VB 5,6,.NET, C#, Java, PL-SQL, Transac-SQL, C, C++ and even some "calculator" language.
Love to build small, useful applications.
Usually building big and complicated apps based on solid, reliable components.
Hobbies: reading, photography, chess, paddle, running.