TreeStragety

package model;

import java.util.ArrayList;
import java.util.List;

public class TreeStragety extends AbstractStrategy {

	List<BoardNode>[] tree = new ArrayList[1];

	public TreeStragety(Board board) {
		super(board);

		List<BoardNode> initList = new ArrayList<BoardNode>();
		initList.add(new BoardNode(new Board(board), -1, -1));

		tree[0] = initList;
	}

	@Override
	public Hand nextSelect() {
		// TODO 自動生成されたメソッド・スタブ
		return null;
	}

	@Override
	public Hand nextMove() {
		// TODO 自動生成されたメソッド・スタブ
		return null;
	}

	@Override
	public void nextTree(boolean isFirst) {
		List<BoardNode>[] newTree = new ArrayList[tree.length + 1];

		for (int i = 0; i < tree.length; i++) {
			newTree[i] = tree[i];
		}
		newTree[newTree.length - 1] = new ArrayList<BoardNode>();

		tree = newTree;

		// 新しいノード
		for (int i = 0; i < tree[tree.length - 2].size(); i++) {
			Board board = tree[tree.length - 2].get(i).getBoard();

			AbstractPiece[][] mainBoard = board.getMainBoard();
			List<AbstractPiece> inventory = board.getInventorys()[isFirst ? 0 : 1];

			// mainBoard
			for (int j = 0; j < mainBoard.length; j++) {
				for (int k = 0; k < mainBoard[j].length; k++) {
					if (mainBoard[j][k] != null && mainBoard[j][k].isFirst() == isFirst) {
						boolean[][] movablePlace = board.getMobablePlace(mainBoard[j][k]);
						for (int l = 0; l < movablePlace.length; l++) {
							for (int m = 0; m < movablePlace[l].length; m++) {
								if (movablePlace[l][m]) {
									Board addBoard = new Board(board);
									addBoard.select(new Hand(j * 3 + k, isFirst));
									addBoard.move(new Hand(l * 3 + m, isFirst));
									tree[tree.length - 1].add(new BoardNode(addBoard, i, -1));
								}
							}
						}
					}
				}
			}

			// inventory
			for (int j = 0; j < inventory.size(); j++) {
				boolean[][] movablePlace = board.getMobablePlace(inventory.get(j));
				for (int k = 0; k < movablePlace.length; k++) {
					for (int l = 0; l < movablePlace[l].length; l++) {
						if (movablePlace[k][l]) {
							Board addBoard = new Board(board);
							addBoard.select(new Hand(12 + 6 * (isFirst ? 0 : 1) + j, isFirst));
							addBoard.move(new Hand(k * 3 + l, isFirst));
							tree[tree.length - 1].add(new BoardNode(addBoard, i, -1));
						}
					}
				}
			}
		}

	}

	@Override
	public List<BoardNode>[] getTree() {
		return tree;
	}
}