#include <iostream>
#include <windows.h>
#include <fstream>

using namespace std;

#include <assert.h>

#include "common.h"

class gameBoard
{
	public:
	gameBoard(int size=8);
	gameBoard(gameBoard &g, int moveNum=1);
	~gameBoard();
	void setInitialPosition(position p);
	void setInitialPosition(int r, int c);
	void setInitialPosition();	// ya that's right, I'm overloading it 3 times!!!
	void displayBoard(int=0);
	void stepThroughSolution();
	gameBoard operator =(const gameBoard &);
	position getKnightPosition();

	bool solve(position startPos, int moveNum, bool showProgress=false, bool bruteForce=false);

	void saveToFile(char filename[], double solveTime=0);

	private:
	int boardSize;
	int visitedSquares;
	position knightPosition;
	square **board;
	void setColor(int color=15);
	int getPossibleMoves(position fromPos);
	int breakTie(position posA, position posB);
};
