@@ -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" +
|
||||||
|
|||||||
Reference in New Issue
Block a user