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