diff --git a/src/comp1110/ass2/gui/Viewer.java b/src/comp1110/ass2/gui/Viewer.java index 1cc87f2..23ee8f4 100644 --- a/src/comp1110/ass2/gui/Viewer.java +++ b/src/comp1110/ass2/gui/Viewer.java @@ -131,21 +131,10 @@ public class Viewer extends Application { root.getChildren().clear(); root.getChildren().add(controls); - // To group the root and adjust their Px sizes accordingly - // to each other - // StackPane rootGroup = new StackPane(); - - // a 13 2; c 0 E; i 6 0,0 0,1 0,2 0,3 1,0 1, - // String gameArrangementState = parts[i]; - // String[] gameArrangementStateParts = gameArrangementState.split(" "); - // int boardHeight = Integer.parseInt(gameArrangementStateParts[1]); - // int boardHeightPx = boardHeight * 45; - GridPane viewerGrid = new GridPane(); String[] parts = stateString.split("; ?"); int boardHeight = 0; int boardHeightPx = 0; -// int tileSize = 500; for ( String part : parts) { String[] parseSplit = part.split(" "); String stateCases = parseSplit[0]; @@ -155,7 +144,6 @@ public class Viewer extends Application { boardHeightPx = 575; viewerGrid.setPrefWidth(boardHeightPx); viewerGrid.setPrefHeight(boardHeightPx); - // viewerGrid.relocate((VIEWER_WIDTH/2-viewerGrid.getPrefWidth()/2), (VIEWER_HEIGHT/2-viewerGrid.getPrefHeight()/2)); // row major order for(int i = 0; i < boardHeight; i++){ @@ -163,10 +151,6 @@ public class Viewer extends Application { Rectangle boardMap = new Rectangle(boardHeightPx/boardHeight, boardHeightPx/boardHeight, Color.DARKBLUE); viewerGrid.add(boardMap, i, j); -// Label boardLabel = new Label(i + "," + j); -// boardLabel.setFont(Font.font("Sans Serif", 12)); -// boardLabel.setTextFill(Color.WHITE); -// viewerGrid.add(boardLabel, i, j); } } break; @@ -200,15 +184,7 @@ public class Viewer extends Application { String[] coords = parseSplit[i].split(","); int xCoord = Integer.parseInt(coords[0]); int yCoord = Integer.parseInt(coords[1]); -// Label islandLabel = new Label(xCoord + "," + yCoord + -// "\n b " + parseSplit[1]); -// islandLabel.setTextFill(Color.GREENYELLOW); -// islandLabel.setFont(Font.font("Sans Serif", 12)); -// viewerGrid.add(islandLabel, xCoord, yCoord); -// viewerGrid.setAlignment(Pos.CENTER); viewerGrid.add(island, xCoord, yCoord); - - // root.getChildren().add(viewerGrid); } break; case "s": @@ -217,7 +193,6 @@ public class Viewer extends Application { - 15, boardHeightPx/boardHeight - 15, Color.GRAY); String[] coords = parseSplit[i].split(","); theRock.setTranslateX(5); -// theRock.setTranslateY(0); viewerGrid.add(theRock, Integer.parseInt(coords[0]), Integer.parseInt(coords[1])); } @@ -226,11 +201,8 @@ public class Viewer extends Application { for(int i = 1; i < parseSplit.length; i++){ switch(parseSplit[i]) { case "C": -// System.out.println("Start of C " + parseSplit[i]); i++; -// System.out.println("First iteration of C" + parseSplit[i]); while(!parseSplit[i].equals("B")){ -// System.out.println("C loop" + parseSplit[i]); String[] coords = parseSplit[i].split(","); Rectangle coconut = new Rectangle(boardHeightPx/boardHeight - 15, boardHeightPx/boardHeight - 15, Color.BROWN); @@ -244,7 +216,6 @@ public class Viewer extends Application { viewerGrid.add(coconutLabel, Integer.parseInt(coords[0]), Integer.parseInt(coords[1])); i++; -// System.out.println("End of C loop" + parseSplit[i]); } i--; break; @@ -326,389 +297,72 @@ public class Viewer extends Application { break; } } -// String[] parseSplit = part.split(" "); -// String stateCases = parseSplit[0]; -// String[] parseSplit = part.split(" "); -// for (String parse : parseSplit) { -// switch (parse) { -// case "C": -// Rectangle coconut = new Rectangle(boardHeightPx/boardHeight -// - 15, boardHeightPx/boardHeight - 15, -// Color.BROWN); -// String[] coords = parseSplit[i].split(","); -// viewerGrid.add(coconut, Integer.parseInt(coords[0]), -// Integer.parseInt(coords[1])); -// } -// } + break; + case "p": + String container = ""; + container += "player " + parseSplit[1] + " with score: " + + parseSplit[2] + ", coconuts: " + parseSplit[3] + + ", bambooo: " + parseSplit[4] + ", statuettes: " + + parseSplit[5] + ", placed settlers at "; + int i = 9; + int counter = 0; + while(!parseSplit[i].equals("T")){ + counter++; + String[] coords = parseSplit[i].split(","); + Rectangle settlers = new Rectangle(boardHeightPx/boardHeight + - 15, boardHeightPx/boardHeight - 15, Color.PINK); + settlers.setTranslateX(5); + Label settlerLabel = new Label("Settlers"); + settlerLabel.setTextFill(Color.BLACK); + settlerLabel.setFont(Font.font("Sans Serif", 9)); + settlerLabel.setTranslateX(5); + viewerGrid.add(settlers, Integer.parseInt(coords[0]), + Integer.parseInt(coords[1])); + viewerGrid.add(settlerLabel, Integer.parseInt(coords[0]), + Integer.parseInt(coords[1])); + if(counter > 1) container += " and "; + container += Integer.parseInt(coords[0]) + "," + + Integer.parseInt(coords[1]); + i++; + } + i++; + + container += ", placed villages at "; + int counterT = 0; + while(i < parseSplit.length){ + counter++; + String[] coords = parseSplit[i].split(","); + Rectangle village = new Rectangle(boardHeightPx/boardHeight + - 15, boardHeightPx/boardHeight - 15, Color.LIGHTGOLDENRODYELLOW); + village.setTranslateX(5); + Label villageLabel = new Label("Village"); + villageLabel.setTextFill(Color.BLACK); + villageLabel.setFont(Font.font("Sans Serif", 9)); + villageLabel.setTranslateX(5); + viewerGrid.add(village, Integer.parseInt(coords[0]), + Integer.parseInt(coords[1])); + viewerGrid.add(villageLabel, Integer.parseInt(coords[0]), + Integer.parseInt(coords[1])); + if(counterT > 1) container += " and "; + container += Integer.parseInt(coords[0]) + "," + + Integer.parseInt(coords[1]); + i++; + } + + Text playerStateText = new Text(); + playerStateText.setText(container); + playerStateText.setFont(Font.font("Sans Serif", + FontWeight.BOLD, 12)); + playerStateText.setX(275); + playerStateText.setY(645); + playerStateText.setTextAlignment(TextAlignment.CENTER); + root.getChildren().add(playerStateText); + playerStateText.setFill(Color.BLACK); // } - // parts[i].matches(" c \\d [ES]") - //String[] parseSplit = part.split(" "); -// break; - //r C 1,1 B 1,2 W P 1,4 S; } } viewerGrid.relocate((VIEWER_WIDTH/2-viewerGrid.getPrefWidth()/2), (VIEWER_HEIGHT/2-viewerGrid.getPrefHeight()/2)); root.getChildren().add(viewerGrid); - - // String currentArrangementState = parts[i]; - //// String[] currentArrangementStateParts = currentArrangementState.split(" "); - //// int playerId = Integer.parseInt(currentArrangementStateParts[2]); - //// String currentArrangementPhaseParts = currentArrangementStateParts[3]; - //// String currentArrangementActualPhase = ""; - //// switch (currentArrangementPhaseParts) { - //// case "E": { - //// currentArrangementActualPhase = "Exploration"; - //// break; - //// } - //// case "S": { - //// currentArrangementActualPhase = "Settler"; - //// break; - //// } - //// } - //// - //// Text currentStateText = new Text(); -// currentStateText.setText("The current player to move is player " + -// playerId + " in the " + currentArrangementActualPhase + -// " phase"); -// currentStateText.setFont(Font.font("Sans Serif", -// FontWeight.BOLD, 20)); -// currentStateText.setX(VIEWER_WIDTH / boardHeight * 3.5); -// currentStateText.setY(50); -// currentStateText.setTextAlignment(TextAlignment.CENTER); -// root.getChildren().add(currentStateText); -// currentStateText.setFill(Color.GREEN); -// -// String[] parts = stateString.split(";"); -// String gameArrangementState = parts[0]; -// String[] gameArrangementStateParts = gameArrangementState.split(" "); -// int boardHeight = Integer.parseInt(gameArrangementStateParts[1]); -// int boardHeightPx = boardHeight * 45; -// int tilePxSize = (boardHeightPx-45) / boardHeight; -// -// Rectangle board = new Rectangle(); -// board.setWidth(boardHeightPx); // width (assume for right now the map is a square -// board.setHeight(boardHeightPx); // height -// board.setX((VIEWER_WIDTH / 2) - board.getWidth() / 2); // starting x loc -// board.setY((VIEWER_HEIGHT / 2) - board.getHeight() / 2); // starting y loc -// board.setFill(Color.DARKBLUE); -// root.getChildren().add(board); -// -// for (int i = 0; i < parts.length; i++) { -//// if(parts[i].matches("a \\d{1,2} \\d")){ -//// Rectangle board = new Rectangle(); -//// board.setWidth(boardHeightPx); // width (assume for right now the map is a square -//// board.setHeight(boardHeightPx); // height -//// board.setX((VIEWER_WIDTH / 2) - board.getWidth()/2); // starting x loc -//// board.setY((VIEWER_HEIGHT / 2) - board.getHeight()/2); // starting y loc -//// board.setFill(Color.DARKBLUE); -//// root.getChildren().add(board); -//// } -// -// if (parts[i].matches(" c \\d [ES]")) { -// String currentArrangementState = parts[i]; -// String[] currentArrangementStateParts = currentArrangementState.split(" "); -// int playerId = Integer.parseInt(currentArrangementStateParts[2]); -// String currentArrangementPhaseParts = currentArrangementStateParts[3]; -// String currentArrangementActualPhase = ""; -// switch (currentArrangementPhaseParts) { -// case "E": { -// currentArrangementActualPhase = "Exploration"; -// break; -// } -// case "S": { -// currentArrangementActualPhase = "Settler"; -// break; -// } -// } -// -// Text currentStateText = new Text(); -// currentStateText.setText("The current player to move is player " + -// playerId + " in the " + currentArrangementActualPhase + -// " phase"); -// currentStateText.setFont(Font.font("Sans Serif", -// FontWeight.BOLD, 20)); -// currentStateText.setX(VIEWER_WIDTH / boardHeight * 3.5); -// currentStateText.setY(50); -// currentStateText.setTextAlignment(TextAlignment.CENTER); -// root.getChildren().add(currentStateText); -// currentStateText.setFill(Color.GREEN); -// } -// -// // i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; -// //a 13 2; c 0 E; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1 -//// a 13 2; c 0 E; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; -//// * i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8 -// -// if (parts[i].matches(" i \\d{1,2} (\\d{1,2},\\d{1,2} )*\\d{1,2},\\d{1,2}")) { -// GridPane islandGrid = new GridPane(); -// String[] islandString = parts[i].split(" "); -// for(int j = 3; j < islandString.length; j++){ -// Rectangle islandTiles = new Rectangle(tilePxSize, tilePxSize, Color.GREEN); -// String[] coords = islandString[j].split(","); -// islandGrid.add(islandTiles, Integer.parseInt(coords[0]), -// Integer.parseInt(coords[1])); -// islandGrid.setTranslateX(board.getX()); -// islandGrid.setTranslateY(board.getY()); -// } -// root.getChildren().add(islandGrid); -// } -// } -// String[] islandString = parts[i].split(" "); -// for (int j = i; j < parts.length; j++) { -// String[] islandString = parts[i].split(" "); -// Text bonusPointIslandText = new Text(); -// bonusPointIslandText.setText("The bonus point for this island is " + -// islandString[2]); -// bonusPointIslandText.setFont(Font.font("Sans Serif", -// FontWeight.BOLD, 10)); -// bonusPointIslandText.setX(50); -// bonusPointIslandText.setY(150); -// bonusPointIslandText.setTextAlignment(TextAlignment.CENTER); -// root.getChildren().add(bonusPointIslandText); -// bonusPointIslandText.setFill(Color.RED); -//// System.out.println("Parts[i] : " + parts[j]); -// for (int k = 3; k < islandString.length; k++) { -// String[] islandCoords = islandString[k].split(","); -// System.out.println("IslandString: " + islandString[k]); -// Rectangle island = new Rectangle( -// Integer.parseInt(islandCoords[0]) * boardHeight, -// Integer.parseInt(islandCoords[1]) * boardHeight, -// (boardHeightPx - 100) / boardHeight, -// (boardHeightPx - 100) / boardHeight -// ); -//// island.setX((VIEWER_WIDTH / 2) - (board.getWidth()/2) + 50); -//// island.setY((VIEWER_HEIGHT / 2) - (board.getHeight()/2) + 50); -// island.setTranslateX((VIEWER_WIDTH / 2) - board.getWidth() / 2 + 50); -// island.setTranslateY((VIEWER_HEIGHT / 2) - board.getHeight() / 2 + 50); -// island.setFill(Color.GREEN); -// root.getChildren().add(island); -// } -// } -// } - - // if (k == 2) { -// Text bonusPointIslandText = new Text(); -// bonusPointIslandText.setText("The bonus point for this island is " + -// islandString[2]); -// bonusPointIslandText.setFont(Font.font("Sans Serif", -// FontWeight.BOLD, 10)); -// bonusPointIslandText.setX(50); -// bonusPointIslandText.setY(150); -// bonusPointIslandText.setTextAlignment(TextAlignment.CENTER); -// root.getChildren().add(bonusPointIslandText); -// bonusPointIslandText.setFill(Color.RED); -// } else { -// Label rectangleLabel = new Label(); - -// for(int j = i+1; j < islandString.length; j++){ -// Label rectangleLabel = new Label(); -// if(j == 3) { -// Text bonusPointIslandText = new Text(); -// bonusPointIslandText.setText("The bonus point for this island is " + -// islandString[j]); -// bonusPointIslandText.setFont(Font.font("Sans Serif", -// FontWeight.BOLD, 20)); -// bonusPointIslandText.setX(50); -// bonusPointIslandText.setY(150); -// bonusPointIslandText.setTextAlignment(TextAlignment.CENTER); -// root.getChildren().add(bonusPointIslandText); -// bonusPointIslandText.setFill(Color.GREEN); -// } -// String[] islandCoords = islandString[j].split(","); -// Rectangle island = new Rectangle( -// Integer.parseInt(islandCoords[0]) * boardHeight, -// Integer.parseInt(islandCoords[1]) * boardHeight, -// boardHeightPx - 100 / boardHeight, -// boardHeightPx - 100 / boardHeight -// ); -// island.setX((VIEWER_WIDTH / 2) - (board.getWidth()/2) + 50); -// island.setY((VIEWER_HEIGHT / 2) - (board.getHeight()/2) + 50); -// island.setTranslateX((VIEWER_WIDTH / 2) - board.getWidth() / 2 + 50); -// island.setTranslateY((VIEWER_HEIGHT / 2) - board.getHeight() / 2 + 50); -// island.setFill(Color.GREEN); -// root.getChildren().add(island); -// } -// System.out.println("tod"); -// for (int j = 2; j < parts.length; j++) { -// String[] islandString = parts[j].split(" "); -// System.out.println("Parts[j] : " + parts[j]); -// for (int k = 3; k < islandString.length; k++) { -// Label rectangleLabel = new Label(); -// String[] islandCoords = islandString[k].split(","); -// System.out.println("IslandString: " + islandString[k]); -// Rectangle island = new Rectangle( -// Integer.parseInt(islandCoords[0]) * boardHeight, -// Integer.parseInt(islandCoords[1]) * boardHeight, -// (boardHeightPx - 100) / boardHeight, -// (boardHeightPx - 100) / boardHeight -// ); -//// island.setX((VIEWER_WIDTH / 2) - (board.getWidth()/2) + 50); -//// island.setY((VIEWER_HEIGHT / 2) - (board.getHeight()/2) + 50); -// island.setTranslateX((VIEWER_WIDTH / 2) - board.getWidth() / 2 + 50); -// island.setTranslateY((VIEWER_HEIGHT / 2) - board.getHeight() / 2 + 50); -// island.setFill(Color.GREEN); -// root.getChildren().add(island); -// } -// } -// } -// switch(parts[i]){ -// if() -// // case "a": { -// String gameArrangementState = parts[i]; -// String[] gameArrangementStateParts = gameArrangementState.split(" "); -// int boardHeight = Integer.parseInt(gameArrangementStateParts[1]); -// int boardHeightPx = boardHeight * 45; -// -// Rectangle board = new Rectangle(); -// board.setWidth(boardHeightPx); // width (assume for right now the map is a square -// board.setHeight(boardHeightPx); // height -// board.setX((VIEWER_WIDTH / 2) - board.getWidth()/2); // starting x loc -// board.setY((VIEWER_HEIGHT / 2) - board.getHeight()/2); // starting y loc -// board.setFill(Color.DARKBLUE); -// root.getChildren().add(board); -// } -// } - // } -/* - // Part 1 done (Game Arrangement State) - String[] parts = stateString.split(";"); - String gameArrangementState = parts[0]; - String[] gameArrangementStateParts = gameArrangementState.split(" "); - int boardHeight = Integer.parseInt(gameArrangementStateParts[1]); - int boardHeightPx = boardHeight * 45; - - Rectangle board = new Rectangle(); - board.setWidth(boardHeightPx); // width (assume for right now the map is a square - board.setHeight(boardHeightPx); // height - board.setX((VIEWER_WIDTH / 2) - board.getWidth()/2); // starting x loc - board.setY((VIEWER_HEIGHT / 2) - board.getHeight()/2); // starting y loc - board.setFill(Color.DARKBLUE); - root.getChildren().add(board); - - // Part 2 (Current Arrangement State) - String currentArrangementState = parts[1]; - String[] currentArrangementStateParts = currentArrangementState.split(" "); - int playerId = Integer.parseInt(currentArrangementStateParts[2]); - String currentArrangementPhaseParts = currentArrangementStateParts[3]; - String currentArrangementActualPhase = ""; - switch(currentArrangementPhaseParts) { - case "E": { - currentArrangementActualPhase = "Exploration"; - break; - } - case "S": { - currentArrangementActualPhase = "Settler"; - break; - } - } - - Text currentStateText = new Text(); - currentStateText.setText("The current player to move is player " + - playerId + " in the " + currentArrangementActualPhase + - " phase"); - currentStateText.setFont(Font.font("Sans Serif", - FontWeight.BOLD, 20)); - currentStateText.setX(VIEWER_WIDTH/boardHeight*3.5); - currentStateText.setY(50); - currentStateText.setTextAlignment(TextAlignment.CENTER); - root.getChildren().add(currentStateText); - currentStateText.setFill(Color.GREEN); - - // rootGroup.getChildren().addAll(currentStateText,board); - - //Before doing part 3, make the board and the current state adjustable to each - // by that I mean, when the board size adjusted, the current state is also - // adjusted - - // The input is below - // a 13 2; c 0 E; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; - - // statement = parts - // Part 3 (Many Island Statements) - for(int i = 2; i < parts.length; i++){ - String[] islandString = parts[i].split(" "); - System.out.println("Parts[i] : " + parts[i]); - for(int j = 3; j < islandString.length; j++){ - Label rectangleLabel = new Label(); - String[] islandCoords = islandString[j].split(","); - System.out.println("IslandString: " + islandString[j]); - Rectangle island = new Rectangle( - Integer.parseInt(islandCoords[0]) * boardHeight, - Integer.parseInt(islandCoords[1]) * boardHeight, - (boardHeightPx - 100) / boardHeight, - (boardHeightPx - 100) / boardHeight - ); -// island.setX((VIEWER_WIDTH / 2) - (board.getWidth()/2) + 50); -// island.setY((VIEWER_HEIGHT / 2) - (board.getHeight()/2) + 50); - island.setTranslateX((VIEWER_WIDTH / 2) - board.getWidth()/2 + 50); - island.setTranslateY((VIEWER_HEIGHT / 2) - board.getHeight()/2 + 50); - island.setFill(Color.GREEN); - root.getChildren().add(island); - } - } - - */ - - -// TilePane pane = new TilePane(); -// pane.setTileAlignment(Pos.CENTER); -// -// for(int i = 1; i <= boardHeight; i++){ -// for(int j = 1; j <= boardHeight; j++){ -// pane.getChildren().add(new Button(i + "," + j)); -// } -// } -// root.getChildren().add(pane); -// JFrame frame = new JFrame(); -// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); -// frame.setSize(500,500); -// frame.setVisible(true); -// frame.setLayout(new GridLayout(boardHeight, boardHeight)); -// -// for(int i = 1; i <= boardHeight; i++){ -// for(int j = 1; j <= boardHeight; j++){ -// frame.add(new JButton(i + "," + j)); -// } -// } -// -// frame.setVisible(true); - //root.getChildren().add(frame); - - -// TilePane tile = new TilePane(); -// tile.setHgap(8); -// tile.setPrefColumns(13); -// for (int i = 0; i < 20; i++){ -// root.getChildren().add(tile); -// } - -// TilePane tileVer = new TilePane(Orientation.VERTICAL); -// tile.setTileAlignment(Pos.CENTER_LEFT); -// tile.setPrefRows(10); -// for (int i = 0; i < 50; i++) { -// tileVer.getChildren().add(new ImageView(...)); -// } - // Make hexagonal tiles inside the board - // CoordsPx < coords * 45 as "*45" is the px constant for the board - - /* - [Many Island Statements] - * islandStatement = "i ", bonus, {" ", coordinate}, ";" - * - * where bonus is a non-negative integer. - * - * e.g. "i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1;" - * - * ^ The first island (top left) of the standard map - * - * e.g. "i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8;" - * - * ^ The second island (top middle) of the standard map - * - * e.g. "i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2;" - * - * ^ A sequence of three island statements appearing in the standard game string - */ // FIXME Task 5 }