Add:TUI.java

This commit is contained in:
rubenpirreram
2026-04-30 17:38:09 +02:00
parent 49af9c7866
commit e10413b9eb
5 changed files with 158 additions and 156 deletions
@@ -705,88 +705,85 @@ public class Game implements Serializable {
@Override
public String toString() {
var table = new AsciiTable(BorderStyle.UNICODE, slotMap.size());
List<String> stringUp=new ArrayList<>();
List<String> stringEmpty=new ArrayList<>();
List<String> stringDown=new ArrayList<>();
return PlayersStamp()+"\n"+BoardStamp()+"\n";
}
public String PlayersStamp()
{
StringBuilder stringBuilder=new StringBuilder();
for(int i=0;i<playersList.size()/2;i++)
{
stringBuilder.append(AsciiTable.sideBySide(List.of(playersList.get((i*2)).toString().split("\n")),List.of(playersList.get((i*2+1)).toString().split("\n")),2));
}
stringBuilder.append("\n");
if(playersList.size()%2!=0)
{
stringBuilder.append(playersList.get(playersList.size()-1).toString());
stringBuilder.append("\n");
}
return stringBuilder.toString();
}
public String BoardStamp()
{
var offerTrack = new AsciiTable(BorderStyle.UNICODE, slotMap.size());
List<String> stringUpOffer=new ArrayList<>();
List<String> stringDownOffer=new ArrayList<>();
for(Map.Entry<Slot,Player> entry:slotMap.entrySet())
{
stringEmpty.add(" ");
stringDown.add(entry.getKey().toStringTUI());
stringDownOffer.add(entry.getKey().toStringTUI());
if(entry.getValue()!=null)
stringUp.add(entry.getValue().getUserName());
stringUpOffer.add(entry.getValue().getUserName());
else
stringUp.add(" ");
stringUpOffer.add(" ");
}
table.addRow(stringUp);
table.addRow(stringEmpty);
table.addRow(stringDown);
List<String>lines=List.of(orderLogicCard.toString().split("\n"));
List<String> lines2=new ArrayList<>();
lines2.add("OFFER TRACK");
lines2.addAll(List.of(table.build().split("\n")));
var TribeTableUpper = new AsciiTable(BorderStyle.UNICODE,1);
var TribeTableLower = new AsciiTable(BorderStyle.UNICODE,1);
String boardToString=AsciiTable.sideBySide(lines,lines2,1);
var table2 = new AsciiTable(BorderStyle.UNICODE, Math.max(getUpperListTribeCards().size(),getLowerListTribeCards().size()));
List<String> stringUp2=new ArrayList<>();
List<String> stringDown2=new ArrayList<>();
List<String> stringUpperListTribe=new ArrayList<>();
List<String> stringLowerListTribe=new ArrayList<>();
stringUpperListTribe.add("Char/Events");
stringLowerListTribe.add("Char/Events");
for(int i=0;i<Math.max(getUpperListTribeCards().size(),getLowerListTribeCards().size());i++)
{
if(i<getUpperListTribeCards().size())
{
stringUp2.add(getUpperListTribeCards().get(i).toStringBoard());
}
else
{
stringUp2.add("");
stringUpperListTribe.add(getUpperListTribeCards().get(i).toStringBoard());
}
if(i<getLowerListTribeCards().size())
{
stringDown2.add(getLowerListTribeCards().get(i).toStringBoard());
}
else
{
stringDown2.add("");
stringLowerListTribe.add(getLowerListTribeCards().get(i).toStringBoard());
}
}
table2.addRow(stringUp2);
table2.addRow(stringDown2);
var BuildTableUpper = new AsciiTable(BorderStyle.UNICODE,1);
BuildTableUpper.addHeader("Building ");
var BuildTableLower = new AsciiTable(BorderStyle.UNICODE,1);
BuildTableLower.addHeader("Building ");
var table3 = new AsciiTable(BorderStyle.UNICODE, Math.max(getUpperListBuilding().size(),getLowerListBuilding().size()));
List<String> stringUp3=new ArrayList<>();
List<String> stringDown3=new ArrayList<>();
for(int i=0;i<Math.max(getUpperListBuilding().size(),getLowerListBuilding().size());i++)
{
if(i<getUpperListBuilding().size())
{
stringUp3.add(getUpperListBuilding().get(i).toString());
}
else
{
stringUp3.add("-");
BuildTableUpper.addRow(getUpperListBuilding().get(i).toString());
}
if(i<getLowerListBuilding().size())
{
stringDown3.add(getLowerListBuilding().get(i).toString());
}
else
{
stringDown3.add("-");
BuildTableLower.addRow(getLowerListBuilding().get(i).toString());
}
}
table3.addRow(stringUp3);
table3.addRow(stringDown3);
String PlayerToString ="";
for(Player p:playersList)
{
PlayerToString+=p.toString()+"\n";
}
return PlayerToString+"\n"+ boardToString +"UPPERList\\LOWERList\n"+table2.build() + "\nBUILDING\n"+table3.build() + "\n";
//offerTrack.addRow(stringUpperListTribe);
stringUpperListTribe.forEach(x->TribeTableUpper.addRow(x));
stringLowerListTribe.forEach(x->TribeTableLower.addRow(x));
offerTrack.addRow(stringUpOffer);
offerTrack.addRow(stringDownOffer);
//offerTrack.addRow(stringLowerListTribe);
return orderLogicCard.toString()+"\n"+ AsciiTable.sideBySide(Arrays.stream((TribeTableUpper.build().split("\n"))).toList(), Arrays.stream(BuildTableUpper.build().split("\n")).toList(),2)+"\n"+offerTrack.build()+"\n"+AsciiTable.sideBySide(List.of(TribeTableLower.build().split("\n")), Arrays.stream(BuildTableLower.build().split("\n")).toList(),2);
//return s.toString()+"\n"++"\nOFFER TRACK\n"+ table.build()+"\n" ;
}
}
@@ -5,8 +5,8 @@ import it.polimi.ingsw.gc14.Network.NetworkEvent;
public interface IView {
void render(Game model);
void showMessage(String message);
void showError(String message);
public void render(Game model);
public void showMessage(String message);
public void showError(String message);
}
@@ -15,7 +15,7 @@ public class AsciiTable {
public void addRow(String... cells) { rows.add(Arrays.asList(cells)); }
public void addRow(List<String> cells) { rows.add(cells); }
public void addHeader(String... cells) { rows.add(0, Arrays.asList(cells)); separators.add(0); }
public void addSeparator() { separators.add(rows.size()); }
public void addSeparator() { separators.add(rows.size()-1); }
public String build() {
var sb = new StringBuilder();
@@ -1,93 +1,91 @@
//package it.polimi.ingsw.gc14.View.TUI;
//import it.polimi.ingsw.gc14.Model.Game;
//
//public class TUI {
//
// // ── dati di stato ───────────────────────────────────────────
// private BorderStyle style = BorderStyle.UNICODE;
// private Game model;
// // ── punto di ingresso ───────────────────────────────────────
// public String render() {
// var sb = new StringBuilder();
// sb.append(renderHeader());
// sb.append(renderTurnOrder());
// sb.append(renderOfferTrack());
// sb.append(renderCardRows());
// sb.append(renderTableaux());
// sb.append(renderFooter());
// return sb.toString();
// }
//
// // ── sezioni ─────────────────────────────────────────────────
// private String renderTurnOrder() {
// var table = new AsciiTable(style, 4, 10); // 4 colonne, largh 10
// table.addRow(model.getPlayers().stream()
// .map(p -> + ". " + p.getUserName())
// .toList());
// table.addRow(state.getPlayers().stream()
// .map(p -> p.getTotemPosition() != null
// ? "totem: " + p.getTotemPosition()
// : "(da piaz)")
// .toList());
// return " TURN ORDER\n" + table.build() + "\n";
// }
//
// private String renderOfferTrack() {
// var table = new AsciiTable(style, 5, 14);
// table.addRow(state.getOfferTiles().stream()
// .map(t -> t.getId() + ": " + t.getLabel()).toList());
// table.addRow(state.getOfferTiles().stream()
// .map(OfferTile::getRowsLabel).toList());
// table.addRow(state.getOfferTiles().stream()
// .map(t -> state.getTotemOnTile(t.getId())).toList());
// return " OFFER TRACK\n" + table.build() + "\n";
// }
//
// private String renderCardRows() {
// int cols = state.getTopRow().size();
// var table = new AsciiTable(style, cols, 13);
// table.addRow(state.getTopRow().stream()
// .map(c -> "[" + c.getTypeLabel() + "]").toList());
// table.addRow(state.getTopRow().stream()
// .map(Card::getName).toList());
// table.addSeparator();
// table.addRow(state.getBotRow().stream()
// .map(c -> "[" + c.getTypeLabel() + "]").toList());
// table.addRow(state.getBotRow().stream()
// .map(Card::getName).toList());
// return " CARTE IN GIOCO\n" + prefix("TOP ", "BOT ", table.build()) + "\n";
// }
//
// private String renderTableaux() {
// var sb = new StringBuilder(" TABLEAU GIOCATORI\n\n");
// for (Player p : state.getPlayers()) {
// String marker = p.isActive() ? ">>>" : " ";
// sb.append(String.format(" %s %s%s Food:%d PP:%d%n",
// marker, p.getName(),
// p.isActive() ? " [TUO TURNO]" : "",
// p.getFood(), p.getPP()));
// sb.append(renderPlayerTableau(p));
// sb.append("\n");
// }
// return sb.toString();
// }
//
// private String renderPlayerTableau(Player p) {
// var table = new AsciiTable(style, 3, 14);
// table.addHeader("PERSONAGGI", "EDIFICI", "RISORSE");
// int rows = Math.max(p.getChars().size(),
// Math.max(p.getBuildings().size(), 3));
// for (int i = 0; i < rows; i++) {
// String ch = i < p.getChars().size() ? p.getChars().get(i) : "";
// String bd = i < p.getBuildings().size() ? p.getBuildings().get(i) : "";
// String rs = switch (i) {
// case 0 -> "Food: " + "O".repeat(p.getFood());
// case 1 -> "PP: " + p.getPP();
// case 2 -> "Chars:" + p.getChars().size() + " Edif:" + p.getBuildings().size();
// default -> "";
// };
// table.addRow(ch, bd, rs);
// }
// return " " + table.build().replace("\n", "\n ");
// }
//}
package it.polimi.ingsw.gc14.View.TUI;
import it.polimi.ingsw.gc14.Model.Game;
import it.polimi.ingsw.gc14.View.IView;
public class TUI implements IView {
// ── dati di stato ───────────────────────────────────────────
private BorderStyle style = BorderStyle.UNICODE;
private Game model;
public TUI(Game model) {
this.model = model;
}
// ── punto di ingresso ───────────────────────────────────────
public void render(Game model)
{
try{
String os = System.getProperty("os.name").toLowerCase();
ProcessBuilder pb;
if (os.contains("win")) {
pb = new ProcessBuilder("cmd", "/c", "cls");
} else {
pb = new ProcessBuilder("clear");
}
pb.inheritIO().start().waitFor();
}
catch(Exception e){
}
System.out.println(model.toString());
}
public void renderBoard(Game model)
{
try{
String os = System.getProperty("os.name").toLowerCase();
ProcessBuilder pb;
if (os.contains("win")) {
pb = new ProcessBuilder("cmd", "/c", "cls");
} else {
pb = new ProcessBuilder("clear");
}
pb.inheritIO().start().waitFor();
}
catch(Exception e){
}
System.out.println(model.BoardStamp());
}
public void renderPlayer(Game model)
{
try{
String os = System.getProperty("os.name").toLowerCase();
ProcessBuilder pb;
if (os.contains("win")) {
pb = new ProcessBuilder("cmd", "/c", "cls");
} else {
pb = new ProcessBuilder("clear");
}
pb.inheritIO().start().waitFor();
}
catch(Exception e){
}
System.out.println(model.BoardStamp());
}
public void renderMyHand(Game model,String username)
{
try{
String os = System.getProperty("os.name").toLowerCase();
ProcessBuilder pb;
if (os.contains("win")) {
pb = new ProcessBuilder("cmd", "/c", "cls");
} else {
pb = new ProcessBuilder("clear");
}
pb.inheritIO().start().waitFor();
}
catch(Exception e){
}
System.out.println(model.getPlayerByUsername(username));
}
public void showMessage(String message)
{
System.out.println(message);
}
public void showError(String message)
{
System.out.println(message);
}
}