paolo-chiappini / proj-ingsw-heroscimmie

Apache License 2.0
2 stars 0 forks source link

Libreria grafica per CLI #17

Closed paolo-chiappini closed 1 year ago

paolo-chiappini commented 1 year ago

Ciao a tutti, questa è la libreria per la grafica... in breve:

Probabilmente molte cose sono un po' overkill, quindi nel caso si possono tagliare prima del merge. Un'altra cosa... nell'implementazione ho fatto alcune scelte su cui vorrei delle opinioni:

Esempio di uso:

ICliRenderer colorRenderer = new SimpleColorRenderer();

CliGraphicsManager.setPlayers(new String[]{"Player1", "Player2", "Player3"}, new int[]{0, 12, 2}, 1);

CliGraphicsManager.setCommonGoalId(0, 1, 8);
CliGraphicsManager.setCommonGoalId(1, 2, 4);
CliGraphicsManager.setPersonalGoalId(1);

CliGraphicsManager.notifyNewChatMessage("Message 1", "Player1");
CliGraphicsManager.notifyNewChatMessage("Message 2", "Player3");
CliGraphicsManager.notifyNewChatWhisper("Whisper 3", "Player1");
CliGraphicsManager.notifyNewChatMessage("Message 4", "Player2");

CliGraphicsManager.draw(colorRenderer);

CliGraphicsManager.notifyMainBookshelfChange(new int[][]{
                {-1, -1, -1, -1, -1},
                {-1, -1, -1, -1, -1},
                {-1,  0, -1, -1, -1},
                { 0,  2,  4, -1, -1},
                { 1,  5,  5,  1,  2},
                { 3,  3,  4,  1,  0}
        });
CliGraphicsManager.notifyNextTurn();
CliGraphicsManager.draw(colorRenderer);
paolo-chiappini commented 1 year ago

Ciao a tutti! Ho fatto degli aggiornamenti alla grafica della CLI, quindi ve li propongo direttamente in questa pull senza aprirne un'altra... I cambiamenti principali sono:

Nel caso si volesse fare qualcosa di diverso per la fine della partita, posso pensare ad una "schermata" di vittoria, nel caso abbiate altre idee, fatemi sapere.

Di seguito vi lascio un esempio di uso della view: (i dati rappresentati come variabili deriveranno dal virtual model o dai JSON che arrivano al controller)

DefaultCliGraphics cliView = new DefaultCliGraphics();

// add players
for (int i = 0; i < players.length; i++) {
    boolean isClient = (players[i].equals(clientUsername));
    cliView.addPlayer(players[i], scores[i], isClient);
    cliView.updateBookshelf(players[i], bookshelves[i]);
}

cliView.updateBoard(board);
cliView.updatePlayerConnectionStatus(players[1], isPlayer2Disconnected);
cliView.updatePlayerScore(players[0], player0Score);
cliView.updateCommonGoalPoints(commonGoal2Id, commonGoal2Points);
cliView.updateGameStatus(isGameOver); 

cliView.setCommonGoal(commonGoal1Id, commonGoal1Points);
cliView.setCommonGoal(commonGoal2Id, commonGoal2Points);
cliView.setPersonalGoal(personalGoalId);
cliView.setCurrentTurn(currentTurn);

cliView.addMessage(
        newChatMessage,
        chatMessageSender,
        chatMessageRecipient.equals(clientUsername) // verify if it's a whisper
); 

System.out.println(cliView.getGraphics().render(new SimpleColorRenderer()));