diff --git a/Diagrammes/Diagramme - Avalam.svg b/Diagrammes/Diagramme - Avalam.svg new file mode 100644 index 0000000..67682d0 --- /dev/null +++ b/Diagrammes/Diagramme - Avalam.svg @@ -0,0 +1,3 @@ + + +1manyArenaGame+ArenaGame(IBoard board, AbstractGamePlayer bot1, AbstractGamePlayer bot2)-createPlayerMap(AbstractGamePlayer bot1, AbstractGamePlayer bot2) : : EnumMapArenaWindow-resultsTable: JTable-tableModel: DefaultTableModel-results: List+ArenaWindows()-createConfigPanel() : : JPanel-createResultsTable()-showConfigDialog()-runArena(String bot1Type, String bot2Type, int depth, int nbParties)-createBot(String botType, Player player, int depth) : : AbstractGamePlayer-getWinnerName(Result result, String bot1Type, String bot2Type) : : StringAvalamBoard+SIZE: int-MAX_HEIGHT: int-grid: Tower[][]-gameOver: boolean-result: Result+AvalamBoard(Tower[][] initialGrid, Player startingPlayer)+AvalamBoard(Tower[][] initialGrid)-AvalamBoard(Tower[][] grid, Player current, boolean gameOver, Result result)+getTowerAt(int row, int col) : : Tower-inBounds(int r, int c) : : boolean-areAdjacent(int r1, int c1, int r2, int c2) : : boolean-colorForPlayer(Player p) : : Color+isGameOver() : : boolean+getResult() : : Result+isLegal(AbstractPly c) : : boolean+doPly(AbstractPly c) : : void+iterator() : : Iterator+safeCopy() : : IBoardTower-height: byte-color: Color+Tower(int height, Color color)+createTower(Color color) : : Tower+getHeight() : : int+getColor() : : Color+mergeTower(Tower src) : : void+toString() : : StringAvalamPly-xFrom : int-yFrom : int-xTo : int-yTo : int+AvalamPly(Player player, int xFrom, int yFrom, int xTo, int yTo)+getXFrom() : : int+getXFrom() : : int+getXFrom() : : int+getXFrom() : : int+toString() : : StringAvalamWindow-board : AvalamBoard-scoreView : ScoreView-turnView : TurnView-boardView : BoardView-mode: GameMode-botPlayer: Player-idiotBot: IdiotBot-alphaBot: AlphaBetaBot-divineBot: Object-botAnimating: boolean+AvalamWindow()+AvalamWindow(GameMode mode)+AvalamWindow(GameMode mode, int alphaDepth)+onBoardUpdated() : : void-maybePlayBotTurn() : : void-computeScore(Color c) : : int-turnMessage() : : StringBoardView-board: AvalamBoard-backgroundLayer: BackgroundLayer-highlightLayer: HighlightLayer-pieceLayer: PieceLayer-controller: InteractionController-size: int-spacing: int-xBase: int-yBase: int-boardUpdateCallback: Runnable+BoardView(AvalamBoard board, Runnable boardUpdateCallback)+getController() : : InteractionController+setInteractionEnabled(boolean enabled) : : void+onBoardUpdated() : : void+refresh() : : void-boardGrid() : : Tower[][]-boardGrid() : : Tower[][]ScoreView-scoreY: JLabel-scoreR: JLabel+ScoreView(int y, int r)+updateScores(int y, int r) : : voidTurnView-text: JLabel+TurnView(String initial)+setTurn(String s) : : voidEndGameDialog+EndGameDialog(JFrame parent, Result result, int scoreJaune, int scoreRouge, GameMode mode, int depth, Runnable onReplay, Runnable onMenu, Runnable onQuit)-modeToString(GameMode mode, int depth) : : StringGameModePVPPVBOTPVALPHAPVGODARENABackgroundLayer-img: Image+BackgroundLayer(String resourcePath)#paintComponent(Graphics g) : : voidBoardLoader+loadFromFile(String resourcePath) : : Tower[][]HighlightLayer-xBase: int-yBase: int-spacing: int-size: int-legalMoves: List+HighlightLayer(int xBase, int yBase, int spacing, int size)+setLegalMoves(List moves) : : void#paintComponent(Graphics g) : : voidPieceLayer+PieceLayer()+displayGrid(Tower[][] grid, int xBase, int yBase, int spacing, int size, java.util.function.BiConsumer clickCallback) : : voidInteractionController-board: AvalamBoard-selectedRow: int-selectedCol: int-legalMoves: List-view: BoardView+InteractionController(AvalamBoard board, BoardView view)+onPieceClicked(int r, int c) : : void+selectTower(int r, int c) : : void-clearSelection() : : void-computeLegalMoves() : : void-tryMove(int r, int c) : : voidColor-swingColor: java.awt.Color-YELLOW(int r, int g, int b)-RED(int r, int g, int b)+Color(int r, int g, int b)+getSwingColor() : : java.awt.Color+toPlayer() : : fr.iut_fbleau.GameAPI.PlayerMain+main(String[] args) : : voidPieceButton-color: java.awt.Color-height: int-hover: boolean+row: int+col: int+PieceButton(java.awt.Color c, int height, int row, int col)#paintComponent(Graphics g) : : void+contains(int x, int y) : : booleanAvalam - Diagramme de classes (complet) \ No newline at end of file diff --git a/Diagrammes/Diagramme - Bot.svg b/Diagrammes/Diagramme - Bot.svg new file mode 100644 index 0000000..6e8f685 --- /dev/null +++ b/Diagrammes/Diagramme - Bot.svg @@ -0,0 +1,3 @@ + + +AlphaBetaBot-me: Player-maxDepth: int-rng: Random+AlphaBetaBot(Player p, int maxDepth)+giveYourMove(IBoard board) : : AbstractPly-alphaBeta(IBoard board, int depth, int alpha, int beta) : : int-terminalValue(IBoard board) : : int-evaluate(IBoard board) : : int-listMoves(IBoard board) : : ListDivineBot-me: Player-maxDepth: int-rng: Random+DivineBot(Player p, int maxDepth)+giveYourMove(IBoard board) : : AbstractPly-alphaBeta(IBoard board, int depth, int alpha, int beta) : : int-terminalValue(IBoard board) : : int-evaluate(IBoard board) : : int-listMoves(IBoard board) : : ListIdiotBot-rng: Random+IdiotBot(Player p)+giveYourMove(IBoard board) : : AbstractPlyBot - Diagramme de classes (complet) \ No newline at end of file diff --git a/Diagrammes/Diagramme - GameAPI.svg b/Diagrammes/Diagramme - GameAPI.svg new file mode 100644 index 0000000..cbba433 --- /dev/null +++ b/Diagrammes/Diagramme - GameAPI.svg @@ -0,0 +1,3 @@ + + +«abstract»AbstractBoard-currentPlayer: Player-history: Deque+AbstractBoard(Player p, Deque h)#setNextPlayer() : : void#addPlyToHistory(AbstractPly c) : : void#removePlyFromHistory() : : AbstractPly#getLastPlyFromHistory() : : AbstractPly+getCurrentPlayer()+isGameOver() : : boolean+getResult() : : Result+isLegal(AbstractPly c) : : boolean+iterator() : : Iterator+doPly(AbstractPly c) : : void+undoPly() : : void+safeCopy() : : IBoard«abstract»AbstractGame-currentBoard: IBoard-mapPlayers: EnumMap+AbstractGame(IBoard b, EnumMap m)+run() : : Result«abstract»AbstractGamePlayer-iAm: Player+AbstractGamePlayer(Player p)+giveYourMove(IBoard p) : : AbstractPly«abstract»AbstractPly-joueur: Player+AbstractPly(Player j)+getPlayer() : : PlayerIBoard+getCurrentPlayer() : : Player+isGameOver() : : boolean+getResult() : : Result+isLegal(AbstractPly c) : : boolean+iterator() : : Iterator+doPly(AbstractPly c) : : void+undoPly() : : void+safeCopy() : : IBoard«enumerate»PlayerPLAYER1PLAYER2«enumerate»ResultWINDRAWLOSSGameAPI - Diagramme de classes (complet) \ No newline at end of file diff --git a/Diagrammes/Diagramme_Avalam.mmd b/Diagrammes/Diagramme_Avalam.mmd index d6e08ea..0b37776 100644 --- a/Diagrammes/Diagramme_Avalam.mmd +++ b/Diagrammes/Diagramme_Avalam.mmd @@ -3,6 +3,28 @@ title: Avalam - Diagramme de classes (complet) --- classDiagram + class ArenaGame{ + +ArenaGame(IBoard board, AbstractGamePlayer bot1, AbstractGamePlayer bot2) + -createPlayerMap(AbstractGamePlayer bot1, AbstractGamePlayer bot2): EnumMap + } + + class ArenaWindow{ + -resultsTable: JTable + -tableModel: DefaultTableModel + -results: List + + +ArenaWindows() + -createConfigPanel(): JPanel + -createResultsTable() + -showConfigDialog() + -runArena(String bot1Type, String bot2Type, int depth, int nbParties) + -createBot(String botType, Player player, int depth): AbstractGamePlayer + -getWinnerName(Result result, String bot1Type, String bot2Type): String + } + + ArenaWindow *-- AvalamBoard + ArenaWindow *-- ArenaGame + class AvalamBoard{ +SIZE: int -MAX_HEIGHT: int @@ -42,8 +64,6 @@ classDiagram +toString(): String } - - class AvalamWindow{ -board : AvalamBoard @@ -70,13 +90,18 @@ classDiagram AvalamWindow *-- BoardView AvalamWindow *-- ScoreView AvalamWindow *-- TurnView + AvalamWindow *-- EndGameDialog AvalamWindow --> GameMode + class BackgroundLayer{ + -img: Image + +BackgroundLayer(String resourcePath) + #paintComponent(Graphics g): void + } + class BoardLoader{ +loadFromFile(String resourcePath): Tower[][] } - - class BoardView{ -board: AvalamBoard @@ -105,14 +130,6 @@ classDiagram BoardView *-- InteractionController BoardView --> AvalamBoard - class BackgroundLayer{ - -img: Image - +BackgroundLayer(String resourcePath) - #paintComponent(Graphics g): void - } - - - class Color{ -YELLOW(int r, int g, int b) -RED(int r, int g, int b) @@ -122,11 +139,17 @@ classDiagram +toPlayer(): fr.iut_fbleau.GameAPI.Player } + class EndGameDialog{ + +EndGameDialog(JFrame parent, Result result, int scoreJaune, int scoreRouge, GameMode mode, int depth, Runnable onReplay, Runnable onMenu, Runnable onQuit) + -modeToString(GameMode mode, int depth): String + } + class GameMode{ PVP PVBOT PVALPHA - PVGOD + PVGOD + ARENA } class HighlightLayer{ @@ -165,6 +188,7 @@ classDiagram Main ..> AvalamWindow Main ..> GameMode + Main ..> ArenaWindow class PieceButton{ -color: java.awt.Color diff --git a/Diagrammes/Diagramme_Bot.mmd b/Diagrammes/Diagramme_Bot.mmd index c142a5f..23c321e 100644 --- a/Diagrammes/Diagramme_Bot.mmd +++ b/Diagrammes/Diagramme_Bot.mmd @@ -17,7 +17,16 @@ classDiagram } class DivineBot{ + -me: Player + -maxDepth: int + -rng: Random + +DivineBot(Player p, int maxDepth) + +giveYourMove(IBoard board): AbstractPly + -alphaBeta(IBoard board, int depth, int alpha, int beta): int + -terminalValue(IBoard board): int + -evaluate(IBoard board): int + -listMoves(IBoard board): List } class IdiotBot{ diff --git a/Diagrammes/Diagramme_GameAPI b/Diagrammes/Diagramme_GameAPI.mmd similarity index 100% rename from Diagrammes/Diagramme_GameAPI rename to Diagrammes/Diagramme_GameAPI.mmd
ArenaGame
+ArenaGame(IBoard board, AbstractGamePlayer bot1, AbstractGamePlayer bot2)
-createPlayerMap(AbstractGamePlayer bot1, AbstractGamePlayer bot2) : : EnumMap
ArenaWindow
-resultsTable: JTable
-tableModel: DefaultTableModel
-results: List
+ArenaWindows()
-createConfigPanel() : : JPanel
-createResultsTable()
-showConfigDialog()
-runArena(String bot1Type, String bot2Type, int depth, int nbParties)
-createBot(String botType, Player player, int depth) : : AbstractGamePlayer
-getWinnerName(Result result, String bot1Type, String bot2Type) : : String
AvalamBoard
+SIZE: int
-MAX_HEIGHT: int
-grid: Tower[][]
-gameOver: boolean
-result: Result
+AvalamBoard(Tower[][] initialGrid, Player startingPlayer)
+AvalamBoard(Tower[][] initialGrid)
-AvalamBoard(Tower[][] grid, Player current, boolean gameOver, Result result)
+getTowerAt(int row, int col) : : Tower
-inBounds(int r, int c) : : boolean
-areAdjacent(int r1, int c1, int r2, int c2) : : boolean
-colorForPlayer(Player p) : : Color
+isGameOver() : : boolean
+getResult() : : Result
+isLegal(AbstractPly c) : : boolean
+doPly(AbstractPly c) : : void
+iterator() : : Iterator
+safeCopy() : : IBoard
Tower
-height: byte
-color: Color
+Tower(int height, Color color)
+createTower(Color color) : : Tower
+getHeight() : : int
+getColor() : : Color
+mergeTower(Tower src) : : void
+toString() : : String
AvalamPly
-xFrom : int
-yFrom : int
-xTo : int
-yTo : int
+AvalamPly(Player player, int xFrom, int yFrom, int xTo, int yTo)
+getXFrom() : : int
AvalamWindow
-board : AvalamBoard
-scoreView : ScoreView
-turnView : TurnView
-boardView : BoardView
-mode: GameMode
-botPlayer: Player
-idiotBot: IdiotBot
-alphaBot: AlphaBetaBot
-divineBot: Object
-botAnimating: boolean
+AvalamWindow()
+AvalamWindow(GameMode mode)
+AvalamWindow(GameMode mode, int alphaDepth)
+onBoardUpdated() : : void
-maybePlayBotTurn() : : void
-computeScore(Color c) : : int
-turnMessage() : : String
BoardView
-board: AvalamBoard
-backgroundLayer: BackgroundLayer
-highlightLayer: HighlightLayer
-pieceLayer: PieceLayer
-controller: InteractionController
-size: int
-spacing: int
-xBase: int
-yBase: int
-boardUpdateCallback: Runnable
+BoardView(AvalamBoard board, Runnable boardUpdateCallback)
+getController() : : InteractionController
+setInteractionEnabled(boolean enabled) : : void
+refresh() : : void
-boardGrid() : : Tower[][]
ScoreView
-scoreY: JLabel
-scoreR: JLabel
+ScoreView(int y, int r)
+updateScores(int y, int r) : : void
TurnView
-text: JLabel
+TurnView(String initial)
+setTurn(String s) : : void
EndGameDialog
+EndGameDialog(JFrame parent, Result result, int scoreJaune, int scoreRouge, GameMode mode, int depth, Runnable onReplay, Runnable onMenu, Runnable onQuit)
-modeToString(GameMode mode, int depth) : : String
GameMode
PVP
PVBOT
PVALPHA
PVGOD
ARENA
BackgroundLayer
-img: Image
+BackgroundLayer(String resourcePath)
#paintComponent(Graphics g) : : void
BoardLoader
+loadFromFile(String resourcePath) : : Tower[][]
HighlightLayer
-legalMoves: List
+HighlightLayer(int xBase, int yBase, int spacing, int size)
+setLegalMoves(List moves) : : void
PieceLayer
+PieceLayer()
+displayGrid(Tower[][] grid, int xBase, int yBase, int spacing, int size, java.util.function.BiConsumer clickCallback) : : void
InteractionController
-selectedRow: int
-selectedCol: int
-view: BoardView
+InteractionController(AvalamBoard board, BoardView view)
+onPieceClicked(int r, int c) : : void
+selectTower(int r, int c) : : void
-clearSelection() : : void
-computeLegalMoves() : : void
-tryMove(int r, int c) : : void
Color
-swingColor: java.awt.Color
-YELLOW(int r, int g, int b)
-RED(int r, int g, int b)
+Color(int r, int g, int b)
+getSwingColor() : : java.awt.Color
+toPlayer() : : fr.iut_fbleau.GameAPI.Player
Main
+main(String[] args) : : void
PieceButton
-color: java.awt.Color
-height: int
-hover: boolean
+row: int
+col: int
+PieceButton(java.awt.Color c, int height, int row, int col)
+contains(int x, int y) : : boolean
AlphaBetaBot
-me: Player
-maxDepth: int
-rng: Random
+AlphaBetaBot(Player p, int maxDepth)
+giveYourMove(IBoard board) : : AbstractPly
-alphaBeta(IBoard board, int depth, int alpha, int beta) : : int
-terminalValue(IBoard board) : : int
-evaluate(IBoard board) : : int
-listMoves(IBoard board) : : List
DivineBot
+DivineBot(Player p, int maxDepth)
IdiotBot
+IdiotBot(Player p)
«abstract»
AbstractBoard
-currentPlayer: Player
-history: Deque
+AbstractBoard(Player p, Deque h)
#setNextPlayer() : : void
#addPlyToHistory(AbstractPly c) : : void
#removePlyFromHistory() : : AbstractPly
#getLastPlyFromHistory() : : AbstractPly
+getCurrentPlayer()
+undoPly() : : void
AbstractGame
-currentBoard: IBoard
-mapPlayers: EnumMap
+AbstractGame(IBoard b, EnumMap m)
+run() : : Result
AbstractGamePlayer
-iAm: Player
+AbstractGamePlayer(Player p)
+giveYourMove(IBoard p) : : AbstractPly
AbstractPly
-joueur: Player
+AbstractPly(Player j)
+getPlayer() : : Player
IBoard
+getCurrentPlayer() : : Player
«enumerate»
Player
PLAYER1
PLAYER2
Result
WIN
DRAW
LOSS