public long playGame(final Board start, List<Integer> nextPiece)
	{
		System.out.println(start);
		System.out.println("avail moves: " + nextPiece.size());
		
		Board curBoard = new Board(start);
		int moves = 0;
		long startTime = System.nanoTime();
		List<Board.Direction> moveList;
		do
		{
			moveList = this.nextMoveMultiple(curBoard, nextPiece);
			if (moveList != null)
			{
				for (Board.Direction d : moveList)
				{
					movePrint(d);
					curBoard = curBoard.move(d, nextPiece.get(0));	
					nextPiece.remove(0);
					moves++;
				}
			}		
		}while(moveList != null && !nextPiece.isEmpty());
		
		long duration = System.nanoTime() - startTime;
		System.err.print(this+"\t"+curBoard.scoreOfBoard()+"\t");
		System.err.format("%.3f\n", 1.0e9*moves/duration);
		/*
		System.out.println();
		System.out.print(curBoard);
		System.out.println("Searcher: " + this);
		System.out.println("Score: " + curBoard.scoreOfBoard());
		System.out.println("Played: " + moves);	
		System.out.format("TotalT: %.3f\n", 1.0e-9*duration);
		System.out.format("Mov/S: %.3f\n", 1.0e9*moves/duration);
		System.out.println("---------------");
		*/
		return curBoard.scoreOfBoard();
	}