diff --git a/Source/functions/solve/classExtension.cpp b/Source/functions/solve/classExtension.cpp index 4d1aa63..79eaf3e 100755 --- a/Source/functions/solve/classExtension.cpp +++ b/Source/functions/solve/classExtension.cpp @@ -1,3 +1,4 @@ +#include "../../header.h" //shifts puzzle piece one to the right void PuzzlePiece::shift(unsigned int moves) @@ -191,7 +192,8 @@ void Puzzle::printPuzzle() } //creates a legal puzzle out of random pieces -void randomBox::createRandomPuzzle() + +void randomBox::createRandomAbstraction1() { coor myCoor; PuzzlePiece temporaryRandomPiece(0); @@ -204,11 +206,11 @@ void randomBox::createRandomPuzzle() //create random piece, set edges according to position and check if piece is good temporaryRandomPiece.randomCenterPiece(); if(i==0) - temporaryRandomPiece.setConnections(0b00111111 & temporaryRandomPiece.getConnections()); + temporaryRandomPiece.setConnections(0b00111111 & temporaryRandomPiece.getConnections()); if(i==getRows()-1) - temporaryRandomPiece.setConnections(0b11110011 & temporaryRandomPiece.getConnections()); + temporaryRandomPiece.setConnections(0b11110011 & temporaryRandomPiece.getConnections()); if(j==0) - temporaryRandomPiece.setConnections(0b11111100 & temporaryRandomPiece.getConnections()); + temporaryRandomPiece.setConnections(0b11111100 & temporaryRandomPiece.getConnections()); if(j==getCols()-1) temporaryRandomPiece.setConnections(0b11001111 & temporaryRandomPiece.getConnections()); @@ -217,23 +219,75 @@ void randomBox::createRandomPuzzle() if(PlaceOfPartGood(myCoor,temporaryRandomPiece)) { temporaryRandomPiece.assignIdentifier(); +<<<<<<< HEAD setPiece(myCoor,temporaryRandomPiece); +/*======= + setPiece(j,i,temporaryRandomPiece); +>>>>>>> 9b282e83caf9aaacea107f878d2d6b3f413f286b + */ j++; - Box.push_back(temporaryRandomPiece); } } } } +void randomBox::createRandomAbstraction2() +{ + //get a picture + cv::Mat PuzzlePicture = cv::imread("../../Codicil/Images/Balloons.jpg"); + if(! PuzzlePicture.data ) + { + cout << "Could not open or find the image" << std::endl ; + return; + } + //split a picture into mxn pieces + cv::Size smallSize ((int)(PuzzlePicture.cols/getCols()) ,(int)(PuzzlePicture.rows/getRows())); + // get the image data + + vector smallChannels; + unsigned int i=0,j=0; + for ( int y=0; y<=PuzzlePicture.rows-smallSize.height; y += smallSize.height ) + { + + for ( int x=0 ; x<=PuzzlePicture.cols-smallSize.width; x += smallSize.width ) + { + //split into different ROIs + cv::Rect rect = cv::Rect (x ,y , smallSize.width, smallSize.height ); + cv::Mat tmpSmallPicture = cv::Mat(PuzzlePicture,rect); + cv::split(tmpSmallPicture, smallChannels); + + //save color into individual PuzzlePieces in Matrix + PuzzlePiece tmpPiece = getPiece(j,i); + tmpPiece.r = cv::mean(smallChannels[0]).operator[](0); + tmpPiece.g = cv::mean(smallChannels[1]).operator[](0); + tmpPiece.b = cv::mean(smallChannels[2]).operator[](0); + setPiece(j,i,tmpPiece); + j++; + } + i++; + j=0; + } +} + +void randomBox::putAllIntoBox() { + for (int i = 0; i < getRows(); i++) + { + for (int j = 0; j < getCols(); j++) + { + Box.push_back(getPiece(j,i)); + } + } +} + //prints a box contents on console void randomBox::printBox() { shuffle(); - for (vector::iterator i = Box.begin(); i != Box.end(); i++) + for (vector::iterator i = Box.begin(); i != Box.end(); i++) { (*i).printPiece(); cout << ' '; - } + } cout << endl; } @@ -241,8 +295,12 @@ void randomBox::printBox() vector randomBox::shuffle() { random_shuffle(Box.begin(),Box.end()); - for (vector::iterator i = Box.begin(); i != Box.end(); i++) - (*i).shift(rand()%4); + for (vector::iterator i = Box.begin(); i != Box.end(); i++) + { + i->shift(rand()%4); + i->resetShift(); + } + numerateBox(Box); return Box; } @@ -250,20 +308,32 @@ vector randomBox::shuffle() //creates a random box size m, n, shuffles it, and then retuns it vector createBox(coor myCoor) { + /* +<<<<<<< HEAD randomBox myFirstPuzzleBox(myCoor.m, myCoor.n); - myFirstPuzzleBox.createRandomPuzzle(); - return myFirstPuzzleBox.shuffle(); + myFirstPuzzleBox.createRandomPuzzle(); + return myFirstPuzzleBox.shuffle(); +======= + */ + randomBox myFirstPuzzleBox(myCoor.m,myCoor.n); + myFirstPuzzleBox.createRandomAbstraction1(); + myFirstPuzzleBox.createRandomAbstraction2(); + myFirstPuzzleBox.putAllIntoBox(); + + myFirstPuzzleBox.printPuzzle(); + return myFirstPuzzleBox.shuffle(); +//>>>>>>> 9b282e83caf9aaacea107f878d2d6b3f413f286b } //prints contents of box void printBox(vector myBox) { cout << "current Box: " << endl; - for (vector::iterator i = myBox.begin(); i != myBox.end(); i++) + for (vector::iterator i = myBox.begin(); i != myBox.end(); i++) { (*i).printPiece(); cout << ' '; - } + } cout << endl; return; } diff --git a/Source/functions/solve/structure.cpp b/Source/functions/solve/structure.cpp index d108222..e9e4b04 100755 --- a/Source/functions/solve/structure.cpp +++ b/Source/functions/solve/structure.cpp @@ -1,3 +1,5 @@ +#include "../../header.h" + void status(vector& log, vector& p_Box, Puzzle& puzzleMat); @@ -66,15 +68,6 @@ bool next(vector& log, vector& p_Box, Puzzle& puzzleMat) return 1; } -/* -coor calculateFirstCoor(vector& log, vector& p_Box, Puzzle& puzzleMat) -{ - //returns coor of first piece - coor firstCoor(0,0); - return firstCoor; -} -*/ - coor calculateNextCoor(vector& log, vector& p_Box, Puzzle& puzzleMat) { //level 1: @@ -135,10 +128,10 @@ void abstractionlayer1solver(vector& log, vector& p_Box, log.back().PieceCollector.erase(log.back().PieceCollector.begin()+i); else { - i++; //otherwise loop stops before end! //set shift to 0 so that we have a defined starting position for all pieces while(log.back().PieceCollector[i]->getShift()) log.back().PieceCollector[i]->shift(1); + i++; //otherwise loop stops before end! } } } diff --git a/Source/header.h b/Source/header.h index 75f46ae..49ba840 100755 --- a/Source/header.h +++ b/Source/header.h @@ -5,15 +5,10 @@ #include #include +#define MAX_ABSTRAX 1 +#define structdebug using namespace std; #include "header/input.h" #include "header/solve.h" -#include "header/output.h" - -#include "functions/input/input.cpp" -#include "functions/solve/classExtension.cpp" -#include "functions/solve/structure.cpp" -#include "functions/output/output.cpp" - diff --git a/Source/header/input.h b/Source/header/input.h index f93c63c..7a16bd8 100755 --- a/Source/header/input.h +++ b/Source/header/input.h @@ -3,6 +3,10 @@ class Part { public: + double r; + double g; + double b; + Part(): connections(0){} ~Part() {} uint8_t getConnections() const @@ -13,4 +17,6 @@ public: private: uint8_t connections; + + }; \ No newline at end of file diff --git a/Source/header/solve.h b/Source/header/solve.h index f1d85a0..0b8e3ba 100755 --- a/Source/header/solve.h +++ b/Source/header/solve.h @@ -1,3 +1,8 @@ +#include +#include +#include +#include + using namespace std; class coor @@ -121,8 +126,10 @@ class randomBox: public Puzzle public: randomBox(unsigned int m, unsigned int n) : Puzzle(m,n) {srand(time(0));} //passed m n to puzzle constructor - - void createRandomPuzzle(); + + void createRandomAbstraction1(); + void createRandomAbstraction2(); + void putAllIntoBox(); vector shuffle(); void printBox(); @@ -157,24 +164,11 @@ private: static int randomed; }; -class BoxClassify -{ - vector p_Box; - vector> ab1class; - - -}; - -int LogEntry::randomed(0); -unsigned int PuzzlePiece::idcount(0); - - void printBox(vector myBox); -vector createBox(coor boxCoor); // 1st change: works +vector createBox(coor myCoor); void numerateBox(vector& myBox); bool next(vector& log, vector& p_Box, Puzzle& puzzleMat); -coor calculateFirstCoor(vector& log, vector& p_Box, Puzzle& puzzleMat); coor calculateNextCoor(vector& log, vector& p_Box, Puzzle& puzzleMat); void solve(vector& log, vector& p_Box, Puzzle& puzzleMat); void abstractionlayer0solver(vector& log, vector& p_Box, Puzzle& puzzleMat); diff --git a/Source/main.cpp b/Source/main.cpp index f2bf530..ae94bb3 100644 --- a/Source/main.cpp +++ b/Source/main.cpp @@ -1,39 +1,22 @@ -#define MAX_ABSTRAX 1 -#define structdebug - - #include "header.h" -//#include "../Codicil/test_puzzle_long40x40.h" + +int LogEntry::randomed(0); +unsigned int PuzzlePiece::idcount(0); int main() { - int cols=10, rows=20; - //some basic part stuff - vector myFirstPuzzle; - Part myFirstPart; - myFirstPart.setConnections(0b00101000); - myFirstPuzzle.push_back(myFirstPart); + int cols=2, rows=3; //some basic random puzzle stuff - randomBox myRandomBox(cols,rows); - myRandomBox.createRandomPuzzle(); - vector myFirstBox = myRandomBox.shuffle(); - - //undo everything and make this puzzle fucking imba hard!!! - //need 40x40 for this, so check your status - - //makehard4040puzzle(myFirstBox); + vector myFirstBox = createBox(coor(cols,rows)); //some advanced solver stuff vector log; vector p_myFirstBox; //BoxClassify myFirstBox(); - - cout << "original puzzle: " << endl; - myRandomBox.printPuzzle(); cout << endl; for(int i=0;i