Merge branch TeamCMU
random generator v2 + coor class
This commit is contained in:
commit
f0e287af20
@ -1,3 +1,4 @@
|
|||||||
|
#include "../../header.h"
|
||||||
|
|
||||||
//shifts puzzle piece one to the right
|
//shifts puzzle piece one to the right
|
||||||
void PuzzlePiece::shift(unsigned int moves)
|
void PuzzlePiece::shift(unsigned int moves)
|
||||||
@ -191,7 +192,8 @@ void Puzzle::printPuzzle()
|
|||||||
}
|
}
|
||||||
|
|
||||||
//creates a legal puzzle out of random pieces
|
//creates a legal puzzle out of random pieces
|
||||||
void randomBox::createRandomPuzzle()
|
|
||||||
|
void randomBox::createRandomAbstraction1()
|
||||||
{
|
{
|
||||||
coor myCoor;
|
coor myCoor;
|
||||||
PuzzlePiece temporaryRandomPiece(0);
|
PuzzlePiece temporaryRandomPiece(0);
|
||||||
@ -204,11 +206,11 @@ void randomBox::createRandomPuzzle()
|
|||||||
//create random piece, set edges according to position and check if piece is good
|
//create random piece, set edges according to position and check if piece is good
|
||||||
temporaryRandomPiece.randomCenterPiece();
|
temporaryRandomPiece.randomCenterPiece();
|
||||||
if(i==0)
|
if(i==0)
|
||||||
temporaryRandomPiece.setConnections(0b00111111 & temporaryRandomPiece.getConnections());
|
temporaryRandomPiece.setConnections(0b00111111 & temporaryRandomPiece.getConnections());
|
||||||
if(i==getRows()-1)
|
if(i==getRows()-1)
|
||||||
temporaryRandomPiece.setConnections(0b11110011 & temporaryRandomPiece.getConnections());
|
temporaryRandomPiece.setConnections(0b11110011 & temporaryRandomPiece.getConnections());
|
||||||
if(j==0)
|
if(j==0)
|
||||||
temporaryRandomPiece.setConnections(0b11111100 & temporaryRandomPiece.getConnections());
|
temporaryRandomPiece.setConnections(0b11111100 & temporaryRandomPiece.getConnections());
|
||||||
if(j==getCols()-1)
|
if(j==getCols()-1)
|
||||||
temporaryRandomPiece.setConnections(0b11001111 & temporaryRandomPiece.getConnections());
|
temporaryRandomPiece.setConnections(0b11001111 & temporaryRandomPiece.getConnections());
|
||||||
|
|
||||||
@ -217,23 +219,75 @@ void randomBox::createRandomPuzzle()
|
|||||||
if(PlaceOfPartGood(myCoor,temporaryRandomPiece))
|
if(PlaceOfPartGood(myCoor,temporaryRandomPiece))
|
||||||
{
|
{
|
||||||
temporaryRandomPiece.assignIdentifier();
|
temporaryRandomPiece.assignIdentifier();
|
||||||
|
<<<<<<< HEAD
|
||||||
setPiece(myCoor,temporaryRandomPiece);
|
setPiece(myCoor,temporaryRandomPiece);
|
||||||
|
/*=======
|
||||||
|
setPiece(j,i,temporaryRandomPiece);
|
||||||
|
>>>>>>> 9b282e83caf9aaacea107f878d2d6b3f413f286b
|
||||||
|
*/
|
||||||
j++;
|
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<cv::Mat> 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
|
//prints a box contents on console
|
||||||
void randomBox::printBox()
|
void randomBox::printBox()
|
||||||
{
|
{
|
||||||
shuffle();
|
shuffle();
|
||||||
for (vector<PuzzlePiece>::iterator i = Box.begin(); i != Box.end(); i++)
|
for (vector<PuzzlePiece>::iterator i = Box.begin(); i != Box.end(); i++)
|
||||||
{
|
{
|
||||||
(*i).printPiece();
|
(*i).printPiece();
|
||||||
cout << ' ';
|
cout << ' ';
|
||||||
}
|
}
|
||||||
cout << endl;
|
cout << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,8 +295,12 @@ void randomBox::printBox()
|
|||||||
vector<PuzzlePiece> randomBox::shuffle()
|
vector<PuzzlePiece> randomBox::shuffle()
|
||||||
{
|
{
|
||||||
random_shuffle(Box.begin(),Box.end());
|
random_shuffle(Box.begin(),Box.end());
|
||||||
for (vector<PuzzlePiece>::iterator i = Box.begin(); i != Box.end(); i++)
|
for (vector<PuzzlePiece>::iterator i = Box.begin(); i != Box.end(); i++)
|
||||||
(*i).shift(rand()%4);
|
{
|
||||||
|
i->shift(rand()%4);
|
||||||
|
i->resetShift();
|
||||||
|
}
|
||||||
|
|
||||||
numerateBox(Box);
|
numerateBox(Box);
|
||||||
return Box;
|
return Box;
|
||||||
}
|
}
|
||||||
@ -250,20 +308,32 @@ vector<PuzzlePiece> randomBox::shuffle()
|
|||||||
//creates a random box size m, n, shuffles it, and then retuns it
|
//creates a random box size m, n, shuffles it, and then retuns it
|
||||||
vector<PuzzlePiece> createBox(coor myCoor)
|
vector<PuzzlePiece> createBox(coor myCoor)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
<<<<<<< HEAD
|
||||||
randomBox myFirstPuzzleBox(myCoor.m, myCoor.n);
|
randomBox myFirstPuzzleBox(myCoor.m, myCoor.n);
|
||||||
myFirstPuzzleBox.createRandomPuzzle();
|
myFirstPuzzleBox.createRandomPuzzle();
|
||||||
return myFirstPuzzleBox.shuffle();
|
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
|
//prints contents of box
|
||||||
void printBox(vector<PuzzlePiece> myBox)
|
void printBox(vector<PuzzlePiece> myBox)
|
||||||
{
|
{
|
||||||
cout << "current Box: " << endl;
|
cout << "current Box: " << endl;
|
||||||
for (vector<PuzzlePiece>::iterator i = myBox.begin(); i != myBox.end(); i++)
|
for (vector<PuzzlePiece>::iterator i = myBox.begin(); i != myBox.end(); i++)
|
||||||
{
|
{
|
||||||
(*i).printPiece();
|
(*i).printPiece();
|
||||||
cout << ' ';
|
cout << ' ';
|
||||||
}
|
}
|
||||||
cout << endl;
|
cout << endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#include "../../header.h"
|
||||||
|
|
||||||
void status(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat);
|
void status(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat);
|
||||||
|
|
||||||
|
|
||||||
@ -66,15 +68,6 @@ bool next(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
coor calculateFirstCoor(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat)
|
|
||||||
{
|
|
||||||
//returns coor of first piece
|
|
||||||
coor firstCoor(0,0);
|
|
||||||
return firstCoor;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
coor calculateNextCoor(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat)
|
coor calculateNextCoor(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat)
|
||||||
{
|
{
|
||||||
//level 1:
|
//level 1:
|
||||||
@ -135,10 +128,10 @@ void abstractionlayer1solver(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box,
|
|||||||
log.back().PieceCollector.erase(log.back().PieceCollector.begin()+i);
|
log.back().PieceCollector.erase(log.back().PieceCollector.begin()+i);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
i++; //otherwise loop stops before end!
|
|
||||||
//set shift to 0 so that we have a defined starting position for all pieces
|
//set shift to 0 so that we have a defined starting position for all pieces
|
||||||
while(log.back().PieceCollector[i]->getShift())
|
while(log.back().PieceCollector[i]->getShift())
|
||||||
log.back().PieceCollector[i]->shift(1);
|
log.back().PieceCollector[i]->shift(1);
|
||||||
|
i++; //otherwise loop stops before end!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,15 +5,10 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
#define MAX_ABSTRAX 1
|
||||||
|
#define structdebug
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
#include "header/input.h"
|
#include "header/input.h"
|
||||||
#include "header/solve.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"
|
|
||||||
|
|
||||||
|
@ -3,6 +3,10 @@
|
|||||||
class Part
|
class Part
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
double r;
|
||||||
|
double g;
|
||||||
|
double b;
|
||||||
|
|
||||||
Part(): connections(0){}
|
Part(): connections(0){}
|
||||||
~Part() {}
|
~Part() {}
|
||||||
uint8_t getConnections() const
|
uint8_t getConnections() const
|
||||||
@ -13,4 +17,6 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
uint8_t connections;
|
uint8_t connections;
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
@ -1,3 +1,8 @@
|
|||||||
|
#include <vector>
|
||||||
|
#include <iostream>
|
||||||
|
#include <opencv2/highgui/highgui.hpp>
|
||||||
|
#include <opencv2/imgproc/imgproc.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
class coor
|
class coor
|
||||||
@ -121,8 +126,10 @@ class randomBox: public Puzzle
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
randomBox(unsigned int m, unsigned int n) : Puzzle(m,n) {srand(time(0));} //passed m n to puzzle constructor
|
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<PuzzlePiece> shuffle();
|
vector<PuzzlePiece> shuffle();
|
||||||
void printBox();
|
void printBox();
|
||||||
|
|
||||||
@ -157,24 +164,11 @@ private:
|
|||||||
static int randomed;
|
static int randomed;
|
||||||
};
|
};
|
||||||
|
|
||||||
class BoxClassify
|
|
||||||
{
|
|
||||||
vector<PuzzlePiece*> p_Box;
|
|
||||||
vector<vector<PuzzlePiece*>> ab1class;
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
int LogEntry::randomed(0);
|
|
||||||
unsigned int PuzzlePiece::idcount(0);
|
|
||||||
|
|
||||||
|
|
||||||
void printBox(vector<PuzzlePiece> myBox);
|
void printBox(vector<PuzzlePiece> myBox);
|
||||||
vector<PuzzlePiece> createBox(coor boxCoor); // 1st change: works
|
vector<PuzzlePiece> createBox(coor myCoor);
|
||||||
void numerateBox(vector<PuzzlePiece>& myBox);
|
void numerateBox(vector<PuzzlePiece>& myBox);
|
||||||
|
|
||||||
bool next(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat);
|
bool next(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat);
|
||||||
coor calculateFirstCoor(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat);
|
|
||||||
coor calculateNextCoor(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat);
|
coor calculateNextCoor(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat);
|
||||||
void solve(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat);
|
void solve(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat);
|
||||||
void abstractionlayer0solver(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat);
|
void abstractionlayer0solver(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat);
|
||||||
|
@ -1,39 +1,22 @@
|
|||||||
#define MAX_ABSTRAX 1
|
|
||||||
#define structdebug
|
|
||||||
|
|
||||||
|
|
||||||
#include "header.h"
|
#include "header.h"
|
||||||
//#include "../Codicil/test_puzzle_long40x40.h"
|
|
||||||
|
int LogEntry::randomed(0);
|
||||||
|
unsigned int PuzzlePiece::idcount(0);
|
||||||
|
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
|
|
||||||
int cols=10, rows=20;
|
int cols=2, rows=3;
|
||||||
//some basic part stuff
|
|
||||||
vector<Part> myFirstPuzzle;
|
|
||||||
Part myFirstPart;
|
|
||||||
myFirstPart.setConnections(0b00101000);
|
|
||||||
myFirstPuzzle.push_back(myFirstPart);
|
|
||||||
|
|
||||||
//some basic random puzzle stuff
|
//some basic random puzzle stuff
|
||||||
randomBox myRandomBox(cols,rows);
|
vector<PuzzlePiece> myFirstBox = createBox(coor(cols,rows));
|
||||||
myRandomBox.createRandomPuzzle();
|
|
||||||
vector<PuzzlePiece> myFirstBox = myRandomBox.shuffle();
|
|
||||||
|
|
||||||
//undo everything and make this puzzle fucking imba hard!!!
|
|
||||||
//need 40x40 for this, so check your status
|
|
||||||
|
|
||||||
//makehard4040puzzle(myFirstBox);
|
|
||||||
|
|
||||||
//some advanced solver stuff
|
//some advanced solver stuff
|
||||||
vector<LogEntry> log;
|
vector<LogEntry> log;
|
||||||
vector<PuzzlePiece*> p_myFirstBox;
|
vector<PuzzlePiece*> p_myFirstBox;
|
||||||
|
|
||||||
//BoxClassify myFirstBox();
|
//BoxClassify myFirstBox();
|
||||||
|
|
||||||
cout << "original puzzle: " << endl;
|
|
||||||
myRandomBox.printPuzzle();
|
|
||||||
cout << endl;
|
cout << endl;
|
||||||
for(int i=0;i<myFirstBox.size();i++)
|
for(int i=0;i<myFirstBox.size();i++)
|
||||||
p_myFirstBox.push_back(&myFirstBox[i]);
|
p_myFirstBox.push_back(&myFirstBox[i]);
|
||||||
|
Loading…
Reference in New Issue
Block a user