protected void update(Color winner, Board finalBoard, boolean[][][] moves) {
		sims++; 
		if (winner != turn)
			wins++;
		// Update AMAF (RAVE) values
		if (isLeaf && !isRoot) {
			int parentTurn = parent.turn.ordinal();
			for (Node sibling: parent.children) {
				int x = sibling.recentPoint.x, y = sibling.recentPoint.y;
				if (moves[x][y][parentTurn] == true)
					sibling.updateRAVE(winner);
			}
		}
		// Update criticality values
		if (!isRoot) {
			for (Node sibling: parent.children) {
				int x = sibling.recentPoint.x, y = sibling.recentPoint.y;
				Color color = finalBoard.board[x][y];
				int winIndex = (color == winner ? 0 : 1);
				parent.criticalityCounts[x][y][color.ordinal()][winIndex]++;
			}
		}
		if (!isRoot) {
			moves[recentPoint.x][recentPoint.y][parent.turn.ordinal()] = true;
			parent.update(winner, finalBoard, moves);
		}
	}