Merge pull request #55 from rubenpirreram/TUI

T UI
This commit is contained in:
rubenpirreram
2026-04-30 17:39:33 +02:00
committed by GitHub
6 changed files with 159 additions and 157 deletions
@@ -705,88 +705,85 @@ public class Game implements Serializable {
@Override @Override
public String toString() { public String toString() {
var table = new AsciiTable(BorderStyle.UNICODE, slotMap.size()); return PlayersStamp()+"\n"+BoardStamp()+"\n";
List<String> stringUp=new ArrayList<>(); }
List<String> stringEmpty=new ArrayList<>(); public String PlayersStamp()
List<String> stringDown=new ArrayList<>(); {
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()) for(Map.Entry<Slot,Player> entry:slotMap.entrySet())
{ {
stringEmpty.add(" "); stringDownOffer.add(entry.getKey().toStringTUI());
stringDown.add(entry.getKey().toStringTUI());
if(entry.getValue()!=null) if(entry.getValue()!=null)
stringUp.add(entry.getValue().getUserName()); stringUpOffer.add(entry.getValue().getUserName());
else else
stringUp.add(" "); stringUpOffer.add(" ");
} }
table.addRow(stringUp);
table.addRow(stringEmpty);
table.addRow(stringDown);
List<String>lines=List.of(orderLogicCard.toString().split("\n")); var TribeTableUpper = new AsciiTable(BorderStyle.UNICODE,1);
List<String> lines2=new ArrayList<>(); var TribeTableLower = new AsciiTable(BorderStyle.UNICODE,1);
lines2.add("OFFER TRACK");
lines2.addAll(List.of(table.build().split("\n")));
String boardToString=AsciiTable.sideBySide(lines,lines2,1); List<String> stringUpperListTribe=new ArrayList<>();
List<String> stringLowerListTribe=new ArrayList<>();
stringUpperListTribe.add("Char/Events");
stringLowerListTribe.add("Char/Events");
var table2 = new AsciiTable(BorderStyle.UNICODE, Math.max(getUpperListTribeCards().size(),getLowerListTribeCards().size()));
List<String> stringUp2=new ArrayList<>();
List<String> stringDown2=new ArrayList<>();
for(int i=0;i<Math.max(getUpperListTribeCards().size(),getLowerListTribeCards().size());i++) for(int i=0;i<Math.max(getUpperListTribeCards().size(),getLowerListTribeCards().size());i++)
{ {
if(i<getUpperListTribeCards().size()) if(i<getUpperListTribeCards().size())
{ {
stringUp2.add(getUpperListTribeCards().get(i).toStringBoard()); stringUpperListTribe.add(getUpperListTribeCards().get(i).toStringBoard());
}
else
{
stringUp2.add("");
} }
if(i<getLowerListTribeCards().size()) if(i<getLowerListTribeCards().size())
{ {
stringDown2.add(getLowerListTribeCards().get(i).toStringBoard()); stringLowerListTribe.add(getLowerListTribeCards().get(i).toStringBoard());
}
else
{
stringDown2.add("");
} }
} }
table2.addRow(stringUp2); var BuildTableUpper = new AsciiTable(BorderStyle.UNICODE,1);
table2.addRow(stringDown2); 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++) for(int i=0;i<Math.max(getUpperListBuilding().size(),getLowerListBuilding().size());i++)
{ {
if(i<getUpperListBuilding().size()) if(i<getUpperListBuilding().size())
{ {
stringUp3.add(getUpperListBuilding().get(i).toString()); BuildTableUpper.addRow(getUpperListBuilding().get(i).toString());
}
else
{
stringUp3.add("-");
} }
if(i<getLowerListBuilding().size()) if(i<getLowerListBuilding().size())
{ {
stringDown3.add(getLowerListBuilding().get(i).toString()); BuildTableLower.addRow(getLowerListBuilding().get(i).toString());
}
else
{
stringDown3.add("-");
} }
} }
table3.addRow(stringUp3);
table3.addRow(stringDown3);
String PlayerToString ="";
for(Player p:playersList) //offerTrack.addRow(stringUpperListTribe);
{ stringUpperListTribe.forEach(x->TribeTableUpper.addRow(x));
PlayerToString+=p.toString()+"\n"; stringLowerListTribe.forEach(x->TribeTableLower.addRow(x));
}
return PlayerToString+"\n"+ boardToString +"UPPERList\\LOWERList\n"+table2.build() + "\nBUILDING\n"+table3.build() + "\n"; 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" ; //return s.toString()+"\n"++"\nOFFER TRACK\n"+ table.build()+"\n" ;
} }
} }
@@ -5,8 +5,8 @@ import it.polimi.ingsw.gc14.Network.NetworkEvent;
public interface IView { public interface IView {
void render(Game model); public void render(Game model);
void showMessage(String message); public void showMessage(String message);
void showError(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(String... cells) { rows.add(Arrays.asList(cells)); }
public void addRow(List<String> cells) { rows.add(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 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() { public String build() {
var sb = new StringBuilder(); var sb = new StringBuilder();
@@ -1,93 +1,91 @@
//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;
// import it.polimi.ingsw.gc14.View.IView;
//public class TUI {
// public class TUI implements IView {
// // ── dati di stato ───────────────────────────────────────────
// private BorderStyle style = BorderStyle.UNICODE; // ── dati di stato ───────────────────────────────────────────
// private Game model; private BorderStyle style = BorderStyle.UNICODE;
// // ── punto di ingresso ─────────────────────────────────────── private Game model;
// public String render() { public TUI(Game model) {
// var sb = new StringBuilder(); this.model = model;
// sb.append(renderHeader()); }
// sb.append(renderTurnOrder()); // ── punto di ingresso ───────────────────────────────────────
// sb.append(renderOfferTrack()); public void render(Game model)
// sb.append(renderCardRows()); {
// sb.append(renderTableaux()); try{
// sb.append(renderFooter()); String os = System.getProperty("os.name").toLowerCase();
// return sb.toString(); ProcessBuilder pb;
// } if (os.contains("win")) {
// pb = new ProcessBuilder("cmd", "/c", "cls");
// // ── sezioni ───────────────────────────────────────────────── } else {
// private String renderTurnOrder() { pb = new ProcessBuilder("clear");
// var table = new AsciiTable(style, 4, 10); // 4 colonne, largh 10 }
// table.addRow(model.getPlayers().stream() pb.inheritIO().start().waitFor();
// .map(p -> + ". " + p.getUserName()) }
// .toList()); catch(Exception e){
// table.addRow(state.getPlayers().stream() }
// .map(p -> p.getTotemPosition() != null System.out.println(model.toString());
// ? "totem: " + p.getTotemPosition() }
// : "(da piaz)")
// .toList()); public void renderBoard(Game model)
// return " TURN ORDER\n" + table.build() + "\n"; {
// } try{
// String os = System.getProperty("os.name").toLowerCase();
// private String renderOfferTrack() { ProcessBuilder pb;
// var table = new AsciiTable(style, 5, 14); if (os.contains("win")) {
// table.addRow(state.getOfferTiles().stream() pb = new ProcessBuilder("cmd", "/c", "cls");
// .map(t -> t.getId() + ": " + t.getLabel()).toList()); } else {
// table.addRow(state.getOfferTiles().stream() pb = new ProcessBuilder("clear");
// .map(OfferTile::getRowsLabel).toList()); }
// table.addRow(state.getOfferTiles().stream() pb.inheritIO().start().waitFor();
// .map(t -> state.getTotemOnTile(t.getId())).toList()); }
// return " OFFER TRACK\n" + table.build() + "\n"; catch(Exception e){
// } }
// System.out.println(model.BoardStamp());
// private String renderCardRows() { }
// int cols = state.getTopRow().size(); public void renderPlayer(Game model)
// var table = new AsciiTable(style, cols, 13); {
// table.addRow(state.getTopRow().stream() try{
// .map(c -> "[" + c.getTypeLabel() + "]").toList()); String os = System.getProperty("os.name").toLowerCase();
// table.addRow(state.getTopRow().stream() ProcessBuilder pb;
// .map(Card::getName).toList()); if (os.contains("win")) {
// table.addSeparator(); pb = new ProcessBuilder("cmd", "/c", "cls");
// table.addRow(state.getBotRow().stream() } else {
// .map(c -> "[" + c.getTypeLabel() + "]").toList()); pb = new ProcessBuilder("clear");
// table.addRow(state.getBotRow().stream() }
// .map(Card::getName).toList()); pb.inheritIO().start().waitFor();
// return " CARTE IN GIOCO\n" + prefix("TOP ", "BOT ", table.build()) + "\n"; }
// } catch(Exception e){
// }
// private String renderTableaux() { System.out.println(model.BoardStamp());
// var sb = new StringBuilder(" TABLEAU GIOCATORI\n\n"); }
// for (Player p : state.getPlayers()) { public void renderMyHand(Game model,String username)
// String marker = p.isActive() ? ">>>" : " "; {
// sb.append(String.format(" %s %s%s Food:%d PP:%d%n", try{
// marker, p.getName(), String os = System.getProperty("os.name").toLowerCase();
// p.isActive() ? " [TUO TURNO]" : "", ProcessBuilder pb;
// p.getFood(), p.getPP())); if (os.contains("win")) {
// sb.append(renderPlayerTableau(p)); pb = new ProcessBuilder("cmd", "/c", "cls");
// sb.append("\n"); } else {
// } pb = new ProcessBuilder("clear");
// return sb.toString(); }
// } pb.inheritIO().start().waitFor();
// }
// private String renderPlayerTableau(Player p) { catch(Exception e){
// var table = new AsciiTable(style, 3, 14); }
// table.addHeader("PERSONAGGI", "EDIFICI", "RISORSE"); System.out.println(model.getPlayerByUsername(username));
// int rows = Math.max(p.getChars().size(), }
// Math.max(p.getBuildings().size(), 3));
// for (int i = 0; i < rows; i++) { public void showMessage(String message)
// String ch = i < p.getChars().size() ? p.getChars().get(i) : ""; {
// String bd = i < p.getBuildings().size() ? p.getBuildings().get(i) : ""; System.out.println(message);
// 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(); public void showError(String message)
// default -> ""; {
// }; System.out.println(message);
// table.addRow(ch, bd, rs); }
// }
// return " " + table.build().replace("\n", "\n "); }
// }
//}
@@ -9,6 +9,7 @@ import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.platform.commons.annotation.Testable; import org.junit.platform.commons.annotation.Testable;
import java.io.IOException;
import java.util.*; import java.util.*;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
@@ -200,22 +201,28 @@ class GameTest {
void noOptionalCard() { void noOptionalCard() {
} }
@Test @Test
void toStringModel() void toStringModel() throws IOException, InterruptedException {
{ Game game=new Game(5);
Game game=new Game(3);
Player p1=new Player("p1"); Player p1=new Player("p1");
Player p2=new Player("p2"); Player p2=new Player("p2");
Player p3=new Player("p3"); Player p3=new Player("p3");
Player p4=new Player("p4");
Player p5=new Player("p5");
assertTrue(game.addPlayer(p1)); assertTrue(game.addPlayer(p1));
assertTrue(game.addPlayer(p2)); assertTrue(game.addPlayer(p2));
assertTrue(game.addPlayer(p3)); assertTrue(game.addPlayer(p3));
assertTrue(game.addPlayer(p4));
assertTrue(game.addPlayer(p5));
Queue<Player>players=new LinkedList<>(); Queue<Player>players=new LinkedList<>();
for(int i=0;i<3;i++) { for(int i=0;i<3;i++) {
players.add( game.getCurrentState().getCurrentPlayer()); players.add( game.getCurrentState().getCurrentPlayer());
assertTrue(game.SlotChoiceByIndex(game.getCurrentState().getCurrentPlayer(), i)); assertTrue(game.SlotChoiceByIndex(game.getCurrentState().getCurrentPlayer(), i));
} }
System.out.println(game);
System.out.println(game.BoardStamp());
String os = System.getProperty("os.name").toLowerCase();
System.out.println(game.PlayersStamp());
} }
} }
@@ -220,7 +220,7 @@ class PlayerTest {
p.buildingCards.add(new Building1(2, 5, 5, CharacterType.INVENTOR)); p.buildingCards.add(new Building1(2, 5, 5, CharacterType.INVENTOR));
p.buildingCards.add(new Building1(2, 5, 5, CharacterType.SHAMAN)); p.buildingCards.add(new Building1(2, 5, 5, CharacterType.SHAMAN));
p.buildingCards.add(new Building11(1, 5, 7, CharacterType.ARTIST , 3)); p.buildingCards.add(new Building11(1, 5, 7, CharacterType.ARTIST , 3));
//System.out.println(p.toString()); System.out.println(p.toString());
assertEquals(""+ assertEquals(""+
"╔═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗\n" + "╔═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗\n" +
"║ test_usr ║\n" + "║ test_usr ║\n" +