From 86e898b54b5f14cad5a030c27d75e7f4fb3d03a9 Mon Sep 17 00:00:00 2001 From: yamyamyam Date: Tue, 5 Apr 2022 20:22:39 -0400 Subject: [PATCH 1/6] Created RowGameBoardView and RowGameStatus for a composite design pattern, and adjusted RowGameGui accordingly to the changes --- tictactoe/src/view/RowGameBoardView.java | 15 ++++++++ tictactoe/src/view/RowGameGUI.java | 47 +++++++++++++++++------ tictactoe/src/view/RowGameStatusView.java | 39 +++++++++++++++++++ 3 files changed, 89 insertions(+), 12 deletions(-) create mode 100644 tictactoe/src/view/RowGameBoardView.java create mode 100644 tictactoe/src/view/RowGameStatusView.java diff --git a/tictactoe/src/view/RowGameBoardView.java b/tictactoe/src/view/RowGameBoardView.java new file mode 100644 index 00000000..dc93d1a4 --- /dev/null +++ b/tictactoe/src/view/RowGameBoardView.java @@ -0,0 +1,15 @@ +package view; + +import javax.swing.JButton; + +import model.RowGameModel; + +public class RowGameBoardView { + public JButton[][] blocks = new JButton[3][3]; + + public void update(RowGameModel gameModel, int row, int column) { + blocks[row][column].setText(gameModel.blocksData[row][column].getContents()); + blocks[row][column].setEnabled(gameModel.blocksData[row][column].getIsLegalMove()); + } + +} diff --git a/tictactoe/src/view/RowGameGUI.java b/tictactoe/src/view/RowGameGUI.java index bde278f4..375cf5ee 100644 --- a/tictactoe/src/view/RowGameGUI.java +++ b/tictactoe/src/view/RowGameGUI.java @@ -2,20 +2,23 @@ import javax.swing.JButton; import javax.swing.JFrame; -import javax.swing.JTextArea; import javax.swing.JPanel; import java.awt.*; import java.awt.event.*; import model.RowGameModel; +import view.RowGameStatusView.GameStatus; import controller.RowGameController; public class RowGameGUI { public JFrame gui = new JFrame("Tic Tac Toe"); public RowGameModel gameModel = new RowGameModel(); - public JButton[][] blocks = new JButton[3][3]; + //public JButton[][] blocks = new JButton[3][3]; public JButton reset = new JButton("Reset"); - public JTextArea playerturn = new JTextArea(); + //public JTextArea playerturn = new JTextArea(); + public RowGameBoardView boardView = new RowGameBoardView(); + public RowGameStatusView statusView = new RowGameStatusView(); + /** * Creates a new game initializing the GUI. @@ -38,8 +41,8 @@ public RowGameGUI(RowGameController controller) { gui.add(options, BorderLayout.CENTER); gui.add(messages, BorderLayout.SOUTH); - messages.add(playerturn); - playerturn.setText("Player 1 to play 'X'"); + messages.add(statusView.playerturn); + this.updateStatus(GameStatus.START); reset.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -50,12 +53,12 @@ public void actionPerformed(ActionEvent e) { // Initialize a JButton for each cell of the 3x3 game board. for(int row = 0; row<3; row++) { for(int column = 0; column<3 ;column++) { - blocks[row][column] = new JButton(); - blocks[row][column].setPreferredSize(new Dimension(75,75)); - game.add(blocks[row][column]); - blocks[row][column].addActionListener(new ActionListener() { + boardView.blocks[row][column] = new JButton(); + boardView.blocks[row][column].setPreferredSize(new Dimension(75,75)); + game.add(boardView.blocks[row][column]); + boardView.blocks[row][column].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - controller.move((JButton)e.getSource()); + controller.move((JButton)e.getSource()); } }); } @@ -71,7 +74,27 @@ public void actionPerformed(ActionEvent e) { * @param column The column that contains the block */ public void updateBlock(RowGameModel gameModel, int row, int column) { - blocks[row][column].setText(gameModel.blocksData[row][column].getContents()); - blocks[row][column].setEnabled(gameModel.blocksData[row][column].getIsLegalMove()); + this.boardView.update(gameModel, row, column); + } + + /** + * Gets the block + * + * @return block + */ + public JButton[][] getBlocks(){ + return this.boardView.blocks; + } + + public void updateStatus(GameStatus status){ + statusView.update(status); + } + + public void disableButtons(){ + for(int row = 0;row<3;row++) { + for(int column = 0;column<3;column++) { + this.getBlocks()[row][column].setEnabled(false); + } + } } } diff --git a/tictactoe/src/view/RowGameStatusView.java b/tictactoe/src/view/RowGameStatusView.java new file mode 100644 index 00000000..735ea23e --- /dev/null +++ b/tictactoe/src/view/RowGameStatusView.java @@ -0,0 +1,39 @@ +package view; + +import javax.swing.JTextArea; + +/** + * Type safety using enums + */ +public class RowGameStatusView { + public enum GameStatus { + P1WIN, P2WIN, DRAW, P1TURN, P2TURN, START + } + + public JTextArea playerturn = new JTextArea(); + + public void update(GameStatus status){ + switch(status){ + case START: + this.playerturn.setText("Player 1 to play 'X'"); + break; + case P1TURN: + this.playerturn.setText("'X': Player 1"); + break; + case P2TURN: + this.playerturn.setText("'O': Player 2"); + break; + case P1WIN: + this.playerturn.setText("Player 1 wins!"); + break; + case P2WIN: + this.playerturn.setText("Player 2 wins!"); + break; + case DRAW: + this.playerturn.setText("Game ends in a draw"); + break; + default: + break; + } + } +} From 674058a95f8a2965e2a6d4be6091b8e3c8c36bbb Mon Sep 17 00:00:00 2001 From: yamyamyam Date: Tue, 5 Apr 2022 21:12:38 -0400 Subject: [PATCH 2/6] Added enumeration and set up enumeration for both RowGameModel and RowBlockModel, also added helper functions such as getPiece() and getFinalResult --- tictactoe/src/model/RowBlockModel.java | 69 +++++++++++++++++++++----- tictactoe/src/model/RowGameModel.java | 17 +++++-- 2 files changed, 68 insertions(+), 18 deletions(-) diff --git a/tictactoe/src/model/RowBlockModel.java b/tictactoe/src/model/RowBlockModel.java index f7029df1..b334c921 100644 --- a/tictactoe/src/model/RowBlockModel.java +++ b/tictactoe/src/model/RowBlockModel.java @@ -1,10 +1,29 @@ package model; +import model.RowGameModel.Player; + /** * The TicTacToeBlock class represents a given block in the game. */ public class RowBlockModel { + /** + * Used enum to distinguish the pieces for each player + */ + public enum PlayerPiece { + Empty(""), + X("X"), + O("O"); + + private final String str; + PlayerPiece(String str){ + this.str = str; + } + @Override + public String toString() { + return this.str; + } + } /** * The game that contains this block */ @@ -13,7 +32,7 @@ public class RowBlockModel /** * The current value of the contents of this block */ - private String contents; + private PlayerPiece contents; /** * Whether or not it is currently legal to move into this block @@ -23,20 +42,26 @@ public class RowBlockModel /** * Creates a new block that will be contained in the given game. * - * @param game The game that will contain the new block + * @param rowGameModel The game that will contain the new block * @throws IllegalArgumentException When the given game is null */ - public RowBlockModel(RowGameModel game) { + public RowBlockModel(RowGameModel rowGameModel) { super(); - if (game == null) { + if (rowGameModel == null) { throw new IllegalArgumentException("The game must be non-null."); } - this.game = game; + this.game = rowGameModel; this.reset(); } + public RowBlockModel(RowBlockModel block){ + this.game = block.game; + this.contents = block.contents; + this.isLegalMove = block.isLegalMove; + } + public RowGameModel getGame() { return this.game; } @@ -47,11 +72,20 @@ public RowGameModel getGame() { * @param value The new value for the contents of this block * @throws IllegalArgumentException When the given value is null */ - public void setContents(String value) { - if (value == null) { - throw new IllegalArgumentException("The value must be non-null."); - } - this.contents = value; + public void setPiece(PlayerPiece playerPiece) { + if (playerPiece == null) { + throw new IllegalArgumentException("The value must be non-null."); + } + this.contents = playerPiece; + if(playerPiece == PlayerPiece.Empty){ + this.isLegalMove = true; + } else{ + this.isLegalMove = false; + } + } + + public PlayerPiece getPiece(){ + return this.contents; } /** @@ -60,7 +94,7 @@ public void setContents(String value) { * @return The non-null String value */ public String getContents() { - return this.contents; + return this.contents.toString(); } public void setIsLegalMove(boolean isLegalMove) { @@ -75,7 +109,16 @@ public boolean getIsLegalMove() { * Resets this block before starting a new game. */ public void reset() { - this.contents = ""; - this.isLegalMove = false; + this.contents = PlayerPiece.Empty; + this.isLegalMove = true; + } + + @Override + public boolean equals(Object other){ + if (!(other instanceof RowBlockModel)){ + return false; + } + RowBlockModel o = (RowBlockModel) other; + return this.game == o.game && this.contents == o.contents && this.isLegalMove == o.isLegalMove; } } diff --git a/tictactoe/src/model/RowGameModel.java b/tictactoe/src/model/RowGameModel.java index 8f6f2e8b..8344ee50 100644 --- a/tictactoe/src/model/RowGameModel.java +++ b/tictactoe/src/model/RowGameModel.java @@ -1,19 +1,26 @@ package model; +import view.RowGameStatusView.GameStatus; public class RowGameModel { - public static final String GAME_END_NOWINNER = "Game ends in a draw"; + /** + * Type safety using enums + */ + public enum Player { + One, Two + } + public static final GameStatus GAME_END_NOWINNER = GameStatus.DRAW; public RowBlockModel[][] blocksData = new RowBlockModel[3][3]; /** * The current player taking their turn */ - public String player = "1"; + public Player player = Player.One; public int movesLeft = 9; - private String finalResult = null; + private GameStatus finalResult = null; public RowGameModel() { @@ -26,11 +33,11 @@ public RowGameModel() { } // end for row } - public String getFinalResult() { + public GameStatus getFinalResult() { return this.finalResult; } - public void setFinalResult(String finalResult) { + public void setFinalResult(GameStatus finalResult) { this.finalResult = finalResult; } } From 47fb12191d3553372076f078e5cb5d28d210086d Mon Sep 17 00:00:00 2001 From: yamyamyam Date: Tue, 5 Apr 2022 21:18:12 -0400 Subject: [PATCH 3/6] Modularized RowGameController file to get rid of the long winded if else statements, used enumerations, and added proper java documentaion style --- .../src/controller/RowGameController.java | 497 +++++------------- 1 file changed, 141 insertions(+), 356 deletions(-) diff --git a/tictactoe/src/controller/RowGameController.java b/tictactoe/src/controller/RowGameController.java index 7179388f..c61b4551 100644 --- a/tictactoe/src/controller/RowGameController.java +++ b/tictactoe/src/controller/RowGameController.java @@ -8,7 +8,10 @@ import java.awt.event.*; import model.RowGameModel; +import model.RowBlockModel.PlayerPiece; +import model.RowGameModel.Player; import view.RowGameGUI; +import view.RowGameStatusView.GameStatus; public class RowGameController { public RowGameModel gameModel; @@ -23,9 +26,9 @@ public RowGameController() { for(int row = 0; row<3; row++) { for(int column = 0; column<3 ;column++) { - gameModel.blocksData[row][column].setContents(""); - gameModel.blocksData[row][column].setIsLegalMove(true); - gameView.updateBlock(gameModel,row,column); + gameModel.blocksData[row][column].setPiece(PlayerPiece.Empty); + gameModel.blocksData[row][column].setIsLegalMove(true); + gameView.updateBlock(gameModel,row,column); } } } @@ -38,377 +41,158 @@ public RowGameController() { public void move(JButton block) { gameModel.movesLeft--; if(gameModel.movesLeft%2 == 1) { - gameView.playerturn.setText("'X': Player 1"); + //gameView.statusView.playerturn.setText("'X': Player 1"); + gameView.updateStatus(GameStatus.P1TURN); } else{ - gameView.playerturn.setText("'O': Player 2"); + //gameView.statusView.playerturn.setText("'O': Player 2"); + gameView.updateStatus(GameStatus.P2TURN); } - if(gameModel.player.equals("1")) { - // Check whether player 1 won - if(block==gameView.blocks[0][0]) { - gameModel.blocksData[0][0].setContents("X"); - gameView.updateBlock(gameModel,0,0); - gameModel.player = "2"; - if(gameModel.movesLeft<7) { - if((gameModel.blocksData[0][0].getContents().equals(gameModel.blocksData[0][1].getContents()) && - gameModel.blocksData[0][1].getContents().equals(gameModel.blocksData[0][2].getContents())) || - (gameModel.blocksData[0][0].getContents().equals(gameModel.blocksData[1][0].getContents()) && - gameModel.blocksData[1][0].getContents().equals(gameModel.blocksData[2][0].getContents())) || - (gameModel.blocksData[0][0].getContents().equals(gameModel.blocksData[1][1].getContents()) && - gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[2][2].getContents()))) { - gameModel.setFinalResult("Player 1 wins!"); - endGame(); - } else if(gameModel.movesLeft==0) { - gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); - } - if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); - } - } - } else if(block==gameView.blocks[0][1]) { - gameModel.blocksData[0][1].setContents("X"); - gameView.updateBlock(gameModel,0,1); - gameModel.player = "2"; - if(gameModel.movesLeft<7) { - if((gameModel.blocksData[0][1].getContents().equals(gameModel.blocksData[0][0].getContents()) && - gameModel.blocksData[0][0].getContents().equals(gameModel.blocksData[0][2].getContents())) || - (gameModel.blocksData[0][1].getContents().equals(gameModel.blocksData[1][1].getContents()) && - gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[2][1].getContents()))) { - gameModel.setFinalResult("Player 1 wins!"); - endGame(); - } else if(gameModel.movesLeft==0) { - gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); - } - if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); - } - } - } else if(block==gameView.blocks[0][2]) { - gameModel.blocksData[0][2].setContents("X"); - gameView.updateBlock(gameModel,0,2); - gameModel.player = "2"; - if(gameModel.movesLeft<7) { - if((gameModel.blocksData[0][2].getContents().equals(gameModel.blocksData[0][1].getContents()) && - gameModel.blocksData[0][1].getContents().equals(gameModel.blocksData[0][0].getContents())) || - (gameModel.blocksData[0][2].getContents().equals(gameModel.blocksData[1][2].getContents()) && - gameModel.blocksData[1][2].getContents().equals(gameModel.blocksData[2][2].getContents())) || - (gameModel.blocksData[0][2].getContents().equals(gameModel.blocksData[1][1].getContents()) && - gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[2][0].getContents()))) { - gameModel.setFinalResult("Player 1 wins!"); - endGame(); - } else if(gameModel.movesLeft==0) { - gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); - } - if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); - } - } - } else if(block==gameView.blocks[1][0]) { - gameModel.blocksData[1][0].setContents("X"); - gameView.updateBlock(gameModel,1,0); - gameModel.player = "2"; - if(gameModel.movesLeft<7) { - if((gameModel.blocksData[1][0].getContents().equals(gameModel.blocksData[1][1].getContents()) && - gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[1][2].getContents())) || - (gameModel.blocksData[1][0].getContents().equals(gameModel.blocksData[0][0].getContents()) && - gameModel.blocksData[0][0].getContents().equals(gameModel.blocksData[2][0].getContents()))) { - gameModel.setFinalResult("Player 1 wins!"); - endGame(); - } else if(gameModel.movesLeft==0) { - gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); - } - if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); - } - } - } else if(block==gameView.blocks[1][1]) { - gameModel.blocksData[1][1].setContents("X"); - gameView.updateBlock(gameModel,1,1); - gameModel.player = "2"; - if(gameModel.movesLeft<7) { - if((gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[1][0].getContents()) && - gameModel.blocksData[1][0].getContents().equals(gameModel.blocksData[1][2].getContents())) || - (gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[0][1].getContents()) && - gameModel.blocksData[0][1].getContents().equals(gameModel.blocksData[2][1].getContents())) || - (gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[0][0].getContents()) && - gameModel.blocksData[0][0].getContents().equals(gameModel.blocksData[2][2].getContents())) || - (gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[0][2].getContents()) && - gameModel.blocksData[0][2].getContents().equals(gameModel.blocksData[2][0].getContents()))) { - gameModel.setFinalResult("Player 1 wins!"); - endGame(); - } else if(gameModel.movesLeft==0) { - gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); - } - if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); - } - } - } else if(block==gameView.blocks[1][2]) { - gameModel.blocksData[1][2].setContents("X"); - gameView.updateBlock(gameModel,1,2); - gameModel.player = "2"; - if(gameModel.movesLeft<7) { - if((gameModel.blocksData[1][2].getContents().equals(gameModel.blocksData[0][2].getContents()) && - gameModel.blocksData[0][2].getContents().equals(gameModel.blocksData[2][2].getContents())) || - (gameModel.blocksData[1][2].getContents().equals(gameModel.blocksData[1][1].getContents()) && - gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[1][0].getContents()))) { - gameModel.setFinalResult("Player 1 wins!"); - endGame(); - } else if(gameModel.movesLeft==0) { - gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); - } - if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); - } - } - } else if(block==gameView.blocks[2][0]) { - gameModel.blocksData[2][0].setContents("X"); - gameView.updateBlock(gameModel,2,0); - gameModel.player = "2"; - if(gameModel.movesLeft<7) { - if((gameModel.blocksData[2][0].getContents().equals(gameModel.blocksData[2][1].getContents()) && - gameModel.blocksData[2][1].getContents().equals(gameModel.blocksData[2][2].getContents())) || - (gameModel.blocksData[2][0].getContents().equals(gameModel.blocksData[1][0].getContents()) && - gameModel.blocksData[1][0].getContents().equals(gameModel.blocksData[0][0].getContents())) || - (gameModel.blocksData[2][0].getContents().equals(gameModel.blocksData[1][1].getContents()) && - gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[0][2].getContents()))) { - gameModel.setFinalResult("Player 1 wins!"); - endGame(); - } else if(gameModel.movesLeft==0) { - gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); - } - if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); - } - } - } else if(block==gameView.blocks[2][1]) { - gameModel.blocksData[2][1].setContents("X"); - gameView.updateBlock(gameModel,2,1); - gameModel.player = "2"; - if(gameModel.movesLeft<7) { - if((gameModel.blocksData[2][1].getContents().equals(gameModel.blocksData[2][0].getContents()) && - gameModel.blocksData[2][0].getContents().equals(gameModel.blocksData[2][2].getContents())) || - (gameModel.blocksData[2][1].getContents().equals(gameModel.blocksData[1][1].getContents()) && - gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[0][1].getContents()))) { - gameModel.setFinalResult("Player 1 wins!"); - endGame(); - } else if(gameModel.movesLeft==0) { - gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); - } - if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); - } - } - } else if(block==gameView.blocks[2][2]) { - gameModel.blocksData[2][2].setContents("X"); - gameView.updateBlock(gameModel,2,2); - gameModel.player = "2"; - if(gameModel.movesLeft<7) { - if((gameModel.blocksData[2][2].getContents().equals(gameModel.blocksData[2][1].getContents()) && - gameModel.blocksData[2][1].getContents().equals(gameModel.blocksData[2][0].getContents())) || - (gameModel.blocksData[2][2].getContents().equals(gameModel.blocksData[1][2].getContents()) && - gameModel.blocksData[1][2].getContents().equals(gameModel.blocksData[0][2].getContents())) || - (gameModel.blocksData[2][2].getContents().equals(gameModel.blocksData[1][1].getContents()) && - gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[0][0].getContents()))) { - gameModel.setFinalResult("Player 1 wins!"); - endGame(); - } else if(gameModel.movesLeft==0) { - gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); - } - if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); - } - } - } - } else { - // Check whether player 2 won - if(block==gameView.blocks[0][0]) { - gameModel.blocksData[0][0].setContents("O"); - gameView.updateBlock(gameModel,0,0); - gameModel.player = "1"; - if(gameModel.movesLeft<7) { - if((gameModel.blocksData[0][0].getContents().equals(gameModel.blocksData[0][1].getContents()) && - gameModel.blocksData[0][1].getContents().equals(gameModel.blocksData[0][2].getContents())) || - (gameModel.blocksData[0][0].getContents().equals(gameModel.blocksData[1][0].getContents()) && - gameModel.blocksData[1][0].getContents().equals(gameModel.blocksData[2][0].getContents())) || - (gameModel.blocksData[0][0].getContents().equals(gameModel.blocksData[1][1].getContents()) && - gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[2][2].getContents()))) { - gameModel.setFinalResult("Player 2 wins!"); - endGame(); - } else if(gameModel.movesLeft==0) { - gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); - } - if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); - } - } - } else if(block==gameView.blocks[0][1]) { - gameModel.blocksData[0][1].setContents("O"); - gameView.updateBlock(gameModel,0,1); - gameModel.player = "1"; - if(gameModel.movesLeft<7) { - if((gameModel.blocksData[0][1].getContents().equals(gameModel.blocksData[0][0].getContents()) && - gameModel.blocksData[0][0].getContents().equals(gameModel.blocksData[0][2].getContents())) || - (gameModel.blocksData[0][1].getContents().equals(gameModel.blocksData[1][1].getContents()) && - gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[2][1].getContents()))) { - gameModel.setFinalResult("Player 2 wins!"); - endGame(); - } else if(gameModel.movesLeft==0) { - gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); - } - if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); - } - } - } else if(block==gameView.blocks[0][2]) { - gameModel.blocksData[0][2].setContents("O"); - gameView.updateBlock(gameModel,0,2); - gameModel.player = "1"; - if(gameModel.movesLeft<7) { - if((gameModel.blocksData[0][2].getContents().equals(gameModel.blocksData[0][1].getContents()) && - gameModel.blocksData[0][1].getContents().equals(gameModel.blocksData[0][0].getContents())) || - (gameModel.blocksData[0][2].getContents().equals(gameModel.blocksData[1][2].getContents()) && - gameModel.blocksData[1][2].getContents().equals(gameModel.blocksData[2][2].getContents())) || - (gameModel.blocksData[0][2].getContents().equals(gameModel.blocksData[1][1].getContents()) && - gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[2][0].getContents()))) { - gameModel.setFinalResult("Player 2 wins!"); - endGame(); - } else if(gameModel.movesLeft==0) { - gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); - } - if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); - } - } - } else if(block==gameView.blocks[1][0]) { - gameModel.blocksData[1][0].setContents("O"); - gameView.updateBlock(gameModel,1,0); - gameModel.player = "1"; - if(gameModel.movesLeft<7) { - if((gameModel.blocksData[1][0].getContents().equals(gameModel.blocksData[1][1].getContents()) && - gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[1][2].getContents())) || - (gameModel.blocksData[1][0].getContents().equals(gameModel.blocksData[0][0].getContents()) && - gameModel.blocksData[0][0].getContents().equals(gameModel.blocksData[2][0].getContents()))) { - gameModel.setFinalResult("Player 2 wins!"); - endGame(); - } else if(gameModel.movesLeft==0) { - gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); - } - if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); - } - } - } else if(block==gameView.blocks[1][1]) { - gameModel.blocksData[1][1].setContents("O"); - gameView.updateBlock(gameModel,1,1); - gameModel.player = "1"; - if(gameModel.movesLeft<7) { - if((gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[1][0].getContents()) && - gameModel.blocksData[1][0].getContents().equals(gameModel.blocksData[1][2].getContents())) || - (gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[0][1].getContents()) && - gameModel.blocksData[0][1].getContents().equals(gameModel.blocksData[2][1].getContents())) || - (gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[0][0].getContents()) && - gameModel.blocksData[0][0].getContents().equals(gameModel.blocksData[2][2].getContents())) || - (gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[0][2].getContents()) && - gameModel.blocksData[0][2].getContents().equals(gameModel.blocksData[2][0].getContents()))) { - gameModel.setFinalResult("Player 2 wins!"); - endGame(); - } else if(gameModel.movesLeft==0) { - gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); - } - if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); - } + winChecker(block); + } + + /** + *Checks the board to see if a player has won + * + * @param block the board the players are playing on + */ + public void winChecker(JButton block) { + if(gameModel.player == Player.One) { + playerWinCheck(block, true); + } else { + playerWinCheck(block, false); } - } else if(block==gameView.blocks[1][2]) { - gameModel.blocksData[1][2].setContents("O"); - gameView.updateBlock(gameModel,1,2); - gameModel.player = "1"; - if(gameModel.movesLeft<7) { - if((gameModel.blocksData[1][2].getContents().equals(gameModel.blocksData[0][2].getContents()) && - gameModel.blocksData[0][2].getContents().equals(gameModel.blocksData[2][2].getContents())) || - (gameModel.blocksData[1][2].getContents().equals(gameModel.blocksData[1][1].getContents()) && - gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[1][0].getContents()))) { - gameModel.setFinalResult("Player 2 wins!"); - endGame(); - } else if(gameModel.movesLeft==0) { - gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); - } - if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); - } + } + + /** + *Checks if the last placed piece makes a row-of-three of the same piece + * + * @param x column index of the piece + * @param y row index of the piece + * @return boolean + */ + public boolean rowChecker(int x, int y){ + return gameModel.blocksData[y][0].getContents().equals(gameModel.blocksData[y][1].getContents()) && + gameModel.blocksData[y][1].getContents().equals(gameModel.blocksData[y][2].getContents()); + } + + /** + *Checks if the last placed piece makes a column-of-three of the same piece + * + * @param x column index of the piece + * @param y row index of the piece + * @return boolean + */ + public boolean columnChecker(int x, int y){ + return gameModel.blocksData[0][x].getContents().equals(gameModel.blocksData[1][x].getContents()) && + gameModel.blocksData[1][x].getContents().equals(gameModel.blocksData[2][x].getContents()); + } + + /** + *Checks if the last placed piece makes a diagonal-of-three of the same piece + * + * @param x column index of the piece + * @param y row index of the piece + * @return boolean + */ + public boolean diagChecker(int x, int y){ + if((x-y) == 2 || (x-y) == -2){ + return gameModel.blocksData[2][0].getContents().equals(gameModel.blocksData[1][1].getContents()) && + gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[0][2].getContents()); + } + else if((x-y) == 0){ + if((x == 1) && (y == 1)){ + return (gameModel.blocksData[0][0].getContents().equals(gameModel.blocksData[1][1].getContents()) && + gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[2][2].getContents())) || + (gameModel.blocksData[0][2].getContents().equals(gameModel.blocksData[1][1].getContents()) && + gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[2][0].getContents())); + } else{ + return gameModel.blocksData[0][0].getContents().equals(gameModel.blocksData[1][1].getContents()) && + gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[2][2].getContents()); + } + } else{ + return false; } - } else if(block==gameView.blocks[2][0]) { - gameModel.blocksData[2][0].setContents("O"); - gameView.updateBlock(gameModel,2,0); - gameModel.player = "1"; - if(gameModel.movesLeft<7) { - if((gameModel.blocksData[2][0].getContents().equals(gameModel.blocksData[2][1].getContents()) && - gameModel.blocksData[2][1].getContents().equals(gameModel.blocksData[2][2].getContents())) || - (gameModel.blocksData[2][0].getContents().equals(gameModel.blocksData[1][0].getContents()) && - gameModel.blocksData[1][0].getContents().equals(gameModel.blocksData[0][0].getContents())) || - (gameModel.blocksData[2][0].getContents().equals(gameModel.blocksData[1][1].getContents()) && - gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[0][2].getContents()))) { - gameModel.setFinalResult("Player 2 wins!"); - endGame(); - } else if(gameModel.movesLeft==0) { - gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); - } - if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); - } + } + + /** + *Incorporates the functions above to check for three-in-a-row pieces + * + * @param x column index of the piece + * @param y row index of the piece + * @return boolean + */ + public boolean lineChecker(int x, int y){ + //if you can check diagonally + if((x-y)%2 == 0){ + return(columnChecker(x, y) || rowChecker(x, y) || diagChecker(x, y)); + }//else just check for lines + else{ + return(columnChecker(x, y) || rowChecker(x, y)); } - } else if(block==gameView.blocks[2][1]) { - gameModel.blocksData[2][1].setContents("O"); - gameView.updateBlock(gameModel,2,1); - gameModel.player = "1"; + } + + /** + * Sets the piece on the board for the specific player + * + * @param y row index of where the piece should be + * @param x column index of where the piece should be + * @param isPlayer1 boolean of whether it's player1's turn or not + */ + private void doTurn(int y, int x, boolean isPlayer1) { + PlayerPiece playerPiece = isPlayer1 ? PlayerPiece.X : PlayerPiece.O; + Player nextPlayer = isPlayer1 ? Player.Two : Player.One; + GameStatus winMsg = isPlayer1 ? GameStatus.P1WIN : GameStatus.P2WIN; + gameModel.blocksData[y][x].setPiece(playerPiece); + gameView.updateBlock(gameModel,y,x); + gameModel.player = nextPlayer; if(gameModel.movesLeft<7) { - if((gameModel.blocksData[2][1].getContents().equals(gameModel.blocksData[2][0].getContents()) && - gameModel.blocksData[2][0].getContents().equals(gameModel.blocksData[2][2].getContents())) || - (gameModel.blocksData[2][1].getContents().equals(gameModel.blocksData[1][1].getContents()) && - gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[0][1].getContents()))) { - gameModel.setFinalResult("Player 2 wins!"); + if(lineChecker(x, y)) { + gameModel.setFinalResult(winMsg); endGame(); } else if(gameModel.movesLeft==0) { gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); } if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); + gameView.updateStatus(gameModel.getFinalResult()); } } - } else if(block==gameView.blocks[2][2]) { - gameModel.blocksData[2][2].setContents("O"); - gameView.updateBlock(gameModel,2,2); - gameModel.player = "1"; - if(gameModel.movesLeft<7) { - if((gameModel.blocksData[2][2].getContents().equals(gameModel.blocksData[2][1].getContents()) && - gameModel.blocksData[2][1].getContents().equals(gameModel.blocksData[2][0].getContents())) || - (gameModel.blocksData[2][2].getContents().equals(gameModel.blocksData[1][2].getContents()) && - gameModel.blocksData[1][2].getContents().equals(gameModel.blocksData[0][2].getContents())) || - (gameModel.blocksData[2][2].getContents().equals(gameModel.blocksData[1][1].getContents()) && - gameModel.blocksData[1][1].getContents().equals(gameModel.blocksData[0][0].getContents()))) { - gameModel.setFinalResult("Player 2 wins!"); - endGame(); - } else if(gameModel.movesLeft==0) { - gameModel.setFinalResult(RowGameModel.GAME_END_NOWINNER); - } - if (gameModel.getFinalResult() != null) { - gameView.playerturn.setText(gameModel.getFinalResult()); - } + } + + /** + * Incorporates all the functions above to check for the winner + * If there is a three-in-a-row after the turn, player# wins + * + * @param block board where the players are playing + * @param isPlayer1 boolean of whether it's player1's turn or not + */ + private void playerWinCheck(JButton block, boolean isPlayer1) { + if(block==gameView.getBlocks()[0][0]) { + doTurn(0, 0, isPlayer1); + } else if(block==gameView.getBlocks()[0][1]) { + doTurn(0, 1, isPlayer1); + } else if(block==gameView.getBlocks()[0][2]) { + doTurn(0, 2, isPlayer1); + } else if(block==gameView.getBlocks()[1][0]) { + doTurn(1, 0, isPlayer1); + } else if(block==gameView.getBlocks()[1][1]) { + doTurn(1, 1, isPlayer1); + } else if(block==gameView.getBlocks()[1][2]) { + doTurn(1, 2, isPlayer1); + } else if(block==gameView.getBlocks()[2][0]) { + doTurn(2, 0, isPlayer1); + } else if(block==gameView.getBlocks()[2][1]) { + doTurn(2, 1, isPlayer1); + } else if(block==gameView.getBlocks()[2][2]) { + doTurn(2, 2, isPlayer1); } - } } - } /** * Ends the game disallowing further player turns. */ public void endGame() { - for(int row = 0;row<3;row++) { - for(int column = 0;column<3;column++) { - gameView.blocks[row][column].setEnabled(false); - } - } + gameView.disableButtons(); } /** @@ -422,9 +206,10 @@ public void resetGame() { gameView.updateBlock(gameModel,row,column); } } - gameModel.player = "1"; + gameModel.player = Player.One; gameModel.movesLeft = 9; - gameModel.setFinalResult(null); - gameView.playerturn.setText("Player 1 to play 'X'"); + gameModel.setFinalResult(null); + //gameView.statusView.playerturn.setText("Player 1 to play 'X'"); + gameView.updateStatus(GameStatus.START); } } From bd105e274fc92e5f064a67c21bdfd04770f91ff6 Mon Sep 17 00:00:00 2001 From: yamyamyam Date: Tue, 5 Apr 2022 21:26:07 -0400 Subject: [PATCH 4/6] Added the test cases that was asked to add as well as modified the given test cases as need, and added a test case for each mvc package --- tictactoe/test/TestController.java | 36 +++++++++ tictactoe/test/TestExample.java | 119 ++++++++++++++++++++++++++++- tictactoe/test/TestModel.java | 31 ++++++++ tictactoe/test/TestView.java | 29 +++++++ 4 files changed, 212 insertions(+), 3 deletions(-) create mode 100644 tictactoe/test/TestController.java create mode 100644 tictactoe/test/TestModel.java create mode 100644 tictactoe/test/TestView.java diff --git a/tictactoe/test/TestController.java b/tictactoe/test/TestController.java new file mode 100644 index 00000000..05d49641 --- /dev/null +++ b/tictactoe/test/TestController.java @@ -0,0 +1,36 @@ +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import static org.junit.Assert.*; + +import java.beans.Transient; + +import model.RowBlockModel; +import model.RowBlockModel.PlayerPiece; +import model.RowGameModel.Player; +import controller.RowGameController; + +public class TestController { + private RowGameController game; + + @Before + public void setUp() { + game = new RowGameController(); + } + + @After + public void tearDown() { + game = null; + } + + @Test + public void testRowChecker(){ + for (int i = 0; i < game.gameModel.blocksData.length ; i++) { + game.gameModel.blocksData[0][i].setPiece(PlayerPiece.X); + } + assertEquals(true, game.rowChecker(2, 0)); + assertEquals(true, game.rowChecker(0, 0)); + assertEquals(true, game.rowChecker(1, 0)); + } + +} diff --git a/tictactoe/test/TestExample.java b/tictactoe/test/TestExample.java index 92ac69f6..d20100d6 100644 --- a/tictactoe/test/TestExample.java +++ b/tictactoe/test/TestExample.java @@ -3,7 +3,15 @@ import org.junit.Test; import static org.junit.Assert.*; +import java.beans.Transient; + +import javax.swing.JButton; + import model.RowBlockModel; +import model.RowGameModel; +import model.RowBlockModel.PlayerPiece; +import model.RowGameModel.Player; +import view.RowGameStatusView.GameStatus; import controller.RowGameController; /** @@ -11,7 +19,6 @@ */ public class TestExample { private RowGameController game; - @Before public void setUp() { game = new RowGameController(); @@ -24,12 +31,118 @@ public void tearDown() { @Test public void testNewGame() { - assertEquals ("1", game.gameModel.player); + assertEquals (Player.One, game.gameModel.player); assertEquals (9, game.gameModel.movesLeft); + assertEquals(null, game.gameModel.getFinalResult()); + for (int i = 0; i < game.gameModel.blocksData.length; i++) { + for (int j = 0; j < game.gameModel.blocksData.length; j++) { + assertEquals(PlayerPiece.Empty, game.gameModel.blocksData[i][j].getPiece()); + } + } } @Test(expected = IllegalArgumentException.class) public void testNewBlockViolatesPrecondition() { - RowBlockModel block = new RowBlockModel(null); + RowBlockModel block = new RowBlockModel((RowGameModel) null); + } + + /** + * Test for "One of the players win" BEGIN + */ + @Test + public void testP1Wins(){ + //set the board so player X has three-in-a-row + game.gameView.boardView.blocks[0][0].doClick(); //X + game.gameView.boardView.blocks[1][0].doClick(); //O + game.gameView.boardView.blocks[0][1].doClick(); //X + game.gameView.boardView.blocks[1][1].doClick(); //O + game.gameView.boardView.blocks[0][2].doClick(); //X + assertEquals("Player 1 wins!", game.gameView.statusView.playerturn.getText()); + + } + + @Test + public void testP2Wins(){ + //set the board so player X has three-in-a-row + game.gameView.boardView.blocks[0][0].doClick(); //X + game.gameView.boardView.blocks[1][0].doClick(); //O + game.gameView.boardView.blocks[0][1].doClick(); //X + game.gameView.boardView.blocks[1][1].doClick(); //O + game.gameView.boardView.blocks[2][0].doClick(); //X + game.gameView.boardView.blocks[1][2].doClick(); //O + assertEquals("Player 2 wins!", game.gameView.statusView.playerturn.getText()); + + } + + /** + * Test for "One of the players win" END + */ + + /** + * Test for "The two players tie" + */ + @Test + public void twoPlayersTie(){ + + game.gameView.boardView.blocks[0][0].doClick(); //X + game.gameView.boardView.blocks[0][2].doClick(); //O + game.gameView.boardView.blocks[0][1].doClick(); //X + game.gameView.boardView.blocks[1][0].doClick(); //O + game.gameView.boardView.blocks[1][1].doClick(); //X + game.gameView.boardView.blocks[2][1].doClick(); //O + game.gameView.boardView.blocks[1][2].doClick(); //X + game.gameView.boardView.blocks[2][2].doClick(); //O + game.gameView.boardView.blocks[2][0].doClick(); //X + + assertEquals("Game ends in a draw" ,game.gameView.statusView.playerturn.getText()); + } + + /** + * Test for "Reset" + */ + @Test + public void testReset(){ + game.gameView.reset.doClick(); + testNewGame(); + } + /** + * Test "Illegal Move" + */ + @Test + public void testIllegalMove(){ + boolean flag = false; + RowBlockModel[][] ogBoard = new RowBlockModel[3][3]; + for (int i = 0; i < ogBoard.length; i++) { + for (int j = 0; j < ogBoard.length; j++) { + ogBoard[j][i] = new RowBlockModel(game.gameModel.blocksData[j][i]); + } + } + game.gameView.boardView.blocks[1][0].doClick(); + for (int i = 0; i < ogBoard.length; i++) { + for (int j = 0; j < ogBoard.length; j++) { + flag = (flag || ogBoard[j][i].equals(game.gameModel.blocksData[j][i])); + } + } + assertEquals(true, flag); + } + /** + * Test "Legal Move" + */ + @Test + public void testLegalMove(){ + boolean flag = false; + RowBlockModel[][] ogBoard = new RowBlockModel[3][3]; + for (int i = 0; i < ogBoard.length; i++) { + for (int j = 0; j < ogBoard.length; j++) { + ogBoard[j][i] = new RowBlockModel(game.gameModel.blocksData[j][i]); + } + } + game.gameView.boardView.blocks[1][0].doClick(); + for (int i = 0; i < ogBoard.length; i++) { + for (int j = 0; j < ogBoard.length; j++) { + flag = (flag & ogBoard[j][i].equals(game.gameModel.blocksData[j][i])); + } + } + assertEquals(false, flag); } } diff --git a/tictactoe/test/TestModel.java b/tictactoe/test/TestModel.java new file mode 100644 index 00000000..4b7307b0 --- /dev/null +++ b/tictactoe/test/TestModel.java @@ -0,0 +1,31 @@ +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import static org.junit.Assert.*; + +import model.RowBlockModel; +import model.RowBlockModel.PlayerPiece; +import view.RowGameStatusView; +import controller.RowGameController; + +public class TestModel { + private RowGameController game; + + + @Before + public void setUp() { + game = new RowGameController(); + } + + @After + public void tearDown() { + game = null; + } + + @Test + public void testGetPiece(){ + game.gameModel.blocksData[0][0].setPiece(PlayerPiece.X); + assertEquals(PlayerPiece.X , game.gameModel.blocksData[0][0].getPiece()); + + } +} diff --git a/tictactoe/test/TestView.java b/tictactoe/test/TestView.java new file mode 100644 index 00000000..3b8c0cb9 --- /dev/null +++ b/tictactoe/test/TestView.java @@ -0,0 +1,29 @@ +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import static org.junit.Assert.*; + +import model.RowBlockModel; +import view.RowGameStatusView; +import view.RowGameStatusView.GameStatus; +import controller.RowGameController; + +public class TestView { + private RowGameController game; + + @Before + public void setUp() { + game = new RowGameController(); + } + + @After + public void tearDown() { + game = null; + } + + @Test + public void testCompCUpdate(){ + game.gameView.statusView.update(GameStatus.START); + assertEquals("Player 1 to play 'X'", game.gameView.statusView.playerturn.getText()); + } +} From 43469d53b86fd0c0251144faefc8b28e298c378d Mon Sep 17 00:00:00 2001 From: yamyamyam Date: Tue, 5 Apr 2022 21:31:57 -0400 Subject: [PATCH 5/6] added other homework requirements such as the jdoc, bin, answers.pdf, and README.txt --- .vscode/settings.json | 7 + README.txt | 3 + answers.pdf | Bin 0 -> 90763 bytes tictactoe/bin/RowGameApp.class | Bin 0 -> 644 bytes tictactoe/bin/TestController.class | Bin 0 -> 1415 bytes tictactoe/bin/TestExample.class | Bin 0 -> 4325 bytes tictactoe/bin/TestModel.class | Bin 0 -> 1236 bytes tictactoe/bin/TestView.class | Bin 0 -> 1320 bytes .../bin/controller/RowGameController.class | Bin 0 -> 4577 bytes .../bin/model/RowBlockModel$PlayerPiece.class | Bin 0 -> 1425 bytes tictactoe/bin/model/RowBlockModel.class | Bin 0 -> 2025 bytes tictactoe/bin/model/RowGameModel$Player.class | Bin 0 -> 1104 bytes tictactoe/bin/model/RowGameModel.class | Bin 0 -> 1304 bytes tictactoe/bin/view/RowGameBoardView.class | Bin 0 -> 860 bytes tictactoe/bin/view/RowGameGUI$1.class | Bin 0 -> 875 bytes tictactoe/bin/view/RowGameGUI$2.class | Bin 0 -> 1006 bytes tictactoe/bin/view/RowGameGUI.class | Bin 0 -> 3260 bytes tictactoe/bin/view/RowGameStatusView$1.class | Bin 0 -> 935 bytes .../view/RowGameStatusView$GameStatus.class | Bin 0 -> 1363 bytes tictactoe/bin/view/RowGameStatusView.class | Bin 0 -> 1165 bytes tictactoe/jdoc/RowGameApp.html | 161 ++++ tictactoe/jdoc/allclasses-index.html | 97 ++ tictactoe/jdoc/allpackages-index.html | 71 ++ tictactoe/jdoc/class-use/RowGameApp.html | 58 ++ tictactoe/jdoc/constant-values.html | 80 ++ .../jdoc/controller/RowGameController.html | 374 ++++++++ .../class-use/RowGameController.html | 85 ++ .../jdoc/controller/package-summary.html | 83 ++ tictactoe/jdoc/controller/package-tree.html | 72 ++ tictactoe/jdoc/controller/package-use.html | 80 ++ tictactoe/jdoc/element-list | 4 + tictactoe/jdoc/help-doc.html | 182 ++++ tictactoe/jdoc/index-all.html | 356 +++++++ tictactoe/jdoc/index.html | 68 ++ tictactoe/jdoc/jquery-ui.overrides.css | 34 + tictactoe/jdoc/legal/COPYRIGHT | 1 + tictactoe/jdoc/legal/LICENSE | 1 + tictactoe/jdoc/legal/jquery.md | 72 ++ tictactoe/jdoc/legal/jqueryUI.md | 49 + tictactoe/jdoc/member-search-index.js | 1 + .../jdoc/model/RowBlockModel.PlayerPiece.html | 302 ++++++ tictactoe/jdoc/model/RowBlockModel.html | 336 +++++++ tictactoe/jdoc/model/RowGameModel.Player.html | 251 +++++ tictactoe/jdoc/model/RowGameModel.html | 251 +++++ .../class-use/RowBlockModel.PlayerPiece.html | 116 +++ .../jdoc/model/class-use/RowBlockModel.html | 92 ++ .../model/class-use/RowGameModel.Player.html | 102 +++ .../jdoc/model/class-use/RowGameModel.html | 156 ++++ tictactoe/jdoc/model/package-summary.html | 99 ++ tictactoe/jdoc/model/package-tree.html | 88 ++ tictactoe/jdoc/model/package-use.html | 116 +++ tictactoe/jdoc/module-search-index.js | 1 + tictactoe/jdoc/overview-summary.html | 26 + tictactoe/jdoc/overview-tree.html | 96 ++ tictactoe/jdoc/package-search-index.js | 1 + tictactoe/jdoc/package-summary.html | 82 ++ tictactoe/jdoc/package-tree.html | 72 ++ tictactoe/jdoc/package-use.html | 58 ++ tictactoe/jdoc/resources/glass.png | Bin 0 -> 499 bytes tictactoe/jdoc/resources/x.png | Bin 0 -> 394 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 335 bytes .../images/ui-bg_glass_65_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 280 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 6922 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 6999 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes tictactoe/jdoc/script-dir/jquery-3.5.1.min.js | 2 + tictactoe/jdoc/script-dir/jquery-ui.min.css | 7 + tictactoe/jdoc/script-dir/jquery-ui.min.js | 6 + .../script-dir/jquery-ui.structure.min.css | 5 + tictactoe/jdoc/script.js | 132 +++ tictactoe/jdoc/search.js | 354 +++++++ tictactoe/jdoc/stylesheet.css | 865 ++++++++++++++++++ tictactoe/jdoc/tag-search-index.js | 1 + tictactoe/jdoc/type-search-index.js | 1 + tictactoe/jdoc/view/RowGameBoardView.html | 192 ++++ tictactoe/jdoc/view/RowGameGUI.html | 276 ++++++ .../view/RowGameStatusView.GameStatus.html | 283 ++++++ tictactoe/jdoc/view/RowGameStatusView.html | 204 +++++ .../jdoc/view/class-use/RowGameBoardView.html | 83 ++ tictactoe/jdoc/view/class-use/RowGameGUI.html | 83 ++ .../RowGameStatusView.GameStatus.html | 140 +++ .../view/class-use/RowGameStatusView.html | 83 ++ tictactoe/jdoc/view/package-summary.html | 97 ++ tictactoe/jdoc/view/package-tree.html | 88 ++ tictactoe/jdoc/view/package-use.html | 112 +++ tictactoe/src/model/RowBlockModel.java | 2 +- 92 files changed, 7199 insertions(+), 1 deletion(-) create mode 100644 .vscode/settings.json create mode 100644 README.txt create mode 100644 answers.pdf create mode 100644 tictactoe/bin/RowGameApp.class create mode 100644 tictactoe/bin/TestController.class create mode 100644 tictactoe/bin/TestExample.class create mode 100644 tictactoe/bin/TestModel.class create mode 100644 tictactoe/bin/TestView.class create mode 100644 tictactoe/bin/controller/RowGameController.class create mode 100644 tictactoe/bin/model/RowBlockModel$PlayerPiece.class create mode 100644 tictactoe/bin/model/RowBlockModel.class create mode 100644 tictactoe/bin/model/RowGameModel$Player.class create mode 100644 tictactoe/bin/model/RowGameModel.class create mode 100644 tictactoe/bin/view/RowGameBoardView.class create mode 100644 tictactoe/bin/view/RowGameGUI$1.class create mode 100644 tictactoe/bin/view/RowGameGUI$2.class create mode 100644 tictactoe/bin/view/RowGameGUI.class create mode 100644 tictactoe/bin/view/RowGameStatusView$1.class create mode 100644 tictactoe/bin/view/RowGameStatusView$GameStatus.class create mode 100644 tictactoe/bin/view/RowGameStatusView.class create mode 100644 tictactoe/jdoc/RowGameApp.html create mode 100644 tictactoe/jdoc/allclasses-index.html create mode 100644 tictactoe/jdoc/allpackages-index.html create mode 100644 tictactoe/jdoc/class-use/RowGameApp.html create mode 100644 tictactoe/jdoc/constant-values.html create mode 100644 tictactoe/jdoc/controller/RowGameController.html create mode 100644 tictactoe/jdoc/controller/class-use/RowGameController.html create mode 100644 tictactoe/jdoc/controller/package-summary.html create mode 100644 tictactoe/jdoc/controller/package-tree.html create mode 100644 tictactoe/jdoc/controller/package-use.html create mode 100644 tictactoe/jdoc/element-list create mode 100644 tictactoe/jdoc/help-doc.html create mode 100644 tictactoe/jdoc/index-all.html create mode 100644 tictactoe/jdoc/index.html create mode 100644 tictactoe/jdoc/jquery-ui.overrides.css create mode 100644 tictactoe/jdoc/legal/COPYRIGHT create mode 100644 tictactoe/jdoc/legal/LICENSE create mode 100644 tictactoe/jdoc/legal/jquery.md create mode 100644 tictactoe/jdoc/legal/jqueryUI.md create mode 100644 tictactoe/jdoc/member-search-index.js create mode 100644 tictactoe/jdoc/model/RowBlockModel.PlayerPiece.html create mode 100644 tictactoe/jdoc/model/RowBlockModel.html create mode 100644 tictactoe/jdoc/model/RowGameModel.Player.html create mode 100644 tictactoe/jdoc/model/RowGameModel.html create mode 100644 tictactoe/jdoc/model/class-use/RowBlockModel.PlayerPiece.html create mode 100644 tictactoe/jdoc/model/class-use/RowBlockModel.html create mode 100644 tictactoe/jdoc/model/class-use/RowGameModel.Player.html create mode 100644 tictactoe/jdoc/model/class-use/RowGameModel.html create mode 100644 tictactoe/jdoc/model/package-summary.html create mode 100644 tictactoe/jdoc/model/package-tree.html create mode 100644 tictactoe/jdoc/model/package-use.html create mode 100644 tictactoe/jdoc/module-search-index.js create mode 100644 tictactoe/jdoc/overview-summary.html create mode 100644 tictactoe/jdoc/overview-tree.html create mode 100644 tictactoe/jdoc/package-search-index.js create mode 100644 tictactoe/jdoc/package-summary.html create mode 100644 tictactoe/jdoc/package-tree.html create mode 100644 tictactoe/jdoc/package-use.html create mode 100644 tictactoe/jdoc/resources/glass.png create mode 100644 tictactoe/jdoc/resources/x.png create mode 100644 tictactoe/jdoc/script-dir/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 tictactoe/jdoc/script-dir/images/ui-bg_glass_65_dadada_1x400.png create mode 100644 tictactoe/jdoc/script-dir/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 tictactoe/jdoc/script-dir/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 tictactoe/jdoc/script-dir/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 tictactoe/jdoc/script-dir/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 tictactoe/jdoc/script-dir/images/ui-icons_222222_256x240.png create mode 100644 tictactoe/jdoc/script-dir/images/ui-icons_2e83ff_256x240.png create mode 100644 tictactoe/jdoc/script-dir/images/ui-icons_454545_256x240.png create mode 100644 tictactoe/jdoc/script-dir/images/ui-icons_888888_256x240.png create mode 100644 tictactoe/jdoc/script-dir/images/ui-icons_cd0a0a_256x240.png create mode 100644 tictactoe/jdoc/script-dir/jquery-3.5.1.min.js create mode 100644 tictactoe/jdoc/script-dir/jquery-ui.min.css create mode 100644 tictactoe/jdoc/script-dir/jquery-ui.min.js create mode 100644 tictactoe/jdoc/script-dir/jquery-ui.structure.min.css create mode 100644 tictactoe/jdoc/script.js create mode 100644 tictactoe/jdoc/search.js create mode 100644 tictactoe/jdoc/stylesheet.css create mode 100644 tictactoe/jdoc/tag-search-index.js create mode 100644 tictactoe/jdoc/type-search-index.js create mode 100644 tictactoe/jdoc/view/RowGameBoardView.html create mode 100644 tictactoe/jdoc/view/RowGameGUI.html create mode 100644 tictactoe/jdoc/view/RowGameStatusView.GameStatus.html create mode 100644 tictactoe/jdoc/view/RowGameStatusView.html create mode 100644 tictactoe/jdoc/view/class-use/RowGameBoardView.html create mode 100644 tictactoe/jdoc/view/class-use/RowGameGUI.html create mode 100644 tictactoe/jdoc/view/class-use/RowGameStatusView.GameStatus.html create mode 100644 tictactoe/jdoc/view/class-use/RowGameStatusView.html create mode 100644 tictactoe/jdoc/view/package-summary.html create mode 100644 tictactoe/jdoc/view/package-tree.html create mode 100644 tictactoe/jdoc/view/package-use.html diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..a0921154 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "java.project.sourcePaths": [ + "tictactoe/test", + "tictactoe", + "tictactoe/src" + ] +} \ No newline at end of file diff --git a/README.txt b/README.txt new file mode 100644 index 00000000..aec8ec7f --- /dev/null +++ b/README.txt @@ -0,0 +1,3 @@ +Did not change how the code can be complied, tested, and run: + +To compile, test, and run the code, refer to README.MD contained within the tictactoe folder. \ No newline at end of file diff --git a/answers.pdf b/answers.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0f67fa657f10de07fcb7dcabd6a13ad44aa36b27 GIT binary patch literal 90763 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�rW;`_*_pZ4k&a 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 literal 0 HcmV?d00001 diff --git a/tictactoe/bin/TestController.class b/tictactoe/bin/TestController.class new file mode 100644 index 0000000000000000000000000000000000000000..81eaccd2430de777459bf02a49b5c1315122708d GIT binary patch literal 1415 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 literal 0 HcmV?d00001 diff --git a/tictactoe/bin/TestModel.class b/tictactoe/bin/TestModel.class new file mode 100644 index 0000000000000000000000000000000000000000..c06e3c116b7548b1cb387720abe35686811b7925 GIT binary patch literal 1236 zcmaiz`%V)<6vn@4OP4Mqmx3UIAcE3XWEJs70lBEeq$)vdG$ba|I@HDOuI^4HK9&Z- zXyOC-P{uQB*{(q3pEEP(obPwe+2PBix$xtg<7k ziXlC3yS7?nNapfo1MLjMRnJwv=Qz^0HoV<6QJ1Tc$Ap1o1|8rA&Tw?1iy^Zq1NFpv zBOQiRjnWxLO8%p77~nXEL5A${6b7^6c-42o z1EB=Nz}8lav!Vlspdkz!xWF-jQHIe7)XJGycf=>@uiLUpyI?OF#!f=T(~2g>aLK?p z#{@1j^qzoaXb+@nQYUh!BJ*Vpo#eYdw$K@Y0xEG z%RwN0x^phV$-@r~;RFnmxzf>hQ9SO+m+5v_>3SHtO13MXHtH4WZ;FaTo@~jh3a2c5 zTd$kWlzM9uzM~Yqk0L`G9mI?G41*gDSJ`!0wga0a%dYDwp={431<|6OSLC+mOA@v# zDf|cCuFKF9i!X00=~I|1dW37yL3PJcba~1!pL-3zDj(Up;m)Y1X}x#SKXzT|uR8i@ zbknhiKv&U0{|I1Y>BZA5MRWR5WUtf8qLIz(5aCvM~;Ca&A*hSGf~1??%j7Qt8_10y}}$PpuEc zXz3%gdm(KuqP=c*I91q#xrgpO^d)DKGhc9i9~a5~>)yweZz!~O&`D}w2z?l)hdC0f bJ9VUPk@6Cl5A6aLX*6jULv;N2mj?d;HFOa( literal 0 HcmV?d00001 diff --git a/tictactoe/bin/TestView.class b/tictactoe/bin/TestView.class new file mode 100644 index 0000000000000000000000000000000000000000..1fce48a459d5223d2558338b387c4ab5313bfa94 GIT binary patch literal 1320 zcma)+X;TwH5Qg6&A)71l!9;gW;wZ({Y=YU)tO_KG-eov zuEtZTtCf92PyeS(WxD%U?2|HGybu7Lc4^hOVh7@j73FIMnMAfkv zhI8_UPj$Cu(jC7n@Kcd-xIro2#he0N!#&J13|{HQpd4}`H54|HY@nLWk{1r~i1Gjn z3La{BgvZoPwsWW-RjGaSjO$Vg44TnctiP`sWtSnI@Iaa!m;Uo4S)|6v+WS{CD$XJ$5 zonYD)2?*9sd6gg74kuwyaKl-%YgE3d$DTP5+#z#VP-e9h@nG2+nu>&b~1#OU0AM(%wmuQ&=ZM99?ZP8{^b*Obj>KOQhu`|T_JtuV} u&T!`o?sszUqb~!-DEo2DV8Rn|_EN+w`E_BfF|K2SW|i_Er^0WpjQ#@sa4UBJ literal 0 HcmV?d00001 diff --git a/tictactoe/bin/controller/RowGameController.class b/tictactoe/bin/controller/RowGameController.class new file mode 100644 index 0000000000000000000000000000000000000000..3766dfdb7be7adeb3349b6f9d5433cc82241f324 GIT binary patch literal 4577 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 literal 0 HcmV?d00001 diff --git a/tictactoe/bin/model/RowGameModel$Player.class b/tictactoe/bin/model/RowGameModel$Player.class new file mode 100644 index 0000000000000000000000000000000000000000..57b6f646032421b44a7a97ae2956b41283126793 GIT binary patch literal 1104 zcmaJ>p*kx71KGg(h6?-skR~yL*2A`uYRFHl9d`Fy#8qJHx8Jc21w`ed8r}imxpF zqv0mNAS#F=#vrt8gJGfhUvQ11;|dZ!`ta1@{xt;(W*DSm`)Tvdp2kpkJEeq-BvKM) z6r_=1h;}W9cg>d6=COXFS1sM{Ra>27qwCdVWN|~noPv4WWSE@*_UvJwTAt|E&}hA9 z*eZpxcP)J|sD%QW=bCn}7Vf|c`1SJ&7EoY_)lJ*jn&y$r&VW3$U-B>H42a= z^#Q3oR~@}X$uDAsaCgaDCd+^F2=W)qULyI4JcfJpAM@WN!q4M=fZs&KkIETVzQFZM zFpiJ>g)dP=8Ka=0?7x#_2*o?DL!b|k%BzKQnOnj+7SAB~&TY|mqzl|RgUor2*B}#d gAdWmFN*;5m;vvN%G|VI4ZeWWn*Ez!m9yfBo0rQdKOaK4? literal 0 HcmV?d00001 diff --git a/tictactoe/bin/model/RowGameModel.class b/tictactoe/bin/model/RowGameModel.class new file mode 100644 index 0000000000000000000000000000000000000000..adc3a177062c7eb66d22b567e65b6e384d4c39aa GIT binary patch literal 1304 zcma)6+fGwK6kXFo4=qPZ%eA!1y|hKC;@v_8DG;O-Q%s5BfgI|9#Y0Pa3dDE5#1~%` zB_^8q=8F&hfIr|j5F@TRZGb3=Je=8kX4bx~z2|)U{pkyUaZGyPfKx-Aj(WHRnm3JI zBW@bSjrii)rp#9aTw{e|p^_AEMxr?l4FVl2E9tG$b7{u2rM*XHDgSao?GkQy(5OMz zaY@1aCzx4dOWF_t&zizpDWhVz;YG6spAJ7-1OorU2cDS5D_Lgf#iA4lo<=?KScBNH z+jO)mPp)m-Or_JQBY-Xe_f~0FT4}k?g2bG<3F)|uD*}z{g`#0*rL|-7u0Oq7kb9~w z6=A7jRCcT!PX*VFk#BZ#VS05slUmIzF3)8$(^-P1*a87>x=@svovk%lerl|lJn^SXdBe;Z z<$~JR4xRauNmk3HJz7>?6fA+(^YRtAL=M_`qXBiueL@&UZK$G>CVK{OD zyJ$|JVJvUfM$ofV+9~JdOhHxVt98kqtPwT1>}Ez?5;DC>yeL*jasyYJMUl=HEV z5HXkQD>TO;+_3{R9ilbX>^?+COdKNU91FT$BkUXxQ3PTi;0}(4KBM~?4SSdN9pcUL z&wau5$2+=n;u_ZxG;-}^NF7b^p^eWdh*tD4p&@D`2q8(C;{GuwbA;#~+D3U6=a~b2 zoWbkV1aIbX1EZ8T`E{V~n3oO>9$x+8f8hvSN32EQ7H-#Si&HAYdS)AZOT}SlrAh~l zRW!W{sCgE+gS$LY#3YGU#JXa`tX|brwXV_~W~d?CLwglf^FX{!Ge-jVPDt*yqX60g p2Hqp8oQX53cv$j%JHP`ZC{>5N7^CK=b1yqQJ`v!fOk!dp@COvv52647 literal 0 HcmV?d00001 diff --git a/tictactoe/bin/view/RowGameBoardView.class b/tictactoe/bin/view/RowGameBoardView.class new file mode 100644 index 0000000000000000000000000000000000000000..70b2af39f6472afc2cfa2d9cfda6fa4a856cb118 GIT binary patch literal 860 zcmZuvO>fgc5Ph43m?S1CZPQR_f%0jmO%37W65x>Xp&%C|TKUkPHpwcuI9_CLl3w^x zNF_)dxN+e}A!hBgNHmw-oza^&^WM(yKRhQ8HkfxTIm#u`edh2RV7e zhoUWc)b}Vsgxx^)KE(x8uwdY_iA5|iEDmK~1gG#_9WWGA=u576+V%|8)*K0{RYVml z25Kg*V3lEM4u+vL5Nbz;N`xwAShnm$L8^35MI?iGu3^oBHGsgGRT!Z9(X+Rbv#Sv)JLE6)ZDpVx5(_#=RQ|dzG}H=#^?`8z3X&z z&%)p|LDtNJ(ddz+uVWoz?8#s>3~Bm3If{DXwXdhE{{PS0+CFU1N@Qr$s8lZny)yKo zRio2NHZV&spi=)1R?p{u!N`0=;cEi4=}gOML8-V-v6;fLi7kp48rYsueL1$X7!YC){Lm(;6XA#0}s(mlr`{( MURuRts>tBUUre&P&;S4c literal 0 HcmV?d00001 diff --git a/tictactoe/bin/view/RowGameGUI$1.class b/tictactoe/bin/view/RowGameGUI$1.class new file mode 100644 index 0000000000000000000000000000000000000000..b98f1710791ec35043c2724f70bd682b9e1749ca GIT binary patch literal 875 zcmah{U2oGc6g_TB(}u8i8{c${K^Sc|5xUm`0###7$_8Rv-`&)7o>E&%-1c`NF_3uR z2k@g1*U?x}LFFMnH^JK6W! z3}tgFGyfTFMsvFzd%EJG3YTGN!V^E%%A`6;M9OeKn*IHj>|XA7TzI(VV97%bb%y#G zpYSl@Y8bxjpNZH|;pb9G^OB+1Z1r5MVAa8O4>xRjW05vPH5HjK_7V?<;?&KL6A9kP2Qhl-nVYV~+-?!8Dq>U1Oq4C~G4pZ<64T{_kZqjQZ#Neu3h9;dN* zBdx>Qtiw;OG%>p>PIM;K@IaVTJ#g@Z$hm&oR<#&5n*V>C%Av^2Tb)rGy?sTG+)a3v zi3|^DWIQn3M4?`{lLHXa@XlZfI3C%RGQ_&uLx~+CHM^I3zlb!ZqB#iVCN6j%B5-r8+b^k aOL&y)`glxO!X}ysa%K}-gziNJ3V#7X=f|J` literal 0 HcmV?d00001 diff --git a/tictactoe/bin/view/RowGameGUI$2.class b/tictactoe/bin/view/RowGameGUI$2.class new file mode 100644 index 0000000000000000000000000000000000000000..6d2745a82a049e01da3a6d61a638509536e097b8 GIT binary patch literal 1006 zcmah|U2oGc6g_TBvxd-iAB-`&u|a{f9SanADw_n==!U{T4EpY-rpuJZQsTD!EhIK1 z9uUv`D8zL-s8q^`6kq#Z`<&e4lOI37egm+BCpn~$HjuG!30a2up)W?xTRCd+zG%Ha zDAyUX>e!FV52)x)RU7*BoP``rhWwBRWlx4Gl0hIMhIMzc`VHCqQ*W5CaK%90LIFjF z;t3yeC*WbvdEGe?o+9F>e(0-RhO}L2n^?f2fh7x9vCOcVZ0958h@l9T^UPDe4EOY$ zA=eY?NDd-TFf7>>cN)53V1;2(r$0LJ$S2O1&j(7$(8MZk7${j-!#YFhq7E1`eK{nG z6+2;=f@)OS1~wShW`3#b$4Z1+rn>!?tQQMcX%ll(c8R&*`k^=+^gAMY$2$RK7F_A^ zpv@y+ug{YieS_5SG*P+UAhC}8UdYuT(s(?P@r{T+$fz&63^&KUIWv`}78w|wD~%(bu5B$1W%fcZkTG4uE1`~M*8rKVFy%FE6Efqb{eN-h4n?f?WlT=6 z4nh*S8Spq3F*eAq7N{wtibd^OfFc>6{)H611#D8hMYATww9Zs(r(o5sQyA4Rxcn*E zc$>y7!2k`EXR&B@b|GzF#`t=@hHhScudixJ(`G~U)x;ng8%>k literal 0 HcmV?d00001 diff --git a/tictactoe/bin/view/RowGameGUI.class b/tictactoe/bin/view/RowGameGUI.class new file mode 100644 index 0000000000000000000000000000000000000000..aa4035bff090d7e30f218dea8855f0bf6516b378 GIT binary patch literal 3260 zcma)9U2q#$75=XEvy!}tZ6!|XpR`WuIPHFKLL4bx2XsL_sN)bGrq~fNH&!2; zZ%D{TxKz8HVcT%BGu&Sc-F|!t9lc00zWL21h5chY+7R!E!oJ$IDc5jIMIW%w2TbXB z7amoJ6}Q$D9;idywi=Y`yj#a(cn_7hm6PUWqm*;gIlE|{T{0cRwd{gIFfl46e{Z$q zDPzS=owV|1p~&SJ25?*|`~(w{7^SA5p3uoEl0_rxly%+YwyM>yGiLoo`)M6R7*^1! z%~V_0jrkl+f{6>__vG8DcFri6ISr?)74zabowHZQj8(hDGMz#ohBQVcs%I2BYCQWY z<3_<)Fdcf=Fjk8);#k>DlruQ4;Vet&kygSUwwEy{h&f}N2^}nOaj=3isAz1G<- zR0IorpJJXDqv(UB;|i{lZ%a92)pXpFL%!^DgFAD% zTTZ@DQt>oBG&!yC@PDCjjWV~^grW`?B{HeBlr`Kfn4ZM{VJ~c0QD~_Riyf%@(HNGo zDrCB@&|iU2q*cmouHsE|lJqcqQ(@M|FG*FA$vc7|O`88ncS7Suk0vLp5nP zmr0aVy#^toY#5)=@kxA&q?^y#nX5&nd2X&g(bdKyeToO51E1FM899W_tn)d?ylgs- znU&M1;j=sJvp&mdP&m%WgTC^SEb*QS=BJx z620#b=+||8LymroF`g>OxhLNaCjM7W*&NdB^t>;|tb#dF%Fmn5wBI%2V|K>K%@~d) z?^R(qW9LeFa#P8T;@GTn&|S2c#g;l|NIebSAwg{t9a3Z2{j?`IS*SidY@f?1@Z*Xr2>vQ|;H?9+hA zF&`IIfox3YjABuuifx}l9Asr1_?-{}J2Ccf zMn<6B8+j3WBd;-Uq#&zuG%ih@v_N`+- zryaBL0~I{9jxN4*Q{JTt>f)8yJ{vQU7dF7b|$Yj6snF%Xn%7 z>DdjOqQyuB?;rPH&&-Cy6^v6bapY+HTp5$~YEJ~)f&}O)W9IzZRzhu|+n6omk~laL z&y-=xtSu-o{xlT7%xPPQ@?&?fC?Lt($d%y;<_4B$lYJFjE8`=9fpBX${3@KlfYz#U zlA*@oJNS5OxW84C1XOTis#ex7`)oebe8$`5+R?f-&r=Nmm2Y~!K1W|`ntJ`MSJuLO ze(?>KB!F-8`2rr|vmHU~MhnZ@$!9N1`WU~Mo?^=wp=1sRkfEM~F5F=8Uu212W>@$T z9>E>-;P*)2Pqg|AOa50J!QXHc|3FFs11id|gg72oJvgq0_(?E@L6xJ-;o3C}69<^& z$D@wR_zu1cO$AWGE1ZReAow1>PYs#<06!#s9Hrq^yhi%nz`q#5Yuv}ncoRS7EXZj7 zh@Ws4!s|5ZLGUfYX&Ra|{8U4F>zAS3qtm-E?|RhyId1vX#Cf6wY1=4??dv>H#*31y z1}|CiQ4EYDh6yk5q_4UeBpSU_Kyc1v3!>fVZ7V={Ho~ftevYCQsaEf|ockWao_xkb z*L|HTx{`a05}qFnQCqO1v_IBYhF8zp5HIj}&3PdEe8sI0qxc1$Cyc@`nPDI9CF%qS zcQ|mOgB&~*c(Rj2YqE?lb@X@k2g>-`S_5hG_cg`mo7?1Rmm=XJKLak2KF^Uxm(a!c z9@0e$+eO$Y_InwSh`YV4$j%Q}1ClZ|BX|!D>K^~kxQl&KkN|!~c>{ip-*60bc9S=* VWT~BNd46WR@pKy{{?AQ+_zy=}BfbCt literal 0 HcmV?d00001 diff --git a/tictactoe/bin/view/RowGameStatusView$1.class b/tictactoe/bin/view/RowGameStatusView$1.class new file mode 100644 index 0000000000000000000000000000000000000000..ab41be3393320603ca54910b426ce2f28f747bea GIT binary patch literal 935 zcma))U31bv6o%i0Kmb!4v9z>)QNb3p7D3w^KSrh>$_SJpNH2P02sgDp(dL#@m(d>rP8Z*A!fzO4Z-eO$E0CU+v0aJxE$r zaC@p$XG%fA9id3Oo!X&{bp|y&`k;Tp4WA+L#IQ`;^q&O|dz8K73^>Dl!?by8blT@` zSMOV-q#KT*TRq)11<%AedPn0e-RX=|nlo|@zHf>Zi+^14rZ7O8@7adsc&2^abA|@9ZUB-Q6#CbbkrPG!Wz{bQ?sHL#Eg_8N)+!B{Xmpv z0RIAZ_AT`Z@<-9;KI4jX@E+2u0G9}3A+8X{L%cyKhnOQwgqSB(r`aD6M-mHILIzpn z$yf&KsA7xaHfq?VxQ8}0ie0>cK{1MZWG^0=RIx$x2=)8ab5Q90GH9MNw1fr;n?ZgV d4=75g(D*P=DtJUOO?yR1-Fm)EmqMSK_yuW@&c6Tv literal 0 HcmV?d00001 diff --git a/tictactoe/bin/view/RowGameStatusView$GameStatus.class b/tictactoe/bin/view/RowGameStatusView$GameStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..1bbf3021d604dd8803fa2dde080a5e5f337ee9a6 GIT binary patch literal 1363 zcma)6{ZCR+7=DgixR={C36(;v{2&7?2|uy|4aAS!7&7{J3#N+O3cz`g294Tk>`ctitLYjxXX z7>UO6$Hu9Vs2TQAV)yXatU4(blbDh*tziZc>ak4&@GH<13@HdI80A<} z!vYrhCPY6?Vnt*9?1HLZM@YH)2U^2W-m=X?>*UaEl#Ig~AuG4E6YFEo48eT8YShX` z!{V9TbdpUn<7eGnx-*g_oKF@t@7Jv(n{?P9o+lbBlZw*Sn!BCloxenb%)*%rJ!~?#cU=>dr9=#&9A?p=yo35kcYhzHa$ZZ7liqgig zeseGdYxFjO~GLllfzaf{1<+y9bW(d literal 0 HcmV?d00001 diff --git a/tictactoe/bin/view/RowGameStatusView.class b/tictactoe/bin/view/RowGameStatusView.class new file mode 100644 index 0000000000000000000000000000000000000000..2f168b8f4ea73e8d7f2e82a699454afb6a15165b GIT binary patch literal 1165 zcma)5?M@Rx6g|_{?smICDNsOAwoqv)Ncr#!iijb8U<#-u4aS%_v=dn@+h%u5;fYNA zr%^~W@d11qpTKx$C@Be$xSP9s=H}iz_nf)&`|pom03IT5Ab_BTkcn#uGsO1z0nb&r z^C7pnvnR?vLwLz{Y=4;{n3*VP&>8w<&|%JN+7$L;OC0)-UBL}#2u2WvsiDI}C%PCC z2exSDUe}t>_`WFm+;4a#@-P_nDnAmg-*6p<{=%gN^AU6-uA#?7FZvh;E-#jvWtd78 zo3>xxUFY?bj7nYDGS%*YA@Fw1KtBdF44Sx(A%^4?wa;g1HMe3rysDH~({Y2L_obp? z&02oVl9a6Uc3KKCV!}d_LGy$!1tQThish-cMc*au@)IQ;V+K=sQKLWdsQUvFr(0_9wJACy0E9@kK@6rmws?fQ}G4FiprjjYkeMv|^aW zT&va}ij=WOUlE%;Mq>IiE$FF}$vwhk8L~TMD`W+-ZL&)C8;tnyF>ZdsBZWs5o>w@f za9ZJUg@+W*DBPuRR^gy*ItbbHB9SFh)M6Y9=)n^D@B|4w#{gbo5L+0+I}GDJZo + + + +RowGameApp (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+ +
+

Class RowGameApp

+
+
java.lang.Object +
RowGameApp
+
+
+
+
public class RowGameApp +extends Object
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      RowGameApp

      +
      public RowGameApp()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      main

      +
      public static void main(String[] args)
      +
      Starts a new game in the GUI.
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/tictactoe/jdoc/allclasses-index.html b/tictactoe/jdoc/allclasses-index.html new file mode 100644 index 00000000..1afb07dc --- /dev/null +++ b/tictactoe/jdoc/allclasses-index.html @@ -0,0 +1,97 @@ + + + + +All Classes and Interfaces (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

All Classes and Interfaces

+
+
+
+
+
+
Class
+
Description
+ +
+
The TicTacToeBlock class represents a given block in the game.
+
+ +
+
Used enum to distinguish the pieces for each player
+
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
+
Type safety using enums
+
+ +
 
+
+
+
+
+
+
+ + diff --git a/tictactoe/jdoc/allpackages-index.html b/tictactoe/jdoc/allpackages-index.html new file mode 100644 index 00000000..421ff537 --- /dev/null +++ b/tictactoe/jdoc/allpackages-index.html @@ -0,0 +1,71 @@ + + + + +All Packages (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

All Packages

+
+
Package Summary
+
+
Package
+
Description
+ +
 
+ +
 
+ +
 
+ +
 
+
+
+
+
+ + diff --git a/tictactoe/jdoc/class-use/RowGameApp.html b/tictactoe/jdoc/class-use/RowGameApp.html new file mode 100644 index 00000000..9b2b48cb --- /dev/null +++ b/tictactoe/jdoc/class-use/RowGameApp.html @@ -0,0 +1,58 @@ + + + + +Uses of Class RowGameApp (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
RowGameApp

+
+No usage of RowGameApp
+
+
+ + diff --git a/tictactoe/jdoc/constant-values.html b/tictactoe/jdoc/constant-values.html new file mode 100644 index 00000000..9be2577b --- /dev/null +++ b/tictactoe/jdoc/constant-values.html @@ -0,0 +1,80 @@ + + + + +Constant Field Values (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Constant Field Values

+
+

Contents

+ +
+
+
+

model.*

+ +
+
+
+
+ + diff --git a/tictactoe/jdoc/controller/RowGameController.html b/tictactoe/jdoc/controller/RowGameController.html new file mode 100644 index 00000000..26c635c2 --- /dev/null +++ b/tictactoe/jdoc/controller/RowGameController.html @@ -0,0 +1,374 @@ + + + + +RowGameController (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package controller
+

Class RowGameController

+
+
java.lang.Object +
controller.RowGameController
+
+
+
+
public class RowGameController +extends Object
+
+
+
    + +
  • +
    +

    Field Summary

    +
    Fields
    +
    +
    Modifier and Type
    +
    Field
    +
    Description
    + + +
     
    + + +
     
    +
    +
    +
  • + +
  • +
    +

    Constructor Summary

    +
    Constructors
    +
    +
    Constructor
    +
    Description
    + +
    +
    Creates a new game initializing the GUI.
    +
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    boolean
    +
    columnChecker(int x, + int y)
    +
    +
    Checks if the last placed piece makes a column-of-three of the same piece
    +
    +
    boolean
    +
    diagChecker(int x, + int y)
    +
    +
    Checks if the last placed piece makes a diagonal-of-three of the same piece
    +
    +
    private void
    +
    doTurn(int y, + int x, + boolean isPlayer1)
    +
    +
    Sets the piece on the board for the specific player
    +
    +
    void
    + +
    +
    Ends the game disallowing further player turns.
    +
    +
    boolean
    +
    lineChecker(int x, + int y)
    +
    +
    Incorporates the functions above to check for three-in-a-row pieces
    +
    +
    void
    +
    move(JButton block)
    +
    +
    Moves the current player into the given block.
    +
    +
    private void
    +
    playerWinCheck(JButton block, + boolean isPlayer1)
    +
    +
    Incorporates all the functions above to check for the winner + If there is a three-in-a-row after the turn, player# wins
    +
    +
    void
    + +
    +
    Resets the game to be able to start playing again.
    +
    +
    boolean
    +
    rowChecker(int x, + int y)
    +
    +
    Checks if the last placed piece makes a row-of-three of the same piece
    +
    +
    void
    + +
    +
    Checks the board to see if a player has won
    +
    +
    +
    +
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      RowGameController

      +
      public RowGameController()
      +
      Creates a new game initializing the GUI.
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      move

      +
      public void move(JButton block)
      +
      Moves the current player into the given block.
      +
      +
      Parameters:
      +
      block - The block to be moved to by the current player
      +
      +
      +
    • +
    • +
      +

      winChecker

      +
      public void winChecker(JButton block)
      +
      Checks the board to see if a player has won
      +
      +
      Parameters:
      +
      block - the board the players are playing on
      +
      +
      +
    • +
    • +
      +

      rowChecker

      +
      public boolean rowChecker(int x, + int y)
      +
      Checks if the last placed piece makes a row-of-three of the same piece
      +
      +
      Parameters:
      +
      x - column index of the piece
      +
      y - row index of the piece
      +
      Returns:
      +
      boolean
      +
      +
      +
    • +
    • +
      +

      columnChecker

      +
      public boolean columnChecker(int x, + int y)
      +
      Checks if the last placed piece makes a column-of-three of the same piece
      +
      +
      Parameters:
      +
      x - column index of the piece
      +
      y - row index of the piece
      +
      Returns:
      +
      boolean
      +
      +
      +
    • +
    • +
      +

      diagChecker

      +
      public boolean diagChecker(int x, + int y)
      +
      Checks if the last placed piece makes a diagonal-of-three of the same piece
      +
      +
      Parameters:
      +
      x - column index of the piece
      +
      y - row index of the piece
      +
      Returns:
      +
      boolean
      +
      +
      +
    • +
    • +
      +

      lineChecker

      +
      public boolean lineChecker(int x, + int y)
      +
      Incorporates the functions above to check for three-in-a-row pieces
      +
      +
      Parameters:
      +
      x - column index of the piece
      +
      y - row index of the piece
      +
      Returns:
      +
      boolean
      +
      +
      +
    • +
    • +
      +

      doTurn

      +
      private void doTurn(int y, + int x, + boolean isPlayer1)
      +
      Sets the piece on the board for the specific player
      +
      +
      Parameters:
      +
      y - row index of where the piece should be
      +
      x - column index of where the piece should be
      +
      isPlayer1 - boolean of whether it's player1's turn or not
      +
      +
      +
    • +
    • +
      +

      playerWinCheck

      +
      private void playerWinCheck(JButton block, + boolean isPlayer1)
      +
      Incorporates all the functions above to check for the winner + If there is a three-in-a-row after the turn, player# wins
      +
      +
      Parameters:
      +
      block - board where the players are playing
      +
      isPlayer1 - boolean of whether it's player1's turn or not
      +
      +
      +
    • +
    • +
      +

      endGame

      +
      public void endGame()
      +
      Ends the game disallowing further player turns.
      +
      +
    • +
    • +
      +

      resetGame

      +
      public void resetGame()
      +
      Resets the game to be able to start playing again.
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/tictactoe/jdoc/controller/class-use/RowGameController.html b/tictactoe/jdoc/controller/class-use/RowGameController.html new file mode 100644 index 00000000..698f401b --- /dev/null +++ b/tictactoe/jdoc/controller/class-use/RowGameController.html @@ -0,0 +1,85 @@ + + + + +Uses of Class controller.RowGameController (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
controller.RowGameController

+
+
Packages that use RowGameController
+
+
Package
+
Description
+ +
 
+
+
+ +
+
+
+
+ + diff --git a/tictactoe/jdoc/controller/package-summary.html b/tictactoe/jdoc/controller/package-summary.html new file mode 100644 index 00000000..85533f45 --- /dev/null +++ b/tictactoe/jdoc/controller/package-summary.html @@ -0,0 +1,83 @@ + + + + +controller (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Package controller

+
+
+
package controller
+
+ +
+
+
+
+ + diff --git a/tictactoe/jdoc/controller/package-tree.html b/tictactoe/jdoc/controller/package-tree.html new file mode 100644 index 00000000..c9a24ec7 --- /dev/null +++ b/tictactoe/jdoc/controller/package-tree.html @@ -0,0 +1,72 @@ + + + + +controller Class Hierarchy (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package controller

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/tictactoe/jdoc/controller/package-use.html b/tictactoe/jdoc/controller/package-use.html new file mode 100644 index 00000000..c19946ab --- /dev/null +++ b/tictactoe/jdoc/controller/package-use.html @@ -0,0 +1,80 @@ + + + + +Uses of Package controller (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
controller

+
+
Packages that use controller
+
+
Package
+
Description
+ +
 
+
+
+ +
+
+
+
+ + diff --git a/tictactoe/jdoc/element-list b/tictactoe/jdoc/element-list new file mode 100644 index 00000000..6fe59263 --- /dev/null +++ b/tictactoe/jdoc/element-list @@ -0,0 +1,4 @@ +unnamed package +controller +model +view diff --git a/tictactoe/jdoc/help-doc.html b/tictactoe/jdoc/help-doc.html new file mode 100644 index 00000000..25f12781 --- /dev/null +++ b/tictactoe/jdoc/help-doc.html @@ -0,0 +1,182 @@ + + + + +API Help (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+

JavaDoc Help

+ +
+
+

Navigation

+Starting from the Overview page, you can browse the documentation using the links in each page, and in the navigation bar at the top of each page. The Index and Search box allow you to navigate to specific declarations and summary pages, including: All Packages, All Classes and Interfaces + +
+
+
+

Kinds of Pages

+The following sections describe the different kinds of pages in this collection. +
+

Overview

+

The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

+
+
+

Package

+

Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain the following categories:

+
    +
  • Interfaces
  • +
  • Classes
  • +
  • Enum Classes
  • +
  • Exceptions
  • +
  • Errors
  • +
  • Annotation Interfaces
  • +
+
+
+

Class or Interface

+

Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a declaration and description, member summary tables, and detailed member descriptions. Entries in each of these sections are omitted if they are empty or not applicable.

+
    +
  • Class Inheritance Diagram
  • +
  • Direct Subclasses
  • +
  • All Known Subinterfaces
  • +
  • All Known Implementing Classes
  • +
  • Class or Interface Declaration
  • +
  • Class or Interface Description
  • +
+
+
    +
  • Nested Class Summary
  • +
  • Enum Constant Summary
  • +
  • Field Summary
  • +
  • Property Summary
  • +
  • Constructor Summary
  • +
  • Method Summary
  • +
  • Required Element Summary
  • +
  • Optional Element Summary
  • +
+
+
    +
  • Enum Constant Details
  • +
  • Field Details
  • +
  • Property Details
  • +
  • Constructor Details
  • +
  • Method Details
  • +
  • Element Details
  • +
+

Note: Annotation interfaces have required and optional elements, but not methods. Only enum classes have enum constants. The components of a record class are displayed as part of the declaration of the record class. Properties are a feature of JavaFX.

+

The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

+
+
+

Other Files

+

Packages and modules may contain pages with additional information related to the declarations nearby.

+
+
+

Use

+

Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the USE link in the navigation bar.

+
+
+

Tree (Class Hierarchy)

+

There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

+
    +
  • When viewing the Overview page, clicking on TREE displays the hierarchy for all packages.
  • +
  • When viewing a particular package, class or interface page, clicking on TREE displays the hierarchy for only that package.
  • +
+
+
+

All Packages

+

The All Packages page contains an alphabetic index of all packages contained in the documentation.

+
+
+

All Classes and Interfaces

+

The All Classes and Interfaces page contains an alphabetic index of all classes and interfaces contained in the documentation, including annotation interfaces, enum classes, and record classes.

+
+
+

Index

+

The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields in the documentation, as well as summary pages such as All Packages, All Classes and Interfaces.

+
+
+
+This help file applies to API documentation generated by the standard doclet.
+
+
+ + diff --git a/tictactoe/jdoc/index-all.html b/tictactoe/jdoc/index-all.html new file mode 100644 index 00000000..394b2699 --- /dev/null +++ b/tictactoe/jdoc/index-all.html @@ -0,0 +1,356 @@ + + + + +Index (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+B C D E F G I L M O P R S T U V W X 
All Classes and Interfaces|All Packages +

B

+
+
blocks - Variable in class view.RowGameBoardView
+
 
+
blocksData - Variable in class model.RowGameModel
+
 
+
boardView - Variable in class view.RowGameGUI
+
 
+
+

C

+
+
columnChecker(int, int) - Method in class controller.RowGameController
+
+
Checks if the last placed piece makes a column-of-three of the same piece
+
+
contents - Variable in class model.RowBlockModel
+
+
The current value of the contents of this block
+
+
controller - package controller
+
 
+
+

D

+
+
diagChecker(int, int) - Method in class controller.RowGameController
+
+
Checks if the last placed piece makes a diagonal-of-three of the same piece
+
+
disableButtons() - Method in class view.RowGameGUI
+
 
+
doTurn(int, int, boolean) - Method in class controller.RowGameController
+
+
Sets the piece on the board for the specific player
+
+
DRAW - Enum constant in enum class view.RowGameStatusView.GameStatus
+
 
+
+

E

+
+
Empty - Enum constant in enum class model.RowBlockModel.PlayerPiece
+
 
+
endGame() - Method in class controller.RowGameController
+
+
Ends the game disallowing further player turns.
+
+
equals(Object) - Method in class model.RowBlockModel
+
 
+
+

F

+
+
finalResult - Variable in class model.RowGameModel
+
 
+
+

G

+
+
game - Variable in class model.RowBlockModel
+
+
The game that contains this block
+
+
GAME_END_NOWINNER - Static variable in class model.RowGameModel
+
 
+
gameModel - Variable in class controller.RowGameController
+
 
+
gameModel - Variable in class view.RowGameGUI
+
 
+
GameStatus() - Constructor for enum class view.RowGameStatusView.GameStatus
+
 
+
gameView - Variable in class controller.RowGameController
+
 
+
getBlocks() - Method in class view.RowGameGUI
+
+
Gets the block
+
+
getContents() - Method in class model.RowBlockModel
+
+
Returns the non-null String value of the contents of this block.
+
+
getFinalResult() - Method in class model.RowGameModel
+
 
+
getGame() - Method in class model.RowBlockModel
+
 
+
getIsLegalMove() - Method in class model.RowBlockModel
+
 
+
getPiece() - Method in class model.RowBlockModel
+
 
+
gui - Variable in class view.RowGameGUI
+
 
+
+

I

+
+
isLegalMove - Variable in class model.RowBlockModel
+
+
Whether or not it is currently legal to move into this block
+
+
+

L

+
+
lineChecker(int, int) - Method in class controller.RowGameController
+
+
Incorporates the functions above to check for three-in-a-row pieces
+
+
+

M

+
+
main(String[]) - Static method in class RowGameApp
+
+
Starts a new game in the GUI.
+
+
model - package model
+
 
+
move(JButton) - Method in class controller.RowGameController
+
+
Moves the current player into the given block.
+
+
movesLeft - Variable in class model.RowGameModel
+
 
+
+

O

+
+
O - Enum constant in enum class model.RowBlockModel.PlayerPiece
+
 
+
One - Enum constant in enum class model.RowGameModel.Player
+
 
+
+

P

+
+
P1TURN - Enum constant in enum class view.RowGameStatusView.GameStatus
+
 
+
P1WIN - Enum constant in enum class view.RowGameStatusView.GameStatus
+
 
+
P2TURN - Enum constant in enum class view.RowGameStatusView.GameStatus
+
 
+
P2WIN - Enum constant in enum class view.RowGameStatusView.GameStatus
+
 
+
player - Variable in class model.RowGameModel
+
+
The current player taking their turn
+
+
Player() - Constructor for enum class model.RowGameModel.Player
+
 
+
PlayerPiece(String) - Constructor for enum class model.RowBlockModel.PlayerPiece
+
 
+
playerturn - Variable in class view.RowGameStatusView
+
 
+
playerWinCheck(JButton, boolean) - Method in class controller.RowGameController
+
+
Incorporates all the functions above to check for the winner + If there is a three-in-a-row after the turn, player# wins
+
+
+

R

+
+
reset - Variable in class view.RowGameGUI
+
 
+
reset() - Method in class model.RowBlockModel
+
+
Resets this block before starting a new game.
+
+
resetGame() - Method in class controller.RowGameController
+
+
Resets the game to be able to start playing again.
+
+
RowBlockModel - Class in model
+
+
The TicTacToeBlock class represents a given block in the game.
+
+
RowBlockModel(RowBlockModel) - Constructor for class model.RowBlockModel
+
 
+
RowBlockModel(RowGameModel) - Constructor for class model.RowBlockModel
+
+
Creates a new block that will be contained in the given game.
+
+
RowBlockModel.PlayerPiece - Enum Class in model
+
+
Used enum to distinguish the pieces for each player
+
+
rowChecker(int, int) - Method in class controller.RowGameController
+
+
Checks if the last placed piece makes a row-of-three of the same piece
+
+
RowGameApp - Class in Unnamed Package
+
 
+
RowGameApp() - Constructor for class RowGameApp
+
 
+
RowGameBoardView - Class in view
+
 
+
RowGameBoardView() - Constructor for class view.RowGameBoardView
+
 
+
RowGameController - Class in controller
+
 
+
RowGameController() - Constructor for class controller.RowGameController
+
+
Creates a new game initializing the GUI.
+
+
RowGameGUI - Class in view
+
 
+
RowGameGUI(RowGameController) - Constructor for class view.RowGameGUI
+
+
Creates a new game initializing the GUI.
+
+
RowGameModel - Class in model
+
 
+
RowGameModel() - Constructor for class model.RowGameModel
+
 
+
RowGameModel.Player - Enum Class in model
+
 
+
RowGameStatusView - Class in view
+
+
Type safety using enums
+
+
RowGameStatusView() - Constructor for class view.RowGameStatusView
+
 
+
RowGameStatusView.GameStatus - Enum Class in view
+
 
+
+

S

+
+
setFinalResult(RowGameStatusView.GameStatus) - Method in class model.RowGameModel
+
 
+
setIsLegalMove(boolean) - Method in class model.RowBlockModel
+
 
+
setPiece(RowBlockModel.PlayerPiece) - Method in class model.RowBlockModel
+
+
Sets the contents of this block to the given value.
+
+
START - Enum constant in enum class view.RowGameStatusView.GameStatus
+
 
+
statusView - Variable in class view.RowGameGUI
+
 
+
str - Variable in enum class model.RowBlockModel.PlayerPiece
+
 
+
+

T

+
+
toString() - Method in enum class model.RowBlockModel.PlayerPiece
+
 
+
Two - Enum constant in enum class model.RowGameModel.Player
+
 
+
+

U

+
+
update(RowGameModel, int, int) - Method in class view.RowGameBoardView
+
 
+
update(RowGameStatusView.GameStatus) - Method in class view.RowGameStatusView
+
 
+
updateBlock(RowGameModel, int, int) - Method in class view.RowGameGUI
+
+
Updates the block at the given row and column + after one of the player's moves.
+
+
updateStatus(RowGameStatusView.GameStatus) - Method in class view.RowGameGUI
+
 
+
+

V

+
+
valueOf(String) - Static method in enum class model.RowBlockModel.PlayerPiece
+
+
Returns the enum constant of this class with the specified name.
+
+
valueOf(String) - Static method in enum class model.RowGameModel.Player
+
+
Returns the enum constant of this class with the specified name.
+
+
valueOf(String) - Static method in enum class view.RowGameStatusView.GameStatus
+
+
Returns the enum constant of this class with the specified name.
+
+
values() - Static method in enum class model.RowBlockModel.PlayerPiece
+
+
Returns an array containing the constants of this enum class, in +the order they are declared.
+
+
values() - Static method in enum class model.RowGameModel.Player
+
+
Returns an array containing the constants of this enum class, in +the order they are declared.
+
+
values() - Static method in enum class view.RowGameStatusView.GameStatus
+
+
Returns an array containing the constants of this enum class, in +the order they are declared.
+
+
view - package view
+
 
+
+

W

+
+
winChecker(JButton) - Method in class controller.RowGameController
+
+
Checks the board to see if a player has won
+
+
+

X

+
+
X - Enum constant in enum class model.RowBlockModel.PlayerPiece
+
 
+
+B C D E F G I L M O P R S T U V W X 
All Classes and Interfaces|All Packages
+
+
+ + diff --git a/tictactoe/jdoc/index.html b/tictactoe/jdoc/index.html new file mode 100644 index 00000000..c58b7f6a --- /dev/null +++ b/tictactoe/jdoc/index.html @@ -0,0 +1,68 @@ + + + + +Overview (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+
Packages
+
+
Package
+
Description
+ +
 
+ +
 
+ +
 
+
+
+
+
+
+ + diff --git a/tictactoe/jdoc/jquery-ui.overrides.css b/tictactoe/jdoc/jquery-ui.overrides.css new file mode 100644 index 00000000..1abff952 --- /dev/null +++ b/tictactoe/jdoc/jquery-ui.overrides.css @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + /* Overrides the color of selection used in jQuery UI */ + background: #F8981D; +} diff --git a/tictactoe/jdoc/legal/COPYRIGHT b/tictactoe/jdoc/legal/COPYRIGHT new file mode 100644 index 00000000..ca74fffd --- /dev/null +++ b/tictactoe/jdoc/legal/COPYRIGHT @@ -0,0 +1 @@ +Please see ..\java.base\COPYRIGHT diff --git a/tictactoe/jdoc/legal/LICENSE b/tictactoe/jdoc/legal/LICENSE new file mode 100644 index 00000000..4ad9fe40 --- /dev/null +++ b/tictactoe/jdoc/legal/LICENSE @@ -0,0 +1 @@ +Please see ..\java.base\LICENSE diff --git a/tictactoe/jdoc/legal/jquery.md b/tictactoe/jdoc/legal/jquery.md new file mode 100644 index 00000000..8054a34c --- /dev/null +++ b/tictactoe/jdoc/legal/jquery.md @@ -0,0 +1,72 @@ +## jQuery v3.5.1 + +### jQuery License +``` +jQuery v 3.5.1 +Copyright JS Foundation and other contributors, https://js.foundation/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +****************************************** + +The jQuery JavaScript Library v3.5.1 also includes Sizzle.js + +Sizzle.js includes the following license: + +Copyright JS Foundation and other contributors, https://js.foundation/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/sizzle + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +********************* + +``` diff --git a/tictactoe/jdoc/legal/jqueryUI.md b/tictactoe/jdoc/legal/jqueryUI.md new file mode 100644 index 00000000..8031bdb5 --- /dev/null +++ b/tictactoe/jdoc/legal/jqueryUI.md @@ -0,0 +1,49 @@ +## jQuery UI v1.12.1 + +### jQuery UI License +``` +Copyright jQuery Foundation and other contributors, https://jquery.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/jquery-ui + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code contained within the demos directory. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +``` diff --git a/tictactoe/jdoc/member-search-index.js b/tictactoe/jdoc/member-search-index.js new file mode 100644 index 00000000..54a005cb --- /dev/null +++ b/tictactoe/jdoc/member-search-index.js @@ -0,0 +1 @@ +memberSearchIndex = [{"p":"view","c":"RowGameBoardView","l":"blocks"},{"p":"model","c":"RowGameModel","l":"blocksData"},{"p":"view","c":"RowGameGUI","l":"boardView"},{"p":"controller","c":"RowGameController","l":"columnChecker(int, int)","u":"columnChecker(int,int)"},{"p":"model","c":"RowBlockModel","l":"contents"},{"p":"controller","c":"RowGameController","l":"diagChecker(int, int)","u":"diagChecker(int,int)"},{"p":"view","c":"RowGameGUI","l":"disableButtons()"},{"p":"controller","c":"RowGameController","l":"doTurn(int, int, boolean)","u":"doTurn(int,int,boolean)"},{"p":"view","c":"RowGameStatusView.GameStatus","l":"DRAW"},{"p":"model","c":"RowBlockModel.PlayerPiece","l":"Empty"},{"p":"controller","c":"RowGameController","l":"endGame()"},{"p":"model","c":"RowBlockModel","l":"equals(Object)","u":"equals(java.lang.Object)"},{"p":"model","c":"RowGameModel","l":"finalResult"},{"p":"model","c":"RowBlockModel","l":"game"},{"p":"model","c":"RowGameModel","l":"GAME_END_NOWINNER"},{"p":"controller","c":"RowGameController","l":"gameModel"},{"p":"view","c":"RowGameGUI","l":"gameModel"},{"p":"view","c":"RowGameStatusView.GameStatus","l":"GameStatus()","u":"%3Cinit%3E()"},{"p":"controller","c":"RowGameController","l":"gameView"},{"p":"view","c":"RowGameGUI","l":"getBlocks()"},{"p":"model","c":"RowBlockModel","l":"getContents()"},{"p":"model","c":"RowGameModel","l":"getFinalResult()"},{"p":"model","c":"RowBlockModel","l":"getGame()"},{"p":"model","c":"RowBlockModel","l":"getIsLegalMove()"},{"p":"model","c":"RowBlockModel","l":"getPiece()"},{"p":"view","c":"RowGameGUI","l":"gui"},{"p":"model","c":"RowBlockModel","l":"isLegalMove"},{"p":"controller","c":"RowGameController","l":"lineChecker(int, int)","u":"lineChecker(int,int)"},{"p":"","c":"RowGameApp","l":"main(String[])","u":"main(java.lang.String[])"},{"p":"controller","c":"RowGameController","l":"move(JButton)","u":"move(javax.swing.JButton)"},{"p":"model","c":"RowGameModel","l":"movesLeft"},{"p":"model","c":"RowBlockModel.PlayerPiece","l":"O"},{"p":"model","c":"RowGameModel.Player","l":"One"},{"p":"view","c":"RowGameStatusView.GameStatus","l":"P1TURN"},{"p":"view","c":"RowGameStatusView.GameStatus","l":"P1WIN"},{"p":"view","c":"RowGameStatusView.GameStatus","l":"P2TURN"},{"p":"view","c":"RowGameStatusView.GameStatus","l":"P2WIN"},{"p":"model","c":"RowGameModel","l":"player"},{"p":"model","c":"RowGameModel.Player","l":"Player()","u":"%3Cinit%3E()"},{"p":"model","c":"RowBlockModel.PlayerPiece","l":"PlayerPiece(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"view","c":"RowGameStatusView","l":"playerturn"},{"p":"controller","c":"RowGameController","l":"playerWinCheck(JButton, boolean)","u":"playerWinCheck(javax.swing.JButton,boolean)"},{"p":"view","c":"RowGameGUI","l":"reset"},{"p":"model","c":"RowBlockModel","l":"reset()"},{"p":"controller","c":"RowGameController","l":"resetGame()"},{"p":"model","c":"RowBlockModel","l":"RowBlockModel(RowBlockModel)","u":"%3Cinit%3E(model.RowBlockModel)"},{"p":"model","c":"RowBlockModel","l":"RowBlockModel(RowGameModel)","u":"%3Cinit%3E(model.RowGameModel)"},{"p":"controller","c":"RowGameController","l":"rowChecker(int, int)","u":"rowChecker(int,int)"},{"p":"","c":"RowGameApp","l":"RowGameApp()","u":"%3Cinit%3E()"},{"p":"view","c":"RowGameBoardView","l":"RowGameBoardView()","u":"%3Cinit%3E()"},{"p":"controller","c":"RowGameController","l":"RowGameController()","u":"%3Cinit%3E()"},{"p":"view","c":"RowGameGUI","l":"RowGameGUI(RowGameController)","u":"%3Cinit%3E(controller.RowGameController)"},{"p":"model","c":"RowGameModel","l":"RowGameModel()","u":"%3Cinit%3E()"},{"p":"view","c":"RowGameStatusView","l":"RowGameStatusView()","u":"%3Cinit%3E()"},{"p":"model","c":"RowGameModel","l":"setFinalResult(RowGameStatusView.GameStatus)","u":"setFinalResult(view.RowGameStatusView.GameStatus)"},{"p":"model","c":"RowBlockModel","l":"setIsLegalMove(boolean)"},{"p":"model","c":"RowBlockModel","l":"setPiece(RowBlockModel.PlayerPiece)","u":"setPiece(model.RowBlockModel.PlayerPiece)"},{"p":"view","c":"RowGameStatusView.GameStatus","l":"START"},{"p":"view","c":"RowGameGUI","l":"statusView"},{"p":"model","c":"RowBlockModel.PlayerPiece","l":"str"},{"p":"model","c":"RowBlockModel.PlayerPiece","l":"toString()"},{"p":"model","c":"RowGameModel.Player","l":"Two"},{"p":"view","c":"RowGameBoardView","l":"update(RowGameModel, int, int)","u":"update(model.RowGameModel,int,int)"},{"p":"view","c":"RowGameStatusView","l":"update(RowGameStatusView.GameStatus)","u":"update(view.RowGameStatusView.GameStatus)"},{"p":"view","c":"RowGameGUI","l":"updateBlock(RowGameModel, int, int)","u":"updateBlock(model.RowGameModel,int,int)"},{"p":"view","c":"RowGameGUI","l":"updateStatus(RowGameStatusView.GameStatus)","u":"updateStatus(view.RowGameStatusView.GameStatus)"},{"p":"model","c":"RowBlockModel.PlayerPiece","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"model","c":"RowGameModel.Player","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"view","c":"RowGameStatusView.GameStatus","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"model","c":"RowBlockModel.PlayerPiece","l":"values()"},{"p":"model","c":"RowGameModel.Player","l":"values()"},{"p":"view","c":"RowGameStatusView.GameStatus","l":"values()"},{"p":"controller","c":"RowGameController","l":"winChecker(JButton)","u":"winChecker(javax.swing.JButton)"},{"p":"model","c":"RowBlockModel.PlayerPiece","l":"X"}];updateSearchResults(); \ No newline at end of file diff --git a/tictactoe/jdoc/model/RowBlockModel.PlayerPiece.html b/tictactoe/jdoc/model/RowBlockModel.PlayerPiece.html new file mode 100644 index 00000000..13249ca6 --- /dev/null +++ b/tictactoe/jdoc/model/RowBlockModel.PlayerPiece.html @@ -0,0 +1,302 @@ + + + + +RowBlockModel.PlayerPiece (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package model
+

Enum Class RowBlockModel.PlayerPiece

+
+
java.lang.Object +
java.lang.Enum<RowBlockModel.PlayerPiece> +
model.RowBlockModel.PlayerPiece
+
+
+
+
+
All Implemented Interfaces:
+
Serializable, Comparable<RowBlockModel.PlayerPiece>, Constable
+
+
+
Enclosing class:
+
RowBlockModel
+
+
+
public static enum RowBlockModel.PlayerPiece +extends Enum<RowBlockModel.PlayerPiece>
+
Used enum to distinguish the pieces for each player
+
+
+ +
+
+
    + +
  • +
    +

    Enum Constant Details

    + +
    +
  • + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      str

      +
      private final String str
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      PlayerPiece

      +
      private PlayerPiece(String str)
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      values

      +
      public static RowBlockModel.PlayerPiece[] values()
      +
      Returns an array containing the constants of this enum class, in +the order they are declared.
      +
      +
      Returns:
      +
      an array containing the constants of this enum class, in the order they are declared
      +
      +
      +
    • +
    • +
      +

      valueOf

      +
      public static RowBlockModel.PlayerPiece valueOf(String name)
      +
      Returns the enum constant of this class with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this class. (Extraneous whitespace characters are +not permitted.)
      +
      +
      Parameters:
      +
      name - the name of the enum constant to be returned.
      +
      Returns:
      +
      the enum constant with the specified name
      +
      Throws:
      +
      IllegalArgumentException - if this enum class has no constant with the specified name
      +
      NullPointerException - if the argument is null
      +
      +
      +
    • +
    • +
      +

      toString

      +
      public String toString()
      +
      +
      Overrides:
      +
      toString in class Enum<RowBlockModel.PlayerPiece>
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/tictactoe/jdoc/model/RowBlockModel.html b/tictactoe/jdoc/model/RowBlockModel.html new file mode 100644 index 00000000..23c60a90 --- /dev/null +++ b/tictactoe/jdoc/model/RowBlockModel.html @@ -0,0 +1,336 @@ + + + + +RowBlockModel (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package model
+

Class RowBlockModel

+
+
java.lang.Object +
model.RowBlockModel
+
+
+
+
public class RowBlockModel +extends Object
+
The TicTacToeBlock class represents a given block in the game.
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      game

      +
      private RowGameModel game
      +
      The game that contains this block
      +
      +
    • +
    • +
      +

      contents

      +
      private RowBlockModel.PlayerPiece contents
      +
      The current value of the contents of this block
      +
      +
    • +
    • +
      +

      isLegalMove

      +
      private boolean isLegalMove
      +
      Whether or not it is currently legal to move into this block
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      RowBlockModel

      +
      public RowBlockModel(RowGameModel rowGameModel)
      +
      Creates a new block that will be contained in the given game.
      +
      +
      Parameters:
      +
      rowGameModel - The game that will contain the new block
      +
      Throws:
      +
      IllegalArgumentException - When the given game is null
      +
      +
      +
    • +
    • +
      +

      RowBlockModel

      +
      public RowBlockModel(RowBlockModel block)
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      getGame

      +
      public RowGameModel getGame()
      +
      +
    • +
    • +
      +

      setPiece

      +
      public void setPiece(RowBlockModel.PlayerPiece playerPiece)
      +
      Sets the contents of this block to the given value.
      +
      +
      Parameters:
      +
      value - The new value for the contents of this block
      +
      Throws:
      +
      IllegalArgumentException - When the given value is null
      +
      +
      +
    • +
    • +
      +

      getPiece

      +
      public RowBlockModel.PlayerPiece getPiece()
      +
      +
    • +
    • +
      +

      getContents

      +
      public String getContents()
      +
      Returns the non-null String value of the contents of this block.
      +
      +
      Returns:
      +
      The non-null String value
      +
      +
      +
    • +
    • +
      +

      setIsLegalMove

      +
      public void setIsLegalMove(boolean isLegalMove)
      +
      +
    • +
    • +
      +

      getIsLegalMove

      +
      public boolean getIsLegalMove()
      +
      +
    • +
    • +
      +

      reset

      +
      public void reset()
      +
      Resets this block before starting a new game.
      +
      +
    • +
    • +
      +

      equals

      +
      public boolean equals(Object other)
      +
      +
      Overrides:
      +
      equals in class Object
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/tictactoe/jdoc/model/RowGameModel.Player.html b/tictactoe/jdoc/model/RowGameModel.Player.html new file mode 100644 index 00000000..9a554e40 --- /dev/null +++ b/tictactoe/jdoc/model/RowGameModel.Player.html @@ -0,0 +1,251 @@ + + + + +RowGameModel.Player (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package model
+

Enum Class RowGameModel.Player

+
+
java.lang.Object +
java.lang.Enum<RowGameModel.Player> +
model.RowGameModel.Player
+
+
+
+
+
All Implemented Interfaces:
+
Serializable, Comparable<RowGameModel.Player>, Constable
+
+
+
Enclosing class:
+
RowGameModel
+
+
+
public static enum RowGameModel.Player +extends Enum<RowGameModel.Player>
+
+
+ +
+
+
    + +
  • +
    +

    Enum Constant Details

    + +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      Player

      +
      private Player()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      values

      +
      public static RowGameModel.Player[] values()
      +
      Returns an array containing the constants of this enum class, in +the order they are declared.
      +
      +
      Returns:
      +
      an array containing the constants of this enum class, in the order they are declared
      +
      +
      +
    • +
    • +
      +

      valueOf

      +
      public static RowGameModel.Player valueOf(String name)
      +
      Returns the enum constant of this class with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this class. (Extraneous whitespace characters are +not permitted.)
      +
      +
      Parameters:
      +
      name - the name of the enum constant to be returned.
      +
      Returns:
      +
      the enum constant with the specified name
      +
      Throws:
      +
      IllegalArgumentException - if this enum class has no constant with the specified name
      +
      NullPointerException - if the argument is null
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/tictactoe/jdoc/model/RowGameModel.html b/tictactoe/jdoc/model/RowGameModel.html new file mode 100644 index 00000000..d9f527de --- /dev/null +++ b/tictactoe/jdoc/model/RowGameModel.html @@ -0,0 +1,251 @@ + + + + +RowGameModel (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package model
+

Class RowGameModel

+
+
java.lang.Object +
model.RowGameModel
+
+
+
+
public class RowGameModel +extends Object
+
+
+ +
+
+ +
+ +
+
+
+ + diff --git a/tictactoe/jdoc/model/class-use/RowBlockModel.PlayerPiece.html b/tictactoe/jdoc/model/class-use/RowBlockModel.PlayerPiece.html new file mode 100644 index 00000000..34bfd29b --- /dev/null +++ b/tictactoe/jdoc/model/class-use/RowBlockModel.PlayerPiece.html @@ -0,0 +1,116 @@ + + + + +Uses of Enum Class model.RowBlockModel.PlayerPiece (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Enum Class
model.RowBlockModel.PlayerPiece

+
+
Packages that use RowBlockModel.PlayerPiece
+
+
Package
+
Description
+ +
 
+
+
+ +
+
+
+
+ + diff --git a/tictactoe/jdoc/model/class-use/RowBlockModel.html b/tictactoe/jdoc/model/class-use/RowBlockModel.html new file mode 100644 index 00000000..fa040499 --- /dev/null +++ b/tictactoe/jdoc/model/class-use/RowBlockModel.html @@ -0,0 +1,92 @@ + + + + +Uses of Class model.RowBlockModel (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
model.RowBlockModel

+
+
Packages that use RowBlockModel
+
+
Package
+
Description
+ +
 
+
+
+ +
+
+
+
+ + diff --git a/tictactoe/jdoc/model/class-use/RowGameModel.Player.html b/tictactoe/jdoc/model/class-use/RowGameModel.Player.html new file mode 100644 index 00000000..eab6fc63 --- /dev/null +++ b/tictactoe/jdoc/model/class-use/RowGameModel.Player.html @@ -0,0 +1,102 @@ + + + + +Uses of Enum Class model.RowGameModel.Player (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Enum Class
model.RowGameModel.Player

+
+
Packages that use RowGameModel.Player
+
+
Package
+
Description
+ +
 
+
+
+ +
+
+
+
+ + diff --git a/tictactoe/jdoc/model/class-use/RowGameModel.html b/tictactoe/jdoc/model/class-use/RowGameModel.html new file mode 100644 index 00000000..4b070a9e --- /dev/null +++ b/tictactoe/jdoc/model/class-use/RowGameModel.html @@ -0,0 +1,156 @@ + + + + +Uses of Class model.RowGameModel (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
model.RowGameModel

+
+
Packages that use RowGameModel
+
+
Package
+
Description
+ +
 
+ +
 
+ +
 
+
+
+ +
+
+
+
+ + diff --git a/tictactoe/jdoc/model/package-summary.html b/tictactoe/jdoc/model/package-summary.html new file mode 100644 index 00000000..6959653f --- /dev/null +++ b/tictactoe/jdoc/model/package-summary.html @@ -0,0 +1,99 @@ + + + + +model (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Package model

+
+
+
package model
+
+ +
+
+
+
+ + diff --git a/tictactoe/jdoc/model/package-tree.html b/tictactoe/jdoc/model/package-tree.html new file mode 100644 index 00000000..8032f352 --- /dev/null +++ b/tictactoe/jdoc/model/package-tree.html @@ -0,0 +1,88 @@ + + + + +model Class Hierarchy (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package model

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+

Enum Class Hierarchy

+ +
+
+
+
+ + diff --git a/tictactoe/jdoc/model/package-use.html b/tictactoe/jdoc/model/package-use.html new file mode 100644 index 00000000..8542f5c6 --- /dev/null +++ b/tictactoe/jdoc/model/package-use.html @@ -0,0 +1,116 @@ + + + + +Uses of Package model (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
model

+
+
Packages that use model
+
+
Package
+
Description
+ +
 
+ +
 
+ +
 
+
+
+ +
+
+
+
+ + diff --git a/tictactoe/jdoc/module-search-index.js b/tictactoe/jdoc/module-search-index.js new file mode 100644 index 00000000..0d59754f --- /dev/null +++ b/tictactoe/jdoc/module-search-index.js @@ -0,0 +1 @@ +moduleSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/tictactoe/jdoc/overview-summary.html b/tictactoe/jdoc/overview-summary.html new file mode 100644 index 00000000..234f87cf --- /dev/null +++ b/tictactoe/jdoc/overview-summary.html @@ -0,0 +1,26 @@ + + + + +CS520 - Homework 1 + + + + + + + + + + + +
+ +

index.html

+
+ + diff --git a/tictactoe/jdoc/overview-tree.html b/tictactoe/jdoc/overview-tree.html new file mode 100644 index 00000000..b445da19 --- /dev/null +++ b/tictactoe/jdoc/overview-tree.html @@ -0,0 +1,96 @@ + + + + +Class Hierarchy (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+

Enum Class Hierarchy

+ +
+
+
+
+ + diff --git a/tictactoe/jdoc/package-search-index.js b/tictactoe/jdoc/package-search-index.js new file mode 100644 index 00000000..3a812d6c --- /dev/null +++ b/tictactoe/jdoc/package-search-index.js @@ -0,0 +1 @@ +packageSearchIndex = [{"l":"All Packages","u":"allpackages-index.html"},{"l":"controller"},{"l":"model"},{"l":"view"}];updateSearchResults(); \ No newline at end of file diff --git a/tictactoe/jdoc/package-summary.html b/tictactoe/jdoc/package-summary.html new file mode 100644 index 00000000..f6e187db --- /dev/null +++ b/tictactoe/jdoc/package-summary.html @@ -0,0 +1,82 @@ + + + + +Unnamed Package (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Unnamed Package

+
+
+
+
    +
  • +
    +
    Classes
    +
    +
    Class
    +
    Description
    + +
     
    +
    +
    +
  • +
+
+
+
+
+ + diff --git a/tictactoe/jdoc/package-tree.html b/tictactoe/jdoc/package-tree.html new file mode 100644 index 00000000..7ad850ec --- /dev/null +++ b/tictactoe/jdoc/package-tree.html @@ -0,0 +1,72 @@ + + + + + Class Hierarchy (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Unnamed Package

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/tictactoe/jdoc/package-use.html b/tictactoe/jdoc/package-use.html new file mode 100644 index 00000000..580e42a8 --- /dev/null +++ b/tictactoe/jdoc/package-use.html @@ -0,0 +1,58 @@ + + + + +Uses of Package (CS520 - Homework 1) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package

+
+No usage of Unnamed Package
+
+
+ + diff --git a/tictactoe/jdoc/resources/glass.png b/tictactoe/jdoc/resources/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f591f467a1c0c949bbc510156a0c1afb860a6e GIT binary patch literal 499 zcmVJoRsvExf%rEN>jUL}qZ_~k#FbE+Q;{`;0FZwVNX2n-^JoI; zP;4#$8DIy*Yk-P>VN(DUKmPse7mx+ExD4O|;?E5D0Z5($mjO3`*anwQU^s{ZDK#Lz zj>~{qyaIx5K!t%=G&2IJNzg!ChRpyLkO7}Ry!QaotAHAMpbB3AF(}|_f!G-oI|uK6 z`id_dumai5K%C3Y$;tKS_iqMPHg<*|-@e`liWLAggVM!zAP#@l;=c>S03;{#04Z~5 zN_+ss=Yg6*hTr59mzMwZ@+l~q!+?ft!fF66AXT#wWavHt30bZWFCK%!BNk}LN?0Hg z1VF_nfs`Lm^DjYZ1(1uD0u4CSIr)XAaqW6IT{!St5~1{i=i}zAy76p%_|w8rh@@c0Axr!ns=D-X+|*sY6!@wacG9%)Qn*O zl0sa739kT-&_?#oVxXF6tOnqTD)cZ}2vi$`ZU8RLAlo8=_z#*P3xI~i!lEh+Pdu-L zx{d*wgjtXbnGX_Yf@Tc7Q3YhLhPvc8noGJs2DA~1DySiA&6V{5JzFt ojAY1KXm~va;tU{v7C?Xj0BHw!K;2aXV*mgE07*qoM6N<$f;4TDA^-pY literal 0 HcmV?d00001 diff --git a/tictactoe/jdoc/script-dir/images/ui-bg_glass_55_fbf9ee_1x400.png b/tictactoe/jdoc/script-dir/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..34abd18f32d3a55a297fdcf93409bd033ae573e7 GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fCnc6a#?2AmP!?*K(O3p^r= zfwTu0yPeFo12TF&T^vI^j=w#x$i?I+((tf;UXnmgbH|3oY>pC!)f}(GR!16S-u+#{ ze6YEqRkW=8vGl=5qArKM<9}TC-}iEvB{zdaTcX5$wyRTK&ALRXUCGx5b?-VBQkUm|IuXOmYJrBRJgj{Vx zMbNnqUkncy+qa2-mWYc>swkcIuvGK#>(0d)B7)5f`@$Ei28nH~0h*~=;u=wsl30>z zm0Xkxq!^403@vmGjdTsnLJUl-Obo4zO|=aStPBhe<(7X!(U6;;l9^VCTf=69^L{`L N44$rjF6*2UngDu&PXPb` literal 0 HcmV?d00001 diff --git a/tictactoe/jdoc/script-dir/images/ui-bg_glass_75_e6e6e6_1x400.png b/tictactoe/jdoc/script-dir/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..a90afb8bf8028404d206114965669b023dcb85ea GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq?nSt-Ch3w7g=q17Rci)@Q5r1 z(jH*!b~4)z#PD=+46!(!TrvH)L6@80)r*_cdCvDr%)6ghVL16=s@mbz7H!uRdGeDa z?kzLg)16i!f8fKx84s0>4hES%`s&m5HI1v5B^Uft7(lid2moiiX_$l+3hB+!{pPkNg5^ OVDNPHb6Mw<&;$T*0!_~V literal 0 HcmV?d00001 diff --git a/tictactoe/jdoc/script-dir/images/ui-bg_glass_95_fef1ec_1x400.png b/tictactoe/jdoc/script-dir/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe091f6dc036fc1dc11b005738e951e27a43f7a GIT binary patch literal 332 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�_j6WK+Gj+xJRxVvl#lh7y-4uY);t)n47k4ot z9YsU`HVk7fg4;r{;)FHk7ZHyZJ+W|$aKwj=g&_$VCVFn5%XzSA`|z}+4ItZ|`hB}R z>h-6Be`d>nmv8;kQHJg!HMr^cCGG=T5;3HhZ_JRq0_4a3TsY7Pz{V+}z>;!R^U4*c zJ>wRI59B-)92Vi?b&EWvH(`<(G5A?W)z>EuDMG@VENAb7aHa`I#tKw{0uUc3(#J8& z*_S%A_ZxCIY385{%qN-b1K)TWmCjUA4nWKx_ZnKLSvEf0($&_0@DS~ zN8JOXJXXcaFm^OCYrz(R7N5DQkXKGnnt}yzfw^8s%=A?7hxza;ylJ;XQ&XtC`pM%b z6$5Ff0{(ALcSlTKvIbr@mR`0Z)*iM`2EfO|E5OMk$jQsE!^mat*drqV literal 0 HcmV?d00001 diff --git a/tictactoe/jdoc/script-dir/images/ui-icons_2e83ff_256x240.png b/tictactoe/jdoc/script-dir/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..1f5f49756ca64bd20a1048bd7a3a584457d4bf00 GIT binary patch literal 4549 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 literal 0 HcmV?d00001 diff --git a/tictactoe/jdoc/script-dir/images/ui-icons_888888_256x240.png b/tictactoe/jdoc/script-dir/images/ui-icons_888888_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..ee5e33f27235d1b5cf0259f63f3894a6be33c679 GIT binary patch literal 6999 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 literal 0 HcmV?d00001 diff --git a/tictactoe/jdoc/script-dir/images/ui-icons_cd0a0a_256x240.png b/tictactoe/jdoc/script-dir/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..7e8ebc180a2d2a74739059799407b8b7b57a9092 GIT binary patch literal 4549 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 Mq_Ix57W&cu0AIB!=l}o! literal 0 HcmV?d00001 diff --git a/tictactoe/jdoc/script-dir/jquery-3.5.1.min.js b/tictactoe/jdoc/script-dir/jquery-3.5.1.min.js new file mode 100644 index 00000000..b0614034 --- /dev/null +++ b/tictactoe/jdoc/script-dir/jquery-3.5.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0a;a++)for(s in o[a])n=o[a][s],o[a].hasOwnProperty(s)&&void 0!==n&&(e[s]=t.isPlainObject(n)?t.isPlainObject(e[s])?t.widget.extend({},e[s],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,s){var n=s.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=i.call(arguments,1),l=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(l=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(l=i&&i.jquery?l.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):l=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new s(o,this))})),l}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(i,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=e++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),i),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var l=s.match(/^([\w:-]*)\s*(.*)$/),h=l[1]+o.eventNamespace,c=l[2];c?n.on(h,c,r):i.on(h,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,l=/top|center|bottom/,h=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};h>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),l.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,l=n-r,h=r+e.collisionWidth-a-n;e.collisionWidth>a?l>0&&0>=h?(i=t.left+l+e.collisionWidth-a-n,t.left+=l-i):t.left=h>0&&0>=l?n:l>h?n+a-e.collisionWidth:n:l>0?t.left+=l:h>0?t.left-=h:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,l=n-r,h=r+e.collisionHeight-a-n;e.collisionHeight>a?l>0&&0>=h?(i=t.top+l+e.collisionHeight-a-n,t.top+=l-i):t.top=h>0&&0>=l?n:l>h?n+a-e.collisionHeight:n:l>0?t.top+=l:h>0?t.top-=h:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,l=n.isWindow?n.scrollLeft:n.offset.left,h=t.left-e.collisionPosition.marginLeft,c=h-l,u=h+e.collisionWidth-r-l,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-l,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,l=n.isWindow?n.scrollTop:n.offset.top,h=t.top-e.collisionPosition.marginTop,c=h-l,u=h+e.collisionHeight-r-l,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-l,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.widget("ui.menu",{version:"1.12.1",defaultElement:"
    ",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,l=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=l.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=l.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("
      ").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("
      ").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("
      ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(t("
      ").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("
      ").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete}); \ No newline at end of file diff --git a/tictactoe/jdoc/script-dir/jquery-ui.structure.min.css b/tictactoe/jdoc/script-dir/jquery-ui.structure.min.css new file mode 100644 index 00000000..e8808927 --- /dev/null +++ b/tictactoe/jdoc/script-dir/jquery-ui.structure.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.12.1 - 2018-12-06 +* http://jqueryui.com +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0} \ No newline at end of file diff --git a/tictactoe/jdoc/script.js b/tictactoe/jdoc/script.js new file mode 100644 index 00000000..0765364e --- /dev/null +++ b/tictactoe/jdoc/script.js @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +var moduleSearchIndex; +var packageSearchIndex; +var typeSearchIndex; +var memberSearchIndex; +var tagSearchIndex; +function loadScripts(doc, tag) { + createElem(doc, tag, 'search.js'); + + createElem(doc, tag, 'module-search-index.js'); + createElem(doc, tag, 'package-search-index.js'); + createElem(doc, tag, 'type-search-index.js'); + createElem(doc, tag, 'member-search-index.js'); + createElem(doc, tag, 'tag-search-index.js'); +} + +function createElem(doc, tag, path) { + var script = doc.createElement(tag); + var scriptElement = doc.getElementsByTagName(tag)[0]; + script.src = pathtoroot + path; + scriptElement.parentNode.insertBefore(script, scriptElement); +} + +function show(tableId, selected, columns) { + if (tableId !== selected) { + document.querySelectorAll('div.' + tableId + ':not(.' + selected + ')') + .forEach(function(elem) { + elem.style.display = 'none'; + }); + } + document.querySelectorAll('div.' + selected) + .forEach(function(elem, index) { + elem.style.display = ''; + var isEvenRow = index % (columns * 2) < columns; + elem.classList.remove(isEvenRow ? oddRowColor : evenRowColor); + elem.classList.add(isEvenRow ? evenRowColor : oddRowColor); + }); + updateTabs(tableId, selected); +} + +function updateTabs(tableId, selected) { + document.querySelector('div#' + tableId +' .summary-table') + .setAttribute('aria-labelledby', selected); + document.querySelectorAll('button[id^="' + tableId + '"]') + .forEach(function(tab, index) { + if (selected === tab.id || (tableId === selected && index === 0)) { + tab.className = activeTableTab; + tab.setAttribute('aria-selected', true); + tab.setAttribute('tabindex',0); + } else { + tab.className = tableTab; + tab.setAttribute('aria-selected', false); + tab.setAttribute('tabindex',-1); + } + }); +} + +function switchTab(e) { + var selected = document.querySelector('[aria-selected=true]'); + if (selected) { + if ((e.keyCode === 37 || e.keyCode === 38) && selected.previousSibling) { + // left or up arrow key pressed: move focus to previous tab + selected.previousSibling.click(); + selected.previousSibling.focus(); + e.preventDefault(); + } else if ((e.keyCode === 39 || e.keyCode === 40) && selected.nextSibling) { + // right or down arrow key pressed: move focus to next tab + selected.nextSibling.click(); + selected.nextSibling.focus(); + e.preventDefault(); + } + } +} + +var updateSearchResults = function() {}; + +function indexFilesLoaded() { + return moduleSearchIndex + && packageSearchIndex + && typeSearchIndex + && memberSearchIndex + && tagSearchIndex; +} + +// Workaround for scroll position not being included in browser history (8249133) +document.addEventListener("DOMContentLoaded", function(e) { + var contentDiv = document.querySelector("div.flex-content"); + window.addEventListener("popstate", function(e) { + if (e.state !== null) { + contentDiv.scrollTop = e.state; + } + }); + window.addEventListener("hashchange", function(e) { + history.replaceState(contentDiv.scrollTop, document.title); + }); + contentDiv.addEventListener("scroll", function(e) { + var timeoutID; + if (!timeoutID) { + timeoutID = setTimeout(function() { + history.replaceState(contentDiv.scrollTop, document.title); + timeoutID = null; + }, 100); + } + }); + if (!location.hash) { + history.replaceState(contentDiv.scrollTop, document.title); + } +}); diff --git a/tictactoe/jdoc/search.js b/tictactoe/jdoc/search.js new file mode 100644 index 00000000..13aba853 --- /dev/null +++ b/tictactoe/jdoc/search.js @@ -0,0 +1,354 @@ +/* + * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +var noResult = {l: "No results found"}; +var loading = {l: "Loading search index..."}; +var catModules = "Modules"; +var catPackages = "Packages"; +var catTypes = "Classes and Interfaces"; +var catMembers = "Members"; +var catSearchTags = "Search Tags"; +var highlight = "$&"; +var searchPattern = ""; +var fallbackPattern = ""; +var RANKING_THRESHOLD = 2; +var NO_MATCH = 0xffff; +var MIN_RESULTS = 3; +var MAX_RESULTS = 500; +var UNNAMED = ""; +function escapeHtml(str) { + return str.replace(//g, ">"); +} +function getHighlightedText(item, matcher, fallbackMatcher) { + var escapedItem = escapeHtml(item); + var highlighted = escapedItem.replace(matcher, highlight); + if (highlighted === escapedItem) { + highlighted = escapedItem.replace(fallbackMatcher, highlight) + } + return highlighted; +} +function getURLPrefix(ui) { + var urlPrefix=""; + var slash = "/"; + if (ui.item.category === catModules) { + return ui.item.l + slash; + } else if (ui.item.category === catPackages && ui.item.m) { + return ui.item.m + slash; + } else if (ui.item.category === catTypes || ui.item.category === catMembers) { + if (ui.item.m) { + urlPrefix = ui.item.m + slash; + } else { + $.each(packageSearchIndex, function(index, item) { + if (item.m && ui.item.p === item.l) { + urlPrefix = item.m + slash; + } + }); + } + } + return urlPrefix; +} +function createSearchPattern(term) { + var pattern = ""; + var isWordToken = false; + term.replace(/,\s*/g, ", ").trim().split(/\s+/).forEach(function(w, index) { + if (index > 0) { + // whitespace between identifiers is significant + pattern += (isWordToken && /^\w/.test(w)) ? "\\s+" : "\\s*"; + } + var tokens = w.split(/(?=[A-Z,.()<>[\/])/); + for (var i = 0; i < tokens.length; i++) { + var s = tokens[i]; + if (s === "") { + continue; + } + pattern += $.ui.autocomplete.escapeRegex(s); + isWordToken = /\w$/.test(s); + if (isWordToken) { + pattern += "([a-z0-9_$<>\\[\\]]*?)"; + } + } + }); + return pattern; +} +function createMatcher(pattern, flags) { + var isCamelCase = /[A-Z]/.test(pattern); + return new RegExp(pattern, flags + (isCamelCase ? "" : "i")); +} +var watermark = 'Search'; +$(function() { + var search = $("#search-input"); + var reset = $("#reset-button"); + search.val(''); + search.prop("disabled", false); + reset.prop("disabled", false); + search.val(watermark).addClass('watermark'); + search.blur(function() { + if ($(this).val().length === 0) { + $(this).val(watermark).addClass('watermark'); + } + }); + search.on('click keydown paste', function() { + if ($(this).val() === watermark) { + $(this).val('').removeClass('watermark'); + } + }); + reset.click(function() { + search.val('').focus(); + }); + search.focus()[0].setSelectionRange(0, 0); +}); +$.widget("custom.catcomplete", $.ui.autocomplete, { + _create: function() { + this._super(); + this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); + }, + _renderMenu: function(ul, items) { + var rMenu = this; + var currentCategory = ""; + rMenu.menu.bindings = $(); + $.each(items, function(index, item) { + var li; + if (item.category && item.category !== currentCategory) { + ul.append("
    • " + item.category + "
    • "); + currentCategory = item.category; + } + li = rMenu._renderItemData(ul, item); + if (item.category) { + li.attr("aria-label", item.category + " : " + item.l); + li.attr("class", "result-item"); + } else { + li.attr("aria-label", item.l); + li.attr("class", "result-item"); + } + }); + }, + _renderItem: function(ul, item) { + var label = ""; + var matcher = createMatcher(escapeHtml(searchPattern), "g"); + var fallbackMatcher = new RegExp(fallbackPattern, "gi") + if (item.category === catModules) { + label = getHighlightedText(item.l, matcher, fallbackMatcher); + } else if (item.category === catPackages) { + label = getHighlightedText(item.l, matcher, fallbackMatcher); + } else if (item.category === catTypes) { + label = (item.p && item.p !== UNNAMED) + ? getHighlightedText(item.p + "." + item.l, matcher, fallbackMatcher) + : getHighlightedText(item.l, matcher, fallbackMatcher); + } else if (item.category === catMembers) { + label = (item.p && item.p !== UNNAMED) + ? getHighlightedText(item.p + "." + item.c + "." + item.l, matcher, fallbackMatcher) + : getHighlightedText(item.c + "." + item.l, matcher, fallbackMatcher); + } else if (item.category === catSearchTags) { + label = getHighlightedText(item.l, matcher, fallbackMatcher); + } else { + label = item.l; + } + var li = $("
    • ").appendTo(ul); + var div = $("
      ").appendTo(li); + if (item.category === catSearchTags && item.h) { + if (item.d) { + div.html(label + " (" + item.h + ")
      " + + item.d + "
      "); + } else { + div.html(label + " (" + item.h + ")"); + } + } else { + if (item.m) { + div.html(item.m + "/" + label); + } else { + div.html(label); + } + } + return li; + } +}); +function rankMatch(match, category) { + if (!match) { + return NO_MATCH; + } + var index = match.index; + var input = match.input; + var leftBoundaryMatch = 2; + var periferalMatch = 0; + // make sure match is anchored on a left word boundary + if (index === 0 || /\W/.test(input[index - 1]) || "_" === input[index]) { + leftBoundaryMatch = 0; + } else if ("_" === input[index - 1] || (input[index] === input[index].toUpperCase() && !/^[A-Z0-9_$]+$/.test(input))) { + leftBoundaryMatch = 1; + } + var matchEnd = index + match[0].length; + var leftParen = input.indexOf("("); + var endOfName = leftParen > -1 ? leftParen : input.length; + // exclude peripheral matches + if (category !== catModules && category !== catSearchTags) { + var delim = category === catPackages ? "/" : "."; + if (leftParen > -1 && leftParen < index) { + periferalMatch += 2; + } else if (input.lastIndexOf(delim, endOfName) >= matchEnd) { + periferalMatch += 2; + } + } + var delta = match[0].length === endOfName ? 0 : 1; // rank full match higher than partial match + for (var i = 1; i < match.length; i++) { + // lower ranking if parts of the name are missing + if (match[i]) + delta += match[i].length; + } + if (category === catTypes) { + // lower ranking if a type name contains unmatched camel-case parts + if (/[A-Z]/.test(input.substring(matchEnd))) + delta += 5; + if (/[A-Z]/.test(input.substring(0, index))) + delta += 5; + } + return leftBoundaryMatch + periferalMatch + (delta / 200); + +} +function doSearch(request, response) { + var result = []; + searchPattern = createSearchPattern(request.term); + fallbackPattern = createSearchPattern(request.term.toLowerCase()); + if (searchPattern === "") { + return this.close(); + } + var camelCaseMatcher = createMatcher(searchPattern, ""); + var fallbackMatcher = new RegExp(fallbackPattern, "i"); + + function searchIndexWithMatcher(indexArray, matcher, category, nameFunc) { + if (indexArray) { + var newResults = []; + $.each(indexArray, function (i, item) { + item.category = category; + var ranking = rankMatch(matcher.exec(nameFunc(item)), category); + if (ranking < RANKING_THRESHOLD) { + newResults.push({ranking: ranking, item: item}); + } + return newResults.length <= MAX_RESULTS; + }); + return newResults.sort(function(e1, e2) { + return e1.ranking - e2.ranking; + }).map(function(e) { + return e.item; + }); + } + return []; + } + function searchIndex(indexArray, category, nameFunc) { + var primaryResults = searchIndexWithMatcher(indexArray, camelCaseMatcher, category, nameFunc); + result = result.concat(primaryResults); + if (primaryResults.length <= MIN_RESULTS && !camelCaseMatcher.ignoreCase) { + var secondaryResults = searchIndexWithMatcher(indexArray, fallbackMatcher, category, nameFunc); + result = result.concat(secondaryResults.filter(function (item) { + return primaryResults.indexOf(item) === -1; + })); + } + } + + searchIndex(moduleSearchIndex, catModules, function(item) { return item.l; }); + searchIndex(packageSearchIndex, catPackages, function(item) { + return (item.m && request.term.indexOf("/") > -1) + ? (item.m + "/" + item.l) : item.l; + }); + searchIndex(typeSearchIndex, catTypes, function(item) { + return request.term.indexOf(".") > -1 ? item.p + "." + item.l : item.l; + }); + searchIndex(memberSearchIndex, catMembers, function(item) { + return request.term.indexOf(".") > -1 + ? item.p + "." + item.c + "." + item.l : item.l; + }); + searchIndex(tagSearchIndex, catSearchTags, function(item) { return item.l; }); + + if (!indexFilesLoaded()) { + updateSearchResults = function() { + doSearch(request, response); + } + result.unshift(loading); + } else { + updateSearchResults = function() {}; + } + response(result); +} +$(function() { + $("#search-input").catcomplete({ + minLength: 1, + delay: 300, + source: doSearch, + response: function(event, ui) { + if (!ui.content.length) { + ui.content.push(noResult); + } else { + $("#search-input").empty(); + } + }, + autoFocus: true, + focus: function(event, ui) { + return false; + }, + position: { + collision: "flip" + }, + select: function(event, ui) { + if (ui.item.category) { + var url = getURLPrefix(ui); + if (ui.item.category === catModules) { + url += "module-summary.html"; + } else if (ui.item.category === catPackages) { + if (ui.item.u) { + url = ui.item.u; + } else { + url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; + } + } else if (ui.item.category === catTypes) { + if (ui.item.u) { + url = ui.item.u; + } else if (ui.item.p === UNNAMED) { + url += ui.item.l + ".html"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; + } + } else if (ui.item.category === catMembers) { + if (ui.item.p === UNNAMED) { + url += ui.item.c + ".html" + "#"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; + } + if (ui.item.u) { + url += ui.item.u; + } else { + url += ui.item.l; + } + } else if (ui.item.category === catSearchTags) { + url += ui.item.u; + } + if (top !== window) { + parent.classFrame.location = pathtoroot + url; + } else { + window.location.href = pathtoroot + url; + } + $("#search-input").focus(); + } + } + }); +}); diff --git a/tictactoe/jdoc/stylesheet.css b/tictactoe/jdoc/stylesheet.css new file mode 100644 index 00000000..836c62da --- /dev/null +++ b/tictactoe/jdoc/stylesheet.css @@ -0,0 +1,865 @@ +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:#bb7a2a; +} +a[name] { + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; +} +h4 { + font-size:15px; +} +h5 { + font-size:14px; +} +h6 { + font-size:13px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; +} +:not(h1, h2, h3, h4, h5, h6) > code, +:not(h1, h2, h3, h4, h5, h6) > tt { + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +.summary-table dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +button { + font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size: 14px; +} +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.clear { + clear:both; + height:0; + overflow:hidden; +} +.about-language { + float:right; + padding:0 21px 8px 8px; + font-size:11px; + margin-top:-9px; + height:2.9em; +} +.legal-copy { + margin-left:.5em; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* + * Styles for navigation bar. + */ +@media screen { + .flex-box { + position:fixed; + display:flex; + flex-direction:column; + height: 100%; + width: 100%; + } + .flex-header { + flex: 0 0 auto; + } + .flex-content { + flex: 1 1 auto; + overflow-y: auto; + } +} +.top-nav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + min-height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.sub-nav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.sub-nav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +.sub-nav .nav-list { + padding-top:5px; +} +ul.nav-list { + display:block; + margin:0 25px 0 0; + padding:0; +} +ul.sub-nav-list { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.nav-list li { + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +.sub-nav .nav-list-search { + float:right; + margin:0 0 0 0; + padding:5px 6px; + clear:none; +} +.nav-list-search label { + position:relative; + right:-16px; +} +ul.sub-nav-list li { + list-style:none; + float:left; + padding-top:10px; +} +.top-nav a:link, .top-nav a:active, .top-nav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.top-nav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.nav-bar-cell1-rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skip-nav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Hide navigation links and search box in print layout + */ +@media print { + ul.nav-list, div.sub-nav { + display:none; + } +} +/* + * Styles for page header and footer. + */ +.title { + color:#2c4557; + margin:10px 0; +} +.sub-title { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* + * Styles for headings. + */ +body.class-declaration-page .summary h2, +body.class-declaration-page .details h2, +body.class-use-page h2, +body.module-declaration-page .block-list h2 { + font-style: italic; + padding:0; + margin:15px 0; +} +body.class-declaration-page .summary h3, +body.class-declaration-page .details h3, +body.class-declaration-page .summary .inherited-list h2 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +/* + * Styles for page layout containers. + */ +main { + clear:both; + padding:10px 20px; + position:relative; +} +dl.notes > dt { + font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +dl.notes > dd { + margin:5px 10px 10px 0; + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +dl.name-value > dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +dl.name-value > dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +div.inheritance { + margin:0; + padding:0; +} +div.inheritance div.inheritance { + margin-left:2em; +} +ul.block-list, +ul.details-list, +ul.member-list, +ul.summary-list { + margin:10px 0 10px 0; + padding:0; +} +ul.block-list > li, +ul.details-list > li, +ul.member-list > li, +ul.summary-list > li { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +.summary-table dl, .summary-table dl dt, .summary-table dl dd { + margin-top:0; + margin-bottom:1px; +} +ul.see-list, ul.see-list-long { + padding-left: 0; + list-style: none; +} +ul.see-list li { + display: inline; +} +ul.see-list li:not(:last-child):after, +ul.see-list-long li:not(:last-child):after { + content: ", "; + white-space: pre-wrap; +} +/* + * Styles for tables. + */ +.summary-table, .details-table { + width:100%; + border-spacing:0; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; + padding:0; +} +.caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0; + padding-top:10px; + padding-left:1px; + margin:0; + white-space:pre; +} +.caption a:link, .caption a:visited { + color:#1f389c; +} +.caption a:hover, +.caption a:active { + color:#FFFFFF; +} +.caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +div.table-tabs { + padding:10px 0 0 1px; + margin:0; +} +div.table-tabs > button { + border: none; + cursor: pointer; + padding: 5px 12px 7px 12px; + font-weight: bold; + margin-right: 3px; +} +div.table-tabs > button.active-table-tab { + background: #F8981D; + color: #253441; +} +div.table-tabs > button.table-tab { + background: #4D7A97; + color: #FFFFFF; +} +.two-column-summary { + display: grid; + grid-template-columns: minmax(15%, max-content) minmax(15%, auto); +} +.three-column-summary { + display: grid; + grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, auto); +} +.four-column-summary { + display: grid; + grid-template-columns: minmax(10%, max-content) minmax(10%, max-content) minmax(10%, max-content) minmax(10%, auto); +} +@media screen and (max-width: 600px) { + .two-column-summary { + display: grid; + grid-template-columns: 1fr; + } +} +@media screen and (max-width: 800px) { + .three-column-summary { + display: grid; + grid-template-columns: minmax(10%, max-content) minmax(25%, auto); + } + .three-column-summary .col-last { + grid-column-end: span 2; + } +} +@media screen and (max-width: 1000px) { + .four-column-summary { + display: grid; + grid-template-columns: minmax(15%, max-content) minmax(15%, auto); + } +} +.summary-table > div, .details-table > div { + text-align:left; + padding: 8px 3px 3px 7px; +} +.col-first, .col-second, .col-last, .col-constructor-name, .col-summary-item-name { + vertical-align:top; + padding-right:0; + padding-top:8px; + padding-bottom:3px; +} +.table-header { + background:#dee3e9; + font-weight: bold; +} +.col-first, .col-first { + font-size:13px; +} +.col-second, .col-second, .col-last, .col-constructor-name, .col-summary-item-name, .col-last { + font-size:13px; +} +.col-first, .col-second, .col-constructor-name { + vertical-align:top; + overflow: auto; +} +.col-last { + white-space:normal; +} +.col-first a:link, .col-first a:visited, +.col-second a:link, .col-second a:visited, +.col-first a:link, .col-first a:visited, +.col-second a:link, .col-second a:visited, +.col-constructor-name a:link, .col-constructor-name a:visited, +.col-summary-item-name a:link, .col-summary-item-name a:visited, +.constant-values-container a:link, .constant-values-container a:visited, +.all-classes-container a:link, .all-classes-container a:visited, +.all-packages-container a:link, .all-packages-container a:visited { + font-weight:bold; +} +.table-sub-heading-color { + background-color:#EEEEFF; +} +.even-row-color, .even-row-color .table-header { + background-color:#FFFFFF; +} +.odd-row-color, .odd-row-color .table-header { + background-color:#EEEEEF; +} +/* + * Styles for contents. + */ +.deprecated-content { + margin:0; + padding:10px 0; +} +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +.col-last div { + padding-top:0; +} +.col-last a { + padding-bottom:3px; +} +.module-signature, +.package-signature, +.type-signature, +.member-signature { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + margin:14px 0; + white-space: pre-wrap; +} +.module-signature, +.package-signature, +.type-signature { + margin-top: 0; +} +.member-signature .type-parameters-long, +.member-signature .parameters, +.member-signature .exceptions { + display: inline-block; + vertical-align: top; + white-space: pre; +} +.member-signature .type-parameters { + white-space: normal; +} +/* + * Styles for formatting effect. + */ +.source-line-no { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:0 10px 5px 0; + color:#474747; +} +.deprecated-label, .descfrm-type-label, .implementation-label, .member-name-label, .member-name-link, +.module-label-in-package, .module-label-in-type, .override-specify-label, .package-label-in-type, +.package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link, .preview-label { + font-weight:bold; +} +.deprecation-comment, .help-footnote, .preview-comment { + font-style:italic; +} +.deprecation-block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +.preview-block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecation-comment { + font-style:normal; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:#4D7A97; + color:#FFFFFF; +} +.result-item { + font-size:13px; +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:scroll; + overflow-x:scroll; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:999999; +} +ul.ui-autocomplete li { + float:left; + clear:both; + width:100%; +} +.result-highlight { + font-weight:bold; +} +#search-input { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + padding-left:20px; + position:relative; + right:-18px; + width:400px; +} +#reset-button { + background-color: rgb(255,255,255); + background-image:url('resources/x.png'); + background-position:center; + background-repeat:no-repeat; + background-size:12px; + border:0 none; + width:16px; + height:16px; + position:relative; + left:-4px; + top:-4px; + font-size:0px; +} +.watermark { + color:#545454; +} +.search-tag-desc-result { + font-style:italic; + font-size:11px; +} +.search-tag-holder-result { + font-style:italic; + font-size:12px; +} +.search-tag-result:target { + background-color:yellow; +} +.module-graph span { + display:none; + position:absolute; +} +.module-graph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.inherited-list { + margin: 10px 0 10px 0; +} +section.class-description { + line-height: 1.4; +} +.summary section[class$="-summary"], .details section[class$="-details"], +.class-uses .detail, .serialized-class-details { + padding: 0px 20px 5px 10px; + border: 1px solid #ededed; + background-color: #f8f8f8; +} +.inherited-list, section[class$="-details"] .detail { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +.vertical-separator { + padding: 0 5px; +} +ul.help-section-list { + margin: 0; +} +ul.help-subtoc > li { + display: inline-block; + padding-right: 5px; + font-size: smaller; +} +ul.help-subtoc > li::before { + content: "\2022" ; + padding-right:2px; +} +span.help-note { + font-style: italic; +} +/* + * Indicator icon for external links. + */ +main a[href*="://"]::after { + content:""; + display:inline-block; + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); + background-size:100% 100%; + width:7px; + height:7px; + margin-left:2px; + margin-bottom:4px; +} +main a[href*="://"]:hover::after, +main a[href*="://"]:focus::after { + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); +} + +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid black; +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid black; +} +table.striped { + border-collapse: collapse; + border: 1px solid black; +} +table.striped > thead { + background-color: #E3E3E3; +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid black; +} +table.striped > tbody > tr:nth-child(even) { + background-color: #EEE +} +table.striped > tbody > tr:nth-child(odd) { + background-color: #FFF +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid black; + border-right: 1px solid black; +} +table.striped > tbody > tr > th { + font-weight: normal; +} +/** + * Tweak font sizes and paddings for small screens. + */ +@media screen and (max-width: 1050px) { + #search-input { + width: 300px; + } +} +@media screen and (max-width: 800px) { + #search-input { + width: 200px; + } + .top-nav, + .bottom-nav { + font-size: 11px; + padding-top: 6px; + } + .sub-nav { + font-size: 11px; + } + .about-language { + padding-right: 16px; + } + ul.nav-list li, + .sub-nav .nav-list-search { + padding: 6px; + } + ul.sub-nav-list li { + padding-top: 5px; + } + main { + padding: 10px; + } + .summary section[class$="-summary"], .details section[class$="-details"], + .class-uses .detail, .serialized-class-details { + padding: 0 8px 5px 8px; + } + body { + -webkit-text-size-adjust: none; + } +} +@media screen and (max-width: 500px) { + #search-input { + width: 150px; + } + .top-nav, + .bottom-nav { + font-size: 10px; + } + .sub-nav { + font-size: 10px; + } + .about-language { + font-size: 10px; + padding-right: 12px; + } +} diff --git a/tictactoe/jdoc/tag-search-index.js b/tictactoe/jdoc/tag-search-index.js new file mode 100644 index 00000000..0367dae6 --- /dev/null +++ b/tictactoe/jdoc/tag-search-index.js @@ -0,0 +1 @@ +tagSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/tictactoe/jdoc/type-search-index.js b/tictactoe/jdoc/type-search-index.js new file mode 100644 index 00000000..ec9af355 --- /dev/null +++ b/tictactoe/jdoc/type-search-index.js @@ -0,0 +1 @@ +typeSearchIndex = [{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"view","l":"RowGameStatusView.GameStatus"},{"p":"model","l":"RowGameModel.Player"},{"p":"model","l":"RowBlockModel.PlayerPiece"},{"p":"model","l":"RowBlockModel"},{"p":"","l":"RowGameApp"},{"p":"view","l":"RowGameBoardView"},{"p":"controller","l":"RowGameController"},{"p":"view","l":"RowGameGUI"},{"p":"model","l":"RowGameModel"},{"p":"view","l":"RowGameStatusView"}];updateSearchResults(); \ No newline at end of file diff --git a/tictactoe/jdoc/view/RowGameBoardView.html b/tictactoe/jdoc/view/RowGameBoardView.html new file mode 100644 index 00000000..68988abb --- /dev/null +++ b/tictactoe/jdoc/view/RowGameBoardView.html @@ -0,0 +1,192 @@ + + + + +RowGameBoardView (CS520 - Homework 1) + + + + + + + + + + + + + + + +
      + +
      +
      + +
      +
      Package view
      +

      Class RowGameBoardView

      +
      +
      java.lang.Object +
      view.RowGameBoardView
      +
      +
      +
      +
      public class RowGameBoardView +extends Object
      +
      +
      + +
      +
      +
        + +
      • +
        +

        Field Details

        +
          +
        • +
          +

          blocks

          +
          public JButton[][] blocks
          +
          +
        • +
        +
        +
      • + +
      • +
        +

        Constructor Details

        +
          +
        • +
          +

          RowGameBoardView

          +
          public RowGameBoardView()
          +
          +
        • +
        +
        +
      • + +
      • +
        +

        Method Details

        +
          +
        • +
          +

          update

          +
          public void update(RowGameModel gameModel, + int row, + int column)
          +
          +
        • +
        +
        +
      • +
      +
      + +
      +
      +
      + + diff --git a/tictactoe/jdoc/view/RowGameGUI.html b/tictactoe/jdoc/view/RowGameGUI.html new file mode 100644 index 00000000..fde8fa49 --- /dev/null +++ b/tictactoe/jdoc/view/RowGameGUI.html @@ -0,0 +1,276 @@ + + + + +RowGameGUI (CS520 - Homework 1) + + + + + + + + + + + + + + + +
      + +
      +
      + +
      +
      Package view
      +

      Class RowGameGUI

      +
      +
      java.lang.Object +
      view.RowGameGUI
      +
      +
      +
      +
      public class RowGameGUI +extends Object
      +
      +
      + +
      +
      +
        + +
      • +
        +

        Field Details

        + +
        +
      • + +
      • +
        +

        Constructor Details

        +
          +
        • +
          +

          RowGameGUI

          +
          public RowGameGUI(RowGameController controller)
          +
          Creates a new game initializing the GUI.
          +
          +
        • +
        +
        +
      • + +
      • +
        +

        Method Details

        +
          +
        • +
          +

          updateBlock

          +
          public void updateBlock(RowGameModel gameModel, + int row, + int column)
          +
          Updates the block at the given row and column + after one of the player's moves.
          +
          +
          Parameters:
          +
          gameModel - The RowGameModel containing the block
          +
          row - The row that contains the block
          +
          column - The column that contains the block
          +
          +
          +
        • +
        • +
          +

          getBlocks

          +
          public JButton[][] getBlocks()
          +
          Gets the block
          +
          +
          Returns:
          +
          block
          +
          +
          +
        • +
        • +
          +

          updateStatus

          +
          public void updateStatus(RowGameStatusView.GameStatus status)
          +
          +
        • +
        • +
          +

          disableButtons

          +
          public void disableButtons()
          +
          +
        • +
        +
        +
      • +
      +
      + +
      +
      +
      + + diff --git a/tictactoe/jdoc/view/RowGameStatusView.GameStatus.html b/tictactoe/jdoc/view/RowGameStatusView.GameStatus.html new file mode 100644 index 00000000..cde15c92 --- /dev/null +++ b/tictactoe/jdoc/view/RowGameStatusView.GameStatus.html @@ -0,0 +1,283 @@ + + + + +RowGameStatusView.GameStatus (CS520 - Homework 1) + + + + + + + + + + + + + + + +
      + +
      +
      + +
      +
      Package view
      +

      Enum Class RowGameStatusView.GameStatus

      +
      +
      java.lang.Object +
      java.lang.Enum<RowGameStatusView.GameStatus> +
      view.RowGameStatusView.GameStatus
      +
      +
      +
      +
      +
      All Implemented Interfaces:
      +
      Serializable, Comparable<RowGameStatusView.GameStatus>, Constable
      +
      +
      +
      Enclosing class:
      +
      RowGameStatusView
      +
      +
      +
      public static enum RowGameStatusView.GameStatus +extends Enum<RowGameStatusView.GameStatus>
      +
      +
      + +
      +
      +
        + +
      • +
        +

        Enum Constant Details

        + +
        +
      • + +
      • +
        +

        Constructor Details

        +
          +
        • +
          +

          GameStatus

          +
          private GameStatus()
          +
          +
        • +
        +
        +
      • + +
      • +
        +

        Method Details

        +
          +
        • +
          +

          values

          +
          public static RowGameStatusView.GameStatus[] values()
          +
          Returns an array containing the constants of this enum class, in +the order they are declared.
          +
          +
          Returns:
          +
          an array containing the constants of this enum class, in the order they are declared
          +
          +
          +
        • +
        • +
          +

          valueOf

          +
          public static RowGameStatusView.GameStatus valueOf(String name)
          +
          Returns the enum constant of this class with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this class. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum class has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
          +
        • +
        +
        +
      • +
      +
      + +
      +
      +
      + + diff --git a/tictactoe/jdoc/view/RowGameStatusView.html b/tictactoe/jdoc/view/RowGameStatusView.html new file mode 100644 index 00000000..efee283a --- /dev/null +++ b/tictactoe/jdoc/view/RowGameStatusView.html @@ -0,0 +1,204 @@ + + + + +RowGameStatusView (CS520 - Homework 1) + + + + + + + + + + + + + + + +
      + +
      +
      + +
      +
      Package view
      +

      Class RowGameStatusView

      +
      +
      java.lang.Object +
      view.RowGameStatusView
      +
      +
      +
      +
      public class RowGameStatusView +extends Object
      +
      Type safety using enums
      +
      +
      + +
      +
      +
        + +
      • +
        +

        Field Details

        +
          +
        • +
          +

          playerturn

          +
          public JTextArea playerturn
          +
          +
        • +
        +
        +
      • + +
      • +
        +

        Constructor Details

        +
          +
        • +
          +

          RowGameStatusView

          +
          public RowGameStatusView()
          +
          +
        • +
        +
        +
      • + +
      • +
        +

        Method Details

        + +
        +
      • +
      +
      + +
      +
      +
      + + diff --git a/tictactoe/jdoc/view/class-use/RowGameBoardView.html b/tictactoe/jdoc/view/class-use/RowGameBoardView.html new file mode 100644 index 00000000..9ef4a0b6 --- /dev/null +++ b/tictactoe/jdoc/view/class-use/RowGameBoardView.html @@ -0,0 +1,83 @@ + + + + +Uses of Class view.RowGameBoardView (CS520 - Homework 1) + + + + + + + + + + + + + + + +
      + +
      +
      +
      +

      Uses of Class
      view.RowGameBoardView

      +
      +
      Packages that use RowGameBoardView
      +
      +
      Package
      +
      Description
      + +
       
      +
      +
      + +
      +
      +
      +
      + + diff --git a/tictactoe/jdoc/view/class-use/RowGameGUI.html b/tictactoe/jdoc/view/class-use/RowGameGUI.html new file mode 100644 index 00000000..e8cb427d --- /dev/null +++ b/tictactoe/jdoc/view/class-use/RowGameGUI.html @@ -0,0 +1,83 @@ + + + + +Uses of Class view.RowGameGUI (CS520 - Homework 1) + + + + + + + + + + + + + + + +
      + +
      +
      +
      +

      Uses of Class
      view.RowGameGUI

      +
      +
      Packages that use RowGameGUI
      +
      +
      Package
      +
      Description
      + +
       
      +
      +
      + +
      +
      +
      +
      + + diff --git a/tictactoe/jdoc/view/class-use/RowGameStatusView.GameStatus.html b/tictactoe/jdoc/view/class-use/RowGameStatusView.GameStatus.html new file mode 100644 index 00000000..bdcc096e --- /dev/null +++ b/tictactoe/jdoc/view/class-use/RowGameStatusView.GameStatus.html @@ -0,0 +1,140 @@ + + + + +Uses of Enum Class view.RowGameStatusView.GameStatus (CS520 - Homework 1) + + + + + + + + + + + + + + + +
      + +
      +
      +
      +

      Uses of Enum Class
      view.RowGameStatusView.GameStatus

      +
      + +
      +
      Package
      +
      Description
      + +
       
      + +
       
      +
      +
      + +
      +
      +
      +
      + + diff --git a/tictactoe/jdoc/view/class-use/RowGameStatusView.html b/tictactoe/jdoc/view/class-use/RowGameStatusView.html new file mode 100644 index 00000000..15495a89 --- /dev/null +++ b/tictactoe/jdoc/view/class-use/RowGameStatusView.html @@ -0,0 +1,83 @@ + + + + +Uses of Class view.RowGameStatusView (CS520 - Homework 1) + + + + + + + + + + + + + + + +
      + +
      +
      +
      +

      Uses of Class
      view.RowGameStatusView

      +
      +
      Packages that use RowGameStatusView
      +
      +
      Package
      +
      Description
      + +
       
      +
      +
      + +
      +
      +
      +
      + + diff --git a/tictactoe/jdoc/view/package-summary.html b/tictactoe/jdoc/view/package-summary.html new file mode 100644 index 00000000..a74ac688 --- /dev/null +++ b/tictactoe/jdoc/view/package-summary.html @@ -0,0 +1,97 @@ + + + + +view (CS520 - Homework 1) + + + + + + + + + + + + + + + +
      + +
      +
      +
      +

      Package view

      +
      +
      +
      package view
      +
      + +
      +
      +
      +
      + + diff --git a/tictactoe/jdoc/view/package-tree.html b/tictactoe/jdoc/view/package-tree.html new file mode 100644 index 00000000..0ab4fad1 --- /dev/null +++ b/tictactoe/jdoc/view/package-tree.html @@ -0,0 +1,88 @@ + + + + +view Class Hierarchy (CS520 - Homework 1) + + + + + + + + + + + + + + + +
      + +
      +
      +
      +

      Hierarchy For Package view

      +Package Hierarchies: + +
      +
      +

      Class Hierarchy

      + +
      +
      +

      Enum Class Hierarchy

      + +
      +
      +
      +
      + + diff --git a/tictactoe/jdoc/view/package-use.html b/tictactoe/jdoc/view/package-use.html new file mode 100644 index 00000000..a3e0cf91 --- /dev/null +++ b/tictactoe/jdoc/view/package-use.html @@ -0,0 +1,112 @@ + + + + +Uses of Package view (CS520 - Homework 1) + + + + + + + + + + + + + + + +
      + +
      +
      +
      +

      Uses of Package
      view

      +
      +
      Packages that use view
      +
      +
      Package
      +
      Description
      + +
       
      + +
       
      + +
       
      +
      +
      + +
      +
      +
      +
      + + diff --git a/tictactoe/src/model/RowBlockModel.java b/tictactoe/src/model/RowBlockModel.java index b334c921..7e473376 100644 --- a/tictactoe/src/model/RowBlockModel.java +++ b/tictactoe/src/model/RowBlockModel.java @@ -8,7 +8,7 @@ public class RowBlockModel { /** - * Used enum to distinguish the pieces for each player + * Used enum to distinguish the pieces for each player for type safety */ public enum PlayerPiece { Empty(""), From ce4dd739ddfe20ba4e3a6280463235f10716fe1d Mon Sep 17 00:00:00 2001 From: yamyamyam Date: Tue, 5 Apr 2022 21:36:55 -0400 Subject: [PATCH 6/6] corrected answers.pdf --- answers.pdf | Bin 90763 -> 93855 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/answers.pdf b/answers.pdf index 0f67fa657f10de07fcb7dcabd6a13ad44aa36b27..edd1369a39793a73b44e0fe5378eb56ed014e94b 100644 GIT binary patch delta 28402 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

      GVdY#7ow?Ej9V^R=vvN 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 delta 25343 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⪻P}IGxZVgVn-->uiH0rFoQsVd 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