1 package featurecat.lizzie.analysis;
2 
3 import featurecat.lizzie.rules.Board;
4 import featurecat.lizzie.rules.BoardData;
5 import featurecat.lizzie.rules.Stone;
6 import java.util.List;
7 import java.util.Optional;
8 
9 public class Branch {
10   public BoardData data;
11 
Branch(Board board, List<String> variation)12   public Branch(Board board, List<String> variation) {
13     int[] moveNumberList = new int[Board.boardSize * Board.boardSize];
14     int moveNumber = 0;
15     double winrate = 0.0;
16     int playouts = 0;
17 
18     this.data =
19         new BoardData(
20             board.getStones().clone(),
21             board.getLastMove(),
22             board.getData().lastMoveColor,
23             board.getData().blackToPlay,
24             board.getData().zobrist.clone(),
25             moveNumber,
26             moveNumberList,
27             board.getData().blackCaptures,
28             board.getData().whiteCaptures,
29             winrate,
30             playouts);
31 
32     for (int i = 0; i < variation.size(); i++) {
33       Optional<int[]> coordOpt = Board.asCoordinates(variation.get(i));
34       if (!coordOpt.isPresent() || !Board.isValid(coordOpt.get()[0], coordOpt.get()[1])) {
35         break;
36       }
37       int[] coord = coordOpt.get();
38       data.lastMove = coordOpt;
39       data.stones[Board.getIndex(coord[0], coord[1])] =
40           data.blackToPlay ? Stone.BLACK_GHOST : Stone.WHITE_GHOST;
41       data.moveNumberList[Board.getIndex(coord[0], coord[1])] = i + 1;
42       data.lastMoveColor = data.blackToPlay ? Stone.WHITE : Stone.BLACK;
43       data.blackToPlay = !data.blackToPlay;
44     }
45   }
46 }
47