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 @@ + + +
1
many

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

+getXFrom() : : int

+getXFrom() : : int

+getXFrom() : : int

+toString() : : String

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

+onBoardUpdated() : : void

+refresh() : : void

-boardGrid() : : Tower[][]

-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

-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) : : void

PieceLayer

+PieceLayer()

+displayGrid(Tower[][] grid, int xBase, int yBase, int spacing, int size, java.util.function.BiConsumer clickCallback) : : void

InteractionController

-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) : : 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)

#paintComponent(Graphics g) : : void

+contains(int x, int y) : : boolean

Avalam - 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) : : List

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

IdiotBot

-rng: Random

+IdiotBot(Player p)

+giveYourMove(IBoard board) : : AbstractPly

Bot - 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() : : Player

IBoard

+getCurrentPlayer() : : Player

+isGameOver() : : boolean

+getResult() : : Result

+isLegal(AbstractPly c) : : boolean

+iterator() : : Iterator

+doPly(AbstractPly c) : : void

+undoPly() : : void

+safeCopy() : : IBoard

«enumerate»

Player

PLAYER1

PLAYER2

«enumerate»

Result

WIN

DRAW

LOSS

GameAPI - 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