This commit is contained in:
GabrieleRadice
2026-04-26 17:15:47 +02:00
parent ef82b21718
commit 23c155d0b1
2 changed files with 103 additions and 93 deletions
@@ -1,93 +1,93 @@
package it.polimi.ingsw.gc14.View.TUI; //package it.polimi.ingsw.gc14.View.TUI;
import it.polimi.ingsw.gc14.Model.Game; //import it.polimi.ingsw.gc14.Model.Game;
//
public class TUI { //public class TUI {
//
// ── dati di stato ─────────────────────────────────────────── // // ── dati di stato ───────────────────────────────────────────
private BorderStyle style = BorderStyle.UNICODE; // private BorderStyle style = BorderStyle.UNICODE;
private Game model; // private Game model;
// ── punto di ingresso ─────────────────────────────────────── // // ── punto di ingresso ───────────────────────────────────────
public String render() { // public String render() {
var sb = new StringBuilder(); // var sb = new StringBuilder();
sb.append(renderHeader()); // sb.append(renderHeader());
sb.append(renderTurnOrder()); // sb.append(renderTurnOrder());
sb.append(renderOfferTrack()); // sb.append(renderOfferTrack());
sb.append(renderCardRows()); // sb.append(renderCardRows());
sb.append(renderTableaux()); // sb.append(renderTableaux());
sb.append(renderFooter()); // sb.append(renderFooter());
return sb.toString(); // return sb.toString();
} // }
//
// ── sezioni ───────────────────────────────────────────────── // // ── sezioni ─────────────────────────────────────────────────
private String renderTurnOrder() { // private String renderTurnOrder() {
var table = new AsciiTable(style, 4, 10); // 4 colonne, largh 10 // var table = new AsciiTable(style, 4, 10); // 4 colonne, largh 10
table.addRow(model.getPlayers().stream() // table.addRow(model.getPlayers().stream()
.map(p -> + ". " + p.getUserName()) // .map(p -> + ". " + p.getUserName())
.toList()); // .toList());
table.addRow(state.getPlayers().stream() // table.addRow(state.getPlayers().stream()
.map(p -> p.getTotemPosition() != null // .map(p -> p.getTotemPosition() != null
? "totem: " + p.getTotemPosition() // ? "totem: " + p.getTotemPosition()
: "(da piaz)") // : "(da piaz)")
.toList()); // .toList());
return " TURN ORDER\n" + table.build() + "\n"; // return " TURN ORDER\n" + table.build() + "\n";
} // }
//
private String renderOfferTrack() { // private String renderOfferTrack() {
var table = new AsciiTable(style, 5, 14); // var table = new AsciiTable(style, 5, 14);
table.addRow(state.getOfferTiles().stream() // table.addRow(state.getOfferTiles().stream()
.map(t -> t.getId() + ": " + t.getLabel()).toList()); // .map(t -> t.getId() + ": " + t.getLabel()).toList());
table.addRow(state.getOfferTiles().stream() // table.addRow(state.getOfferTiles().stream()
.map(OfferTile::getRowsLabel).toList()); // .map(OfferTile::getRowsLabel).toList());
table.addRow(state.getOfferTiles().stream() // table.addRow(state.getOfferTiles().stream()
.map(t -> state.getTotemOnTile(t.getId())).toList()); // .map(t -> state.getTotemOnTile(t.getId())).toList());
return " OFFER TRACK\n" + table.build() + "\n"; // return " OFFER TRACK\n" + table.build() + "\n";
} // }
//
private String renderCardRows() { // private String renderCardRows() {
int cols = state.getTopRow().size(); // int cols = state.getTopRow().size();
var table = new AsciiTable(style, cols, 13); // var table = new AsciiTable(style, cols, 13);
table.addRow(state.getTopRow().stream() // table.addRow(state.getTopRow().stream()
.map(c -> "[" + c.getTypeLabel() + "]").toList()); // .map(c -> "[" + c.getTypeLabel() + "]").toList());
table.addRow(state.getTopRow().stream() // table.addRow(state.getTopRow().stream()
.map(Card::getName).toList()); // .map(Card::getName).toList());
table.addSeparator(); // table.addSeparator();
table.addRow(state.getBotRow().stream() // table.addRow(state.getBotRow().stream()
.map(c -> "[" + c.getTypeLabel() + "]").toList()); // .map(c -> "[" + c.getTypeLabel() + "]").toList());
table.addRow(state.getBotRow().stream() // table.addRow(state.getBotRow().stream()
.map(Card::getName).toList()); // .map(Card::getName).toList());
return " CARTE IN GIOCO\n" + prefix("TOP ", "BOT ", table.build()) + "\n"; // return " CARTE IN GIOCO\n" + prefix("TOP ", "BOT ", table.build()) + "\n";
} // }
//
private String renderTableaux() { // private String renderTableaux() {
var sb = new StringBuilder(" TABLEAU GIOCATORI\n\n"); // var sb = new StringBuilder(" TABLEAU GIOCATORI\n\n");
for (Player p : state.getPlayers()) { // for (Player p : state.getPlayers()) {
String marker = p.isActive() ? ">>>" : " "; // String marker = p.isActive() ? ">>>" : " ";
sb.append(String.format(" %s %s%s Food:%d PP:%d%n", // sb.append(String.format(" %s %s%s Food:%d PP:%d%n",
marker, p.getName(), // marker, p.getName(),
p.isActive() ? " [TUO TURNO]" : "", // p.isActive() ? " [TUO TURNO]" : "",
p.getFood(), p.getPP())); // p.getFood(), p.getPP()));
sb.append(renderPlayerTableau(p)); // sb.append(renderPlayerTableau(p));
sb.append("\n"); // sb.append("\n");
} // }
return sb.toString(); // return sb.toString();
} // }
//
private String renderPlayerTableau(Player p) { // private String renderPlayerTableau(Player p) {
var table = new AsciiTable(style, 3, 14); // var table = new AsciiTable(style, 3, 14);
table.addHeader("PERSONAGGI", "EDIFICI", "RISORSE"); // table.addHeader("PERSONAGGI", "EDIFICI", "RISORSE");
int rows = Math.max(p.getChars().size(), // int rows = Math.max(p.getChars().size(),
Math.max(p.getBuildings().size(), 3)); // Math.max(p.getBuildings().size(), 3));
for (int i = 0; i < rows; i++) { // for (int i = 0; i < rows; i++) {
String ch = i < p.getChars().size() ? p.getChars().get(i) : ""; // String ch = i < p.getChars().size() ? p.getChars().get(i) : "";
String bd = i < p.getBuildings().size() ? p.getBuildings().get(i) : ""; // String bd = i < p.getBuildings().size() ? p.getBuildings().get(i) : "";
String rs = switch (i) { // String rs = switch (i) {
case 0 -> "Food: " + "O".repeat(p.getFood()); // case 0 -> "Food: " + "O".repeat(p.getFood());
case 1 -> "PP: " + p.getPP(); // case 1 -> "PP: " + p.getPP();
case 2 -> "Chars:" + p.getChars().size() + " Edif:" + p.getBuildings().size(); // case 2 -> "Chars:" + p.getChars().size() + " Edif:" + p.getBuildings().size();
default -> ""; // default -> "";
}; // };
table.addRow(ch, bd, rs); // table.addRow(ch, bd, rs);
} // }
return " " + table.build().replace("\n", "\n "); // return " " + table.build().replace("\n", "\n ");
} // }
} //}
@@ -1,5 +1,6 @@
package it.polimi.ingsw.gc14.Model; package it.polimi.ingsw.gc14.Model;
import it.polimi.ingsw.gc14.Model.Cards.Building.Effects.Building1;
import it.polimi.ingsw.gc14.Model.Cards.BuildingCard; import it.polimi.ingsw.gc14.Model.Cards.BuildingCard;
import it.polimi.ingsw.gc14.Model.Cards.TribeCards.CharacterType; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.CharacterType;
import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters.*; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters.*;
@@ -206,8 +207,17 @@ class PlayerTest {
p.artists.add(new Artist(1)); p.artists.add(new Artist(1));
p.artists.add(new Artist(1)); p.artists.add(new Artist(1));
p.artists.add(new Artist(2)); p.artists.add(new Artist(2));
p.builders.add(new Builder(2, 5, 1));
p.gatherers.add(new Gatherer(1, 3));
p.shamans.add(new Shaman(2, 3, 3));
p.shamans.add(new Shaman(2, 3, 4));
p.inventors.add(new Inventor(3, 1));
p.hunters.add(new Hunter(3, true));
p.hunters.add(new Hunter(2, false));
p.buildingCards.add(new BuildingCard(2, 1,2, 5)); p.buildingCards.add(new BuildingCard(2, 1,2, 5));
p.buildingCards.add(new BuildingCard(2, 2,3, 6)); p.buildingCards.add(new BuildingCard(2, 2,3, 6));
p.buildingCards.add(new Building1(2, 5, 5, CharacterType.INVENTOR));
System.out.println(p.toString()); System.out.println(p.toString());
} }
} }