From b9a1bf4008ce38646a4c37736f1b5f6078e7467c Mon Sep 17 00:00:00 2001 From: Francesco Bariatti <francesco.bariatti@insa-rennes.fr> Date: Sat, 30 Apr 2016 15:44:21 +0200 Subject: [PATCH] Big GUI refactoring: towards MVC and beyond! --- .gitignore | 1 + gui/src/Case.java | 61 -------------- gui/src/Controller.java | 79 ----------------- gui/src/Main.java | 27 ------ gui/src/Plateau.java | 18 ---- gui/src/Player.java | 6 -- gui/src/UpdateThread.java | 76 ----------------- gui/src/controller/Controller.java | 93 ++++++++++++++++++++ gui/src/controller/UpdateThread.java | 78 +++++++++++++++++ gui/src/main/Main.java | 35 ++++++++ gui/src/{ => model}/GameState.java | 40 ++++----- gui/src/model/Player.java | 6 ++ gui/src/model/Tile.java | 37 ++++++++ gui/src/view/TileView.java | 50 +++++++++++ gui/src/{ => view}/view.fxml | 122 +++++++++++++-------------- 15 files changed, 381 insertions(+), 348 deletions(-) delete mode 100644 gui/src/Case.java delete mode 100644 gui/src/Controller.java delete mode 100644 gui/src/Main.java delete mode 100644 gui/src/Plateau.java delete mode 100644 gui/src/Player.java delete mode 100644 gui/src/UpdateThread.java create mode 100644 gui/src/controller/Controller.java create mode 100644 gui/src/controller/UpdateThread.java create mode 100644 gui/src/main/Main.java rename gui/src/{ => model}/GameState.java (72%) create mode 100644 gui/src/model/Player.java create mode 100644 gui/src/model/Tile.java create mode 100644 gui/src/view/TileView.java rename gui/src/{ => view}/view.fxml (91%) diff --git a/.gitignore b/.gitignore index a97af95..47ffb50 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ gui/.classpath gui/bin gui/.project gui/.settings +gui/out diff --git a/gui/src/Case.java b/gui/src/Case.java deleted file mode 100644 index 44288d9..0000000 --- a/gui/src/Case.java +++ /dev/null @@ -1,61 +0,0 @@ -import javafx.scene.shape.Polygon; - -public class Case { - - private int rang; //N de la case (bottom right = 0, top left = 59) - private int nbFish;//Nb de poissons sur la case (0 si vide) - private Penguins penguins; - private Polygon caseFX; - - - public void setNbFish(int nbFish) - { - this.nbFish = nbFish; - } - - public void setPenguins(Penguins penguins) - { - this.penguins = penguins; - } - - public int getRang() - { - - return rang; - } - - public int getNbFish() - { - return nbFish; - } - - public Penguins getPenguins() - { - return penguins; - } - - public Polygon getCaseFX() - { - return caseFX; - } - - public Case(int rang, Penguins penguins, Polygon caseFX) - { - this.rang = rang; - this.penguins = penguins; - this.caseFX = caseFX; - this.nbFish = 0; - - } - - public Case(int rang, int nbFish, Penguins penguins, Polygon caseFX) { - this(rang, penguins, caseFX); - this.nbFish = nbFish; - } - - public enum Penguins - { - NO_PENGUIN, RED_PENGUIN, BLUE_PENGUIN; - } - -} diff --git a/gui/src/Controller.java b/gui/src/Controller.java deleted file mode 100644 index 7b1432a..0000000 --- a/gui/src/Controller.java +++ /dev/null @@ -1,79 +0,0 @@ -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.net.URL; -import java.util.ResourceBundle; - -import javafx.event.EventHandler; -import javafx.fxml.FXML; -import javafx.fxml.Initializable; -import javafx.scene.control.Alert; -import javafx.scene.control.ButtonType; -import javafx.scene.input.MouseEvent; -import javafx.scene.layout.BorderPane; -import javafx.scene.paint.Color; -import javafx.scene.shape.Polygon; -public class Controller implements Initializable { - - private GameState gameState; - private Process gameProcess; - private PrintWriter gameInput; - private Plateau plateau; - - @FXML - private Polygon case0, case1, case2, case3, case4, case5, case6, case7, case8, case9, case10, case11, case12, case13, case14, case15, case16, case17, case18, case19, case20, case21, case22, case23, case24, case25, case26, case27, case28, case29, case30, case31, case32, case33, case34, case35, case36, case37, case38, case39, case40, case41, case42, case43, case44, case45, case46, case47, case48, case49, case50, case51, case52, case53, case54, case55, case56, case57, case58, case59; - - @FXML - private BorderPane panneauPrincipal; - - @Override - public void initialize(URL location, ResourceBundle resources) { - Polygon[] cases = {case0, case1, case2, case3, case4, case5, case6, case7, case8, case9, case10, case11, case12, case13, case14, case15, case16, case17, case18, case19, case20, case21, case22, case23, case24, case25, case26, case27, case28, case29, case30, case31, case32, case33, case34, case35, case36, case37, case38, case39, case40, case41, case42, case43, case44, case45, case46, case47, case48, case49, case50, case51, case52, case53, case54, case55, case56, case57, case58, case59}; - for(Polygon c : cases) - { - //c.setOnMouseClicked(new MyClickHandler()); - //c.setOnMouseEntered(new MyHexEnteredHandler()); - } - this.plateau = new Plateau(cases); - this.gameState = new GameState(); - try { - this.gameProcess = new ProcessBuilder("../bin/theturk").start(); - gameInput = new PrintWriter(new OutputStreamWriter(gameProcess.getOutputStream()), true); - } catch (IOException e) { - Alert alert = new Alert(Alert.AlertType.ERROR,"Can't run penguin program", ButtonType.OK); - alert.showAndWait(); - e.printStackTrace(); - System.exit(1); - } - UpdateThread upT = new UpdateThread(gameProcess, this.gameState, this.plateau); - upT.setDaemon(true); - upT.start(); - - //We tell the game that we will start - gameInput.print("h"); - gameInput.println(); - gameInput.println("0"); - } - - //public Polygon getPolygonFromCoordinates(double x, double y){ } - - //Action de click sur case - private class MyClickHandler implements EventHandler<MouseEvent> { - @Override - public void handle (MouseEvent event){ - Polygon poly = (Polygon)event.getSource(); - poly.setFill(Color.GOLD); - } - } - - private class MyHexEnteredHandler implements EventHandler<MouseEvent> { - @Override - public void handle (MouseEvent event){ - Polygon poly = (Polygon)event.getSource(); - poly.setFill(Color.GOLD); - } - } - - - -} diff --git a/gui/src/Main.java b/gui/src/Main.java deleted file mode 100644 index eec62e5..0000000 --- a/gui/src/Main.java +++ /dev/null @@ -1,27 +0,0 @@ -import javafx.application.Application; -import javafx.fxml.FXMLLoader; -import javafx.stage.Stage; -import javafx.scene.Scene; -import javafx.scene.layout.BorderPane; - - -public class Main extends Application { - - @Override - public void start(Stage primaryStage) { - try { - FXMLLoader loader = new FXMLLoader(); - loader.setLocation(Main.class.getResource("view.fxml")); - BorderPane root = (BorderPane) loader.load(); - Scene scene = new Scene(root,1024,680); - primaryStage.setScene(scene); - primaryStage.show(); - } catch(Exception e) { - e.printStackTrace(); - } - } - - public static void main(String[] args) { - launch(args); - } -} \ No newline at end of file diff --git a/gui/src/Plateau.java b/gui/src/Plateau.java deleted file mode 100644 index 64cb8d5..0000000 --- a/gui/src/Plateau.java +++ /dev/null @@ -1,18 +0,0 @@ -import javafx.scene.shape.Polygon; - -public class Plateau { - private Case[] grille; - - //Constructeur de grille vide (0 fish, 0 penguins) - public Plateau(Polygon[] casesFX){ - grille = new Case[60]; - for (int i=0; i<casesFX.length ; i++){ - grille[i]= new Case(i, Case.Penguins.NO_PENGUIN, casesFX[i]); - } - } - - public Case[] getGrille() - { - return grille; - } -} diff --git a/gui/src/Player.java b/gui/src/Player.java deleted file mode 100644 index e22d75a..0000000 --- a/gui/src/Player.java +++ /dev/null @@ -1,6 +0,0 @@ - -public enum Player { - RED, BLUE - - //TODO -} diff --git a/gui/src/UpdateThread.java b/gui/src/UpdateThread.java deleted file mode 100644 index efccd05..0000000 --- a/gui/src/UpdateThread.java +++ /dev/null @@ -1,76 +0,0 @@ -import javafx.application.Platform; -import javafx.scene.control.Alert; -import javafx.scene.control.ButtonType; -import javafx.scene.paint.Color; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; - -public class UpdateThread extends Thread -{ - BufferedReader reader; - GameState gameState; - Plateau plateau; - - public UpdateThread(Process program, GameState gameState, Plateau plateau) - { - this.reader = new BufferedReader(new InputStreamReader(program.getInputStream())); - this.gameState = gameState; - this.plateau = plateau; - } - - - public void run() - { - boolean running = true; - while(running) - try - { - String line = reader.readLine(); - System.out.println(line); - if(line == null) - running = false; - else - { - if (line.contains("{")) - { - gameState.update(line.substring(line.indexOf("{"), line.lastIndexOf("}") + 1)); - Platform.runLater(() -> - { - for(Case c : plateau.getGrille()) - { - c.setNbFish(gameState.getNbFish(c.getRang())); - switch (c.getNbFish()) - { - case 0: - c.getCaseFX().setFill(Color.BLUE); - break; - case 1: - c.getCaseFX().setFill(Color.GREEN); - break; - case 2: - c.getCaseFX().setFill(Color.YELLOW); - break; - case 3: - c.getCaseFX().setFill(Color.RED); - break; - } - } - // TODO: 4/27/16 update GUI from state - }); - } - } - } catch (IOException e) - { - running = false; - Platform.runLater(() -> - { - Alert alert = new Alert(Alert.AlertType.ERROR, "Error during reading from penguin program!", ButtonType.FINISH); - e.printStackTrace(); - alert.showAndWait(); - System.exit(1); - }); - } - } -} diff --git a/gui/src/controller/Controller.java b/gui/src/controller/Controller.java new file mode 100644 index 0000000..42bba4d --- /dev/null +++ b/gui/src/controller/Controller.java @@ -0,0 +1,93 @@ +package controller; + +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.Alert; +import javafx.scene.control.ButtonType; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.BorderPane; +import javafx.scene.paint.Color; +import javafx.scene.shape.Polygon; +import model.GameState; +import model.Tile; +import view.TileView; + +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.net.URL; +import java.util.ResourceBundle; + +public class Controller implements Initializable +{ + + private GameState gameState; + private Process gameProcess; + private PrintWriter gameInput; + private Tile[] board; + private TileView[] boardView; + + @FXML + private Polygon tile0, tile1, tile2, tile3, tile4, tile5, tile6, tile7, tile8, tile9, tile10, tile11, tile12, tile13, tile14, tile15, tile16, tile17, tile18, tile19, tile20, tile21, tile22, tile23, tile24, tile25, tile26, tile27, tile28, tile29, tile30, tile31, tile32, tile33, tile34, tile35, tile36, tile37, tile38, tile39, tile40, tile41, tile42, tile43, tile44, tile45, tile46, tile47, tile48, tile49, tile50, tile51, tile52, tile53, tile54, tile55, tile56, tile57, tile58, tile59; + + @FXML + private BorderPane mainPane; + + @Override + public void initialize(URL location, ResourceBundle resources) + { + Polygon[] fxTiles = {tile0, tile1, tile2, tile3, tile4, tile5, tile6, tile7, tile8, tile9, tile10, tile11, tile12, tile13, tile14, tile15, tile16, tile17, tile18, tile19, tile20, tile21, tile22, tile23, tile24, tile25, tile26, tile27, tile28, tile29, tile30, tile31, tile32, tile33, tile34, tile35, tile36, tile37, tile38, tile39, tile40, tile41, tile42, tile43, tile44, tile45, tile46, tile47, tile48, tile49, tile50, tile51, tile52, tile53, tile54, tile55, tile56, tile57, tile58, tile59}; + this.board = new Tile[fxTiles.length]; + this.boardView = new TileView[fxTiles.length]; + for (int i = 0; i < fxTiles.length; i++) + { + board[i] = new Tile(i, Tile.PenguinPresence.NO_PENGUIN); + boardView[i] = new TileView(fxTiles[i], board[i]); + } + this.gameState = new GameState(); + try + { + this.gameProcess = new ProcessBuilder("../bin/theturk").start(); + gameInput = new PrintWriter(new OutputStreamWriter(gameProcess.getOutputStream()), true); + } + catch (IOException e) + { + Alert alert = new Alert(Alert.AlertType.ERROR, "Can't run penguin program", ButtonType.OK); + alert.showAndWait(); + e.printStackTrace(); + System.exit(1); + } + UpdateThread upT = new UpdateThread(gameProcess, this.gameState, this.board, this.boardView); + upT.setDaemon(true); + upT.start(); + + //We tell the game that we will start + gameInput.print("h"); + gameInput.println(); + gameInput.println("0"); + } + + + private class MyClickHandler implements EventHandler<MouseEvent> + { + @Override + public void handle(MouseEvent event) + { + Polygon poly = (Polygon) event.getSource(); + poly.setFill(Color.GOLD); + } + } + + private class MyHexEnteredHandler implements EventHandler<MouseEvent> + { + @Override + public void handle(MouseEvent event) + { + Polygon poly = (Polygon) event.getSource(); + poly.setFill(Color.GOLD); + } + } + + +} diff --git a/gui/src/controller/UpdateThread.java b/gui/src/controller/UpdateThread.java new file mode 100644 index 0000000..0d70aa3 --- /dev/null +++ b/gui/src/controller/UpdateThread.java @@ -0,0 +1,78 @@ +package controller; + +import javafx.application.Platform; +import javafx.scene.control.Alert; +import javafx.scene.control.ButtonType; +import model.GameState; +import model.Player; +import model.Tile; +import view.TileView; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class UpdateThread extends Thread +{ + BufferedReader reader; + GameState gameState; + Tile[] board; + TileView[] boardView; + + public UpdateThread(Process program, GameState gameState, Tile[] board, TileView[] boardView) + { + this.reader = new BufferedReader(new InputStreamReader(program.getInputStream())); + this.gameState = gameState; + this.board = board; + this.boardView = boardView; + } + + + public void run() + { + boolean gameRunning = true; + while (gameRunning) + { + try + { + String line = reader.readLine(); + System.out.println(line); + if (line == null) + { + gameRunning = false; + } + else if (line.contains("{")) //Line contains JSON + { + //UPDATE MODEL + gameState.update(line.substring(line.indexOf("{"), line.lastIndexOf("}") + 1)); //Extract JSON string + for (int i = 0; i < board.length; i++) + { + board[i].setNbFish(gameState.getNbFish(i)); + board[i].setPenguinPresence(Tile.PenguinPresence.NO_PENGUIN); + } + for (int i = 0; i < 4; i++) + { + board[gameState.getPenguinPos(i, Player.Red)].setPenguinPresence(Tile.PenguinPresence.RED_PENGUIN); + board[gameState.getPenguinPos(i, Player.Blue)].setPenguinPresence(Tile.PenguinPresence.BLUE_PENGUIN); + } + + //UPDATE VIEW + for (int i = 0; i < boardView.length; i++) + boardView[i].updateFromModel(); + } + } + catch (IOException e) + { + gameRunning = false; + Platform.runLater(() -> + { + Alert alert = new Alert(Alert.AlertType.ERROR, "Error during reading from penguin program!", ButtonType.FINISH); + alert.showAndWait(); + e.printStackTrace(); + System.exit(1); + }); + } + + } + } +} diff --git a/gui/src/main/Main.java b/gui/src/main/Main.java new file mode 100644 index 0000000..96a011f --- /dev/null +++ b/gui/src/main/Main.java @@ -0,0 +1,35 @@ +package main; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Scene; +import javafx.scene.layout.BorderPane; +import javafx.stage.Stage; + + +public class Main extends Application +{ + + public static void main(String[] args) + { + launch(args); + } + + @Override + public void start(Stage primaryStage) + { + try + { + FXMLLoader loader = new FXMLLoader(); + loader.setLocation(Main.class.getResource("../view/view.fxml")); + BorderPane root = (BorderPane) loader.load(); + Scene scene = new Scene(root, 1024, 680); + primaryStage.setScene(scene); + primaryStage.show(); + } + catch (Exception e) + { + e.printStackTrace(); + } + } +} diff --git a/gui/src/GameState.java b/gui/src/model/GameState.java similarity index 72% rename from gui/src/GameState.java rename to gui/src/model/GameState.java index c838e6e..df2dbec 100644 --- a/gui/src/GameState.java +++ b/gui/src/model/GameState.java @@ -1,15 +1,18 @@ -import org.json.*; +package model; + +import org.json.JSONArray; +import org.json.JSONObject; import java.util.HashMap; import java.util.Map; public class GameState { - long[] fish; - boolean can_play_red, can_play_blue; + long[] fish; //Array of three bitboards: one for every fish value + boolean can_play_red, can_play_blue; //If the red(blue) player can play or if it has no moves left Player current_player; - Map<Player, int[]> penguins; - Map<Player, Integer> score; + Map<Player, int[]> penguins; //For every player, the list of his penguins + Map<Player, Integer> score; //Score of every player public GameState() { @@ -22,9 +25,9 @@ public class GameState score.put(Player.Blue, 0); } - public void update (String jsonString){ + public void update(String jsonString) + { //System.out.println(jsonString); - JSONObject json = new JSONObject(jsonString); can_play_red = json.getJSONObject("can_play").getBoolean("red"); can_play_blue = json.getJSONObject("can_play").getBoolean("blue"); @@ -35,12 +38,14 @@ public class GameState score.put(Player.Red, json.getJSONObject("score").getInt("red")); score.put(Player.Blue, json.getJSONObject("score").getInt("blue")); JSONArray jsonPeng = json.getJSONObject("penguins").getJSONArray("red"); - for(int i = 0; i < jsonPeng.length(); i++) + for (int i = 0; i < jsonPeng.length(); i++) penguins.get(Player.Red)[i] = jsonPeng.getInt(i); jsonPeng = json.getJSONObject("penguins").getJSONArray("blue"); - for(int i = 0; i < jsonPeng.length(); i++) + for (int i = 0; i < jsonPeng.length(); i++) penguins.get(Player.Blue)[i] = jsonPeng.getInt(i); - }; + } + + ; /** * @param tileNb The number of the tile we want to know the value of @@ -48,7 +53,7 @@ public class GameState */ public int getNbFish(int tileNb) { - if(((fish[0] >>> tileNb) & 1) == 1) + if (((fish[0] >>> tileNb) & 1) == 1) return 1; else if (((fish[1] >>> tileNb) & 1) == 1) return 2; @@ -57,18 +62,18 @@ public class GameState return 0; } - public int getPenguinPos (int i, Player player) + public int getPenguinPos(int i, Player player) { //TODO - return -1; + return 0; } - public boolean isCan_play_red() + public boolean getCan_play_red() { return can_play_red; } - public boolean isCan_play_blue() + public boolean getCan_play_blue() { return can_play_blue; } @@ -83,9 +88,4 @@ public class GameState return score.get(player); } - enum Player - { - Red,Blue; - } - } diff --git a/gui/src/model/Player.java b/gui/src/model/Player.java new file mode 100644 index 0000000..57ed721 --- /dev/null +++ b/gui/src/model/Player.java @@ -0,0 +1,6 @@ +package model; + +public enum Player +{ + Red, Blue +} diff --git a/gui/src/model/Tile.java b/gui/src/model/Tile.java new file mode 100644 index 0000000..de3cd2a --- /dev/null +++ b/gui/src/model/Tile.java @@ -0,0 +1,37 @@ +package model; + +public class Tile +{ + + private int number; //model.Tile number (bottom right = 0, top left = 59, ascending from right to left) + private int nbFish; //Number of fish on the tile + private PenguinPresence penguinPresence; //If there is a penguin on this tile + + public Tile(int number, int nbFish, PenguinPresence penguinPresence) + { + this.number = number; + this.nbFish = nbFish; + this.penguinPresence = penguinPresence; + } + + public Tile(int number, PenguinPresence penguinPresence) + { + this(number, 0, penguinPresence); + } + + public int getNumber() { return number; } + + public int getNbFish() { return nbFish; } + + public void setNbFish(int nbFish) { this.nbFish = nbFish; } + + public PenguinPresence getPenguinPresence() { return penguinPresence; } + + public void setPenguinPresence(PenguinPresence penguinPresence) { this.penguinPresence = penguinPresence; } + + public enum PenguinPresence + { + NO_PENGUIN, RED_PENGUIN, BLUE_PENGUIN; + } + +} diff --git a/gui/src/view/TileView.java b/gui/src/view/TileView.java new file mode 100644 index 0000000..f95e80f --- /dev/null +++ b/gui/src/view/TileView.java @@ -0,0 +1,50 @@ +package view; + +import javafx.scene.paint.Color; +import javafx.scene.shape.Polygon; +import model.Tile; + +/** + * Class that makes the association between a tile from the model and its representation + */ +public class TileView +{ + private Polygon fxTile; + private Tile modelTile; + + public TileView(Polygon fxTile, Tile modelTile) + { + this.fxTile = fxTile; + this.modelTile = modelTile; + } + + /** + * Tell the view to update according to the model + */ + public void updateFromModel() + { + //TODO: Better tile representation + //FISH NUMBER + switch (modelTile.getNbFish()) + { + case 0: + fxTile.setFill(Color.LIGHTBLUE); + break; + case 1: + fxTile.setFill(Color.GREENYELLOW); + break; + case 2: + fxTile.setFill(Color.GREEN); + break; + case 3: + fxTile.setFill(Color.DARKGREEN); + break; + } + //PENGUIN + if (modelTile.getPenguinPresence().equals(Tile.PenguinPresence.RED_PENGUIN)) + fxTile.setFill(Color.RED); + else if (modelTile.getPenguinPresence().equals(Tile.PenguinPresence.BLUE_PENGUIN)) + fxTile.setFill(Color.BLUE); + + } +} diff --git a/gui/src/view.fxml b/gui/src/view/view.fxml similarity index 91% rename from gui/src/view.fxml rename to gui/src/view/view.fxml index 1fbc622..275ea39 100644 --- a/gui/src/view.fxml +++ b/gui/src/view/view.fxml @@ -5,11 +5,11 @@ <?import javafx.scene.layout.BorderPane?> <?import javafx.scene.shape.Polygon?> -<BorderPane fx:id="panneauPrincipal" xmlns="http://javafx.com/javafx/8.0.71" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Controller"> +<BorderPane fx:id="mainPane" xmlns="http://javafx.com/javafx/8.0.71" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controller.Controller"> <center> <AnchorPane prefHeight="487.0" prefWidth="742.0" BorderPane.alignment="CENTER"> <children> - <Polygon fx:id="case7" fill="#1f93ff" layoutX="39.0" layoutY="434.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile7" fill="#1f93ff" layoutX="39.0" layoutY="434.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -31,7 +31,7 @@ </points> </Polygon> - <Polygon fx:id="case6" fill="#1f93ff" layoutX="89.0" layoutY="434.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile6" fill="#1f93ff" layoutX="89.0" layoutY="434.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -47,7 +47,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case5" fill="#1f93ff" layoutX="139.0" layoutY="434.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile5" fill="#1f93ff" layoutX="139.0" layoutY="434.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -63,7 +63,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case4" fill="#1f93ff" layoutX="189.0" layoutY="434.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile4" fill="#1f93ff" layoutX="189.0" layoutY="434.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -79,7 +79,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case3" fill="#1f93ff" layoutX="239.0" layoutY="434.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile3" fill="#1f93ff" layoutX="239.0" layoutY="434.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -95,7 +95,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case2" fill="#1f93ff" layoutX="289.0" layoutY="434.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile2" fill="#1f93ff" layoutX="289.0" layoutY="434.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -111,7 +111,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case1" fill="#1f93ff" layoutX="339.0" layoutY="434.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile1" fill="#1f93ff" layoutX="339.0" layoutY="434.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -127,7 +127,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case0" fill="#1f93ff" layoutX="389.0" layoutY="434.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile0" fill="#1f93ff" layoutX="389.0" layoutY="434.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -143,7 +143,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case14" fill="#1f93ff" layoutX="64.0" layoutY="389.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile14" fill="#1f93ff" layoutX="64.0" layoutY="389.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -159,7 +159,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case13" fill="#1f93ff" layoutX="114.0" layoutY="389.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile13" fill="#1f93ff" layoutX="114.0" layoutY="389.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -175,7 +175,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case12" fill="#1f93ff" layoutX="164.0" layoutY="389.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile12" fill="#1f93ff" layoutX="164.0" layoutY="389.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -191,7 +191,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case11" fill="#1f93ff" layoutX="214.0" layoutY="389.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile11" fill="#1f93ff" layoutX="214.0" layoutY="389.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -207,7 +207,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case10" fill="#1f93ff" layoutX="264.0" layoutY="389.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile10" fill="#1f93ff" layoutX="264.0" layoutY="389.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -223,7 +223,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case9" fill="#1f93ff" layoutX="314.0" layoutY="389.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile9" fill="#1f93ff" layoutX="314.0" layoutY="389.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -239,7 +239,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case8" fill="#1f93ff" layoutX="364.0" layoutY="389.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile8" fill="#1f93ff" layoutX="364.0" layoutY="389.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -255,7 +255,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case22" fill="#1f93ff" layoutX="39.0" layoutY="344.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile22" fill="#1f93ff" layoutX="39.0" layoutY="344.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -271,7 +271,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case21" fill="#1f93ff" layoutX="89.0" layoutY="344.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile21" fill="#1f93ff" layoutX="89.0" layoutY="344.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -287,7 +287,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case20" fill="#1f93ff" layoutX="139.0" layoutY="344.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile20" fill="#1f93ff" layoutX="139.0" layoutY="344.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -303,7 +303,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case19" fill="#1f93ff" layoutX="189.0" layoutY="344.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile19" fill="#1f93ff" layoutX="189.0" layoutY="344.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -319,7 +319,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case18" fill="#1f93ff" layoutX="239.0" layoutY="344.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile18" fill="#1f93ff" layoutX="239.0" layoutY="344.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -335,7 +335,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case17" fill="#1f93ff" layoutX="289.0" layoutY="344.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile17" fill="#1f93ff" layoutX="289.0" layoutY="344.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -351,7 +351,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case16" fill="#1f93ff" layoutX="339.0" layoutY="344.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile16" fill="#1f93ff" layoutX="339.0" layoutY="344.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -367,7 +367,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case15" fill="#1f93ff" layoutX="389.0" layoutY="344.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile15" fill="#1f93ff" layoutX="389.0" layoutY="344.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -383,7 +383,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case29" fill="#1f93ff" layoutX="64.0" layoutY="299.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile29" fill="#1f93ff" layoutX="64.0" layoutY="299.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -399,7 +399,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case28" fill="#1f93ff" layoutX="114.0" layoutY="299.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile28" fill="#1f93ff" layoutX="114.0" layoutY="299.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -415,7 +415,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case27" fill="#1f93ff" layoutX="164.0" layoutY="299.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile27" fill="#1f93ff" layoutX="164.0" layoutY="299.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -431,7 +431,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case26" fill="#1f93ff" layoutX="214.0" layoutY="299.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile26" fill="#1f93ff" layoutX="214.0" layoutY="299.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -447,7 +447,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case25" fill="#1f93ff" layoutX="264.0" layoutY="299.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile25" fill="#1f93ff" layoutX="264.0" layoutY="299.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -463,7 +463,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case24" fill="#1f93ff" layoutX="314.0" layoutY="299.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile24" fill="#1f93ff" layoutX="314.0" layoutY="299.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -479,7 +479,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case23" fill="#1f93ff" layoutX="364.0" layoutY="299.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile23" fill="#1f93ff" layoutX="364.0" layoutY="299.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -495,7 +495,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case37" fill="#1f93ff" layoutX="39.0" layoutY="254.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile37" fill="#1f93ff" layoutX="39.0" layoutY="254.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -511,7 +511,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case36" fill="#1f93ff" layoutX="89.0" layoutY="254.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile36" fill="#1f93ff" layoutX="89.0" layoutY="254.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -527,7 +527,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case35" fill="#1f93ff" layoutX="139.0" layoutY="254.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile35" fill="#1f93ff" layoutX="139.0" layoutY="254.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -543,7 +543,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case34" fill="#1f93ff" layoutX="189.0" layoutY="254.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile34" fill="#1f93ff" layoutX="189.0" layoutY="254.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -559,7 +559,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case33" fill="#1f93ff" layoutX="239.0" layoutY="254.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile33" fill="#1f93ff" layoutX="239.0" layoutY="254.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -575,7 +575,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case32" fill="#1f93ff" layoutX="289.0" layoutY="254.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile32" fill="#1f93ff" layoutX="289.0" layoutY="254.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -591,7 +591,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case31" fill="#1f93ff" layoutX="339.0" layoutY="254.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile31" fill="#1f93ff" layoutX="339.0" layoutY="254.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -607,7 +607,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case30" fill="#1f93ff" layoutX="389.0" layoutY="254.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile30" fill="#1f93ff" layoutX="389.0" layoutY="254.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -623,7 +623,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case44" fill="#1f93ff" layoutX="64.0" layoutY="209.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile44" fill="#1f93ff" layoutX="64.0" layoutY="209.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -639,7 +639,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case43" fill="#1f93ff" layoutX="114.0" layoutY="209.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile43" fill="#1f93ff" layoutX="114.0" layoutY="209.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -655,7 +655,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case42" fill="#1f93ff" layoutX="164.0" layoutY="209.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile42" fill="#1f93ff" layoutX="164.0" layoutY="209.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -671,7 +671,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case41" fill="#1f93ff" layoutX="214.0" layoutY="209.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile41" fill="#1f93ff" layoutX="214.0" layoutY="209.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -687,7 +687,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case40" fill="#1f93ff" layoutX="264.0" layoutY="209.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile40" fill="#1f93ff" layoutX="264.0" layoutY="209.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -703,7 +703,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case39" fill="#1f93ff" layoutX="314.0" layoutY="209.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile39" fill="#1f93ff" layoutX="314.0" layoutY="209.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -719,7 +719,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case38" fill="#1f93ff" layoutX="364.0" layoutY="209.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile38" fill="#1f93ff" layoutX="364.0" layoutY="209.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -735,7 +735,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case52" fill="#1f93ff" layoutX="39.0" layoutY="164.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile52" fill="#1f93ff" layoutX="39.0" layoutY="164.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -751,7 +751,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case51" fill="#1f93ff" layoutX="89.0" layoutY="164.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile51" fill="#1f93ff" layoutX="89.0" layoutY="164.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -767,7 +767,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case50" fill="#1f93ff" layoutX="139.0" layoutY="164.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile50" fill="#1f93ff" layoutX="139.0" layoutY="164.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -783,7 +783,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case49" fill="#1f93ff" layoutX="189.0" layoutY="164.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile49" fill="#1f93ff" layoutX="189.0" layoutY="164.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -799,7 +799,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case48" fill="#1f93ff" layoutX="239.0" layoutY="164.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile48" fill="#1f93ff" layoutX="239.0" layoutY="164.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -815,7 +815,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case47" fill="#1f93ff" layoutX="289.0" layoutY="164.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile47" fill="#1f93ff" layoutX="289.0" layoutY="164.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -831,7 +831,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case46" fill="#1f93ff" layoutX="339.0" layoutY="164.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile46" fill="#1f93ff" layoutX="339.0" layoutY="164.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -847,7 +847,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case45" fill="#1f93ff" layoutX="389.0" layoutY="164.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile45" fill="#1f93ff" layoutX="389.0" layoutY="164.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -863,7 +863,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case59" fill="#1f93ff" layoutX="64.0" layoutY="119.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile59" fill="#1f93ff" layoutX="64.0" layoutY="119.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -879,7 +879,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case58" fill="#1f93ff" layoutX="114.0" layoutY="119.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile58" fill="#1f93ff" layoutX="114.0" layoutY="119.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -895,7 +895,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case57" fill="#1f93ff" layoutX="164.0" layoutY="119.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile57" fill="#1f93ff" layoutX="164.0" layoutY="119.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -911,7 +911,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case56" fill="#1f93ff" layoutX="214.0" layoutY="119.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile56" fill="#1f93ff" layoutX="214.0" layoutY="119.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -927,7 +927,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case55" fill="#1f93ff" layoutX="264.0" layoutY="119.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile55" fill="#1f93ff" layoutX="264.0" layoutY="119.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -943,7 +943,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case54" fill="#1f93ff" layoutX="314.0" layoutY="119.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile54" fill="#1f93ff" layoutX="314.0" layoutY="119.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> @@ -959,7 +959,7 @@ <Double fx:value="-15.0" /> </points> </Polygon> - <Polygon fx:id="case53" fill="#1f93ff" layoutX="364.0" layoutY="119.0" stroke="BLACK" strokeType="INSIDE"> + <Polygon fx:id="tile53" fill="#1f93ff" layoutX="364.0" layoutY="119.0" stroke="BLACK" strokeType="INSIDE"> <points> <Double fx:value="-25.0" /> <Double fx:value="15.0" /> -- GitLab