diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building1.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building1.java index cdf7261..e0b064c 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building1.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building1.java @@ -2,11 +2,8 @@ package it.polimi.ingsw.gc14.Model.Cards.Building.Effects; import it.polimi.ingsw.gc14.Model.Cards.Building.EffectType; import it.polimi.ingsw.gc14.Model.Cards.BuildingCard; -import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Character; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.CharacterType; -import it.polimi.ingsw.gc14.Model.Player; -import java.util.HashMap; /** * During the Sustenance Event, you have a discount of 1 food token on the total you @@ -47,4 +44,8 @@ public class Building1 extends BuildingCard { return new Building1(getEra(),getPrice(),getPrestigeValue(),getIcon()); } + @Override + public String toString() { + return super.toString() + " Icon: " + this.icon.toString().charAt(0); + } } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building11.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building11.java index 5b47de1..543adcf 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building11.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building11.java @@ -6,6 +6,7 @@ import it.polimi.ingsw.gc14.Model.Cards.TribeCards.CharacterType; import it.polimi.ingsw.gc14.Model.Player; public class Building11 extends BuildingCard { + private CharacterType icon ; /** @@ -14,6 +15,7 @@ public class Building11 extends BuildingCard { * @return the CharacterType associated with this building card effect. */ public CharacterType getIcon() {return icon;} + private int PrestigeMul; /** @@ -65,4 +67,9 @@ public class Building11 extends BuildingCard { throw new IllegalArgumentException(); player.addPrestige(player.getNType(getIcon()) * this.getPrestigeMul()); } + + @Override + public String toString() { + return super.toString() + " Icon: " + this.icon.toString().charAt(0) + " MP: " + this.PrestigeMul; + } } \ No newline at end of file diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/BuildingCard.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/BuildingCard.java index 352f25a..24e41a1 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/BuildingCard.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/BuildingCard.java @@ -182,6 +182,6 @@ public class BuildingCard extends PlayableCard implements Cloneable , BuildingEf */ @Override public String toString() { - return "Era:"+String.valueOf(getEra())+" Price:"+String.valueOf(getPrice())+" Prestige:"+String.valueOf(getPrestigeValue()); + return "⎕:" + " ID:" + String.valueOf(getEffectId())+ " $:"+String.valueOf(getPrice())+" PV:"+String.valueOf(getPrestigeValue()); } } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Character.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Character.java index 9cdb9ae..ba405ce 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Character.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Character.java @@ -57,7 +57,13 @@ public abstract class Character extends TribeCard implements Cloneable { */ @Override public String toString() { - return super.toString()+" "+type.toString(); + return super.toString(); + } + + @Override + public String toStringBoard() + { + return super.toStringBoard()+" "+getType().toString()+" "; } /** diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/Builder.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/Builder.java index 3fb9706..975fa6f 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/Builder.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/Builder.java @@ -86,7 +86,15 @@ public class Builder extends Character * @return the string representation of this Builder card. */ @Override - public String toString() { return super.toString()+" Reduction Value: " + String.valueOf(reductionValue) + "\n Prestige Value: " + String.valueOf(prestigeValue); } + public String toString() { + return super.toString() + " RV:" + String.valueOf(reductionValue) + " PV:" + String.valueOf(prestigeValue); + } + @Override + public String toStringBoard() + { + return super.toStringBoard()+" "+ " RV:" + String.valueOf(reductionValue) + " PV:" + String.valueOf(prestigeValue); + } + /** * Creates and returns a copy of this Builder card. diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/Hunter.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/Hunter.java index b956a18..0137dd2 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/Hunter.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/Hunter.java @@ -47,8 +47,21 @@ public class Hunter extends Character { */ @Override public String toString() { - return super.toString() + "Icon: " + String.valueOf(icon); + String toPrint = super.toString(); + if(this.icon){ + toPrint += " I"; + } + return toPrint; } + @Override + public String toStringBoard() { + String toPrint = super.toStringBoard(); + if(this.icon){ + toPrint += " I"; + } + return toPrint; + } + /** * Creates and returns a copy of this Hunter card. diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/Inventor.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/Inventor.java index d8c5f45..4d6b77b 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/Inventor.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/Inventor.java @@ -52,7 +52,11 @@ public class Inventor extends Character { */ @Override public String toString() { - return super.toString() + " Symbol:" + String.valueOf(icon); + return super.toString() + " I_ID:" + String.valueOf(icon); + } + @Override + public String toStringBoard() { + return super.toStringBoard() + " I_ID:" + String.valueOf(icon); } /** diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/Shaman.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/Shaman.java index b04098f..10b3360 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/Shaman.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/Shaman.java @@ -49,8 +49,13 @@ public class Shaman extends Character { */ @Override public String toString() { - return super.toString() + "Icon: " + String.valueOf(icon); + return super.toString() + " *:" + String.valueOf(icon); } + @Override + public String toStringBoard() { + return super.toStringBoard() + " *:" + String.valueOf(icon); + } + /** * Creates and returns a copy of this Shaman card. diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/EventCard.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/EventCard.java index 82d10b6..43b937a 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/EventCard.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/EventCard.java @@ -62,7 +62,11 @@ public abstract class EventCard extends TribeCard { */ @Override public String toString() { - return super.toString()+", "+type.toString(); + return super.toString()+" "+type.toString(); + } + @Override + public String toStringBoard() { + return super.toString()+" "+type.toString(); } /** diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/CavePaintings.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/CavePaintings.java index cbb1458..5a70bfb 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/CavePaintings.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/CavePaintings.java @@ -85,4 +85,9 @@ public class CavePaintings extends EventCard { { return new CavePaintings(getEra(), NLower, NPrestigeRem, NPrestigeMul) ; } + + @Override + public String toStringBoard() { + return super.toString()+" 0-"+(NLower-1)+":"+NPrestigeRem+" "+NLower+"+:"+NPrestigeMul; + } } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/Hunt.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/Hunt.java index cfe472d..59898d3 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/Hunt.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/Hunt.java @@ -70,5 +70,9 @@ public class Hunt extends EventCard { public EventCard clone() { return new Hunt(getEra(), prestigeMultiplier); } + @Override + public String toStringBoard() { + return super.toString()+" 1F+"+prestigeMultiplier+"PP"+" X N Hunter"; + } } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/ShamanicRitual.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/ShamanicRitual.java index b447c13..573f1f0 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/ShamanicRitual.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/ShamanicRitual.java @@ -96,6 +96,9 @@ public class ShamanicRitual extends EventCard { public EventCard clone() { return new ShamanicRitual(getEra(), prestigeToAdd, prestigeToRemove); } - + @Override + public String toStringBoard() { + return super.toString()+" *>:"+prestigeToAdd+" *<:"+prestigeToRemove; + } } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/Sustenance.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/Sustenance.java index 59be90f..0d92015 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/Sustenance.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/Sustenance.java @@ -89,4 +89,9 @@ public class Sustenance extends EventCard { public EventCard clone() { return new Sustenance(getEra(), PrestigeDebt); } + + @Override + public String toStringBoard() { + return super.toString()+" -1F/-"+PrestigeDebt+"PP"; + } } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java index 4da7f49..893ea24 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java @@ -18,6 +18,9 @@ import java.io.Serializable; import java.util.*; import java.util.stream.Collectors; import it.polimi.ingsw.gc14.Network.Observer; +import it.polimi.ingsw.gc14.View.TUI.AsciiTable; +import it.polimi.ingsw.gc14.View.TUI.BorderStyle; + /** * Represents the main game model. * A Game object stores the players, the current state of the match, @@ -36,6 +39,15 @@ public class Game implements Serializable { o.update(this); } } + + /** + * Returns the list of players participating in the game. + * @return + */ + public List getPlayers() { + return playersList; + } + /** * The current number of players. */ @@ -691,4 +703,90 @@ public class Game implements Serializable { return true; } + @Override + public String toString() { + var table = new AsciiTable(BorderStyle.UNICODE, slotMap.size()); + List stringUp=new ArrayList<>(); + List stringEmpty=new ArrayList<>(); + List stringDown=new ArrayList<>(); + for(Map.Entry entry:slotMap.entrySet()) + { + stringEmpty.add(" "); + stringDown.add(entry.getKey().toStringTUI()); + if(entry.getValue()!=null) + stringUp.add(entry.getValue().getUserName()); + else + stringUp.add(" "); + } + table.addRow(stringUp); + table.addRow(stringEmpty); + table.addRow(stringDown); + + Listlines=List.of(orderLogicCard.toString().split("\n")); + List lines2=new ArrayList<>(); + lines2.add("OFFER TRACK"); + lines2.addAll(List.of(table.build().split("\n"))); + + String boardToString=AsciiTable.sideBySide(lines,lines2,1); + + + + var table2 = new AsciiTable(BorderStyle.UNICODE, Math.max(getUpperListTribeCards().size(),getLowerListTribeCards().size())); + List stringUp2=new ArrayList<>(); + List stringDown2=new ArrayList<>(); + for(int i=0;i stringUp3=new ArrayList<>(); + List stringDown3=new ArrayList<>(); + for(int i=0;i players; + protected Queue players; + protected List playerList; + /** * Creates an order logic card with the specified list of players. @@ -26,6 +27,8 @@ public abstract class OrderLogicCard implements Serializable { public OrderLogicCard(ArrayList players) { Collections.shuffle(players); this.players = new LinkedList<>(players); + + this.playerList=new ArrayList<>(players.stream().map(x->new OrderPlayer(x,false)).toList()); } /** @@ -36,7 +39,15 @@ public abstract class OrderLogicCard implements Serializable { */ public void push(Player player){ effect(player,players.size()); + if(players.size()==0) + { + playerList=new ArrayList<>(); + + } + playerList.add(new OrderPlayer(player,false)); players.add(player); + + } /** @@ -45,6 +56,13 @@ public abstract class OrderLogicCard implements Serializable { * @return the first player in the queue, or {@code null} if the queue is empty. */ public Player pull(){ + for(OrderPlayer p:playerList){ + if(p.played==false) + { + p.played=true; + break; + } + } return players.poll(); } @@ -79,4 +97,17 @@ public abstract class OrderLogicCard implements Serializable { for(BuildingCard b : player.buildingCards.stream().filter(x->x.getEffectId()==3).toList()) player.addFood(1); } + + protected int getPosition(String username) + { + int pos = 0; + for (Player p : players) { + if (p.getUserName().equals(username)) + return pos; + pos++; + } + return -1; + } + + } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Orders/Order2.java b/src/main/java/it/polimi/ingsw/gc14/Model/Orders/Order2.java index 387eb1a..6d926c4 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Orders/Order2.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Orders/Order2.java @@ -2,8 +2,11 @@ package it.polimi.ingsw.gc14.Model.Orders; import it.polimi.ingsw.gc14.Model.OrderLogicCard; import it.polimi.ingsw.gc14.Model.Player; +import it.polimi.ingsw.gc14.View.TUI.AsciiTable; +import it.polimi.ingsw.gc14.View.TUI.BorderStyle; import java.util.*; +import java.util.stream.IntStream; public class Order2 extends OrderLogicCard { @@ -49,4 +52,35 @@ public class Order2 extends OrderLogicCard { } } } + @Override + public String toString() + { + + var table = new AsciiTable(BorderStyle.UNICODE, 2); + List stringUp=new ArrayList<>(); + List stringDown=new ArrayList<>(); + for(int i=0;i<2;i++) + { + try { + playerList.get(i); + stringUp.add(i+". "+playerList.get(i).player.getUserName()); + if(playerList.get(i).played) + stringDown.add(" Placed"); + else + stringDown.add(" Not Placed"); + } + catch (IndexOutOfBoundsException e) { + stringUp.add(""); + stringDown.add(""); + } + } + table.addRow(stringUp); + table.addRow(stringDown); + + List stringList=new ArrayList<>(); + stringList.add("+1 Food"); + stringList.add("-1 Food / -2 PP"); + table.addRow(stringList); + return "TURN ORDER\n" + table.build() + "\n"; + } } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Orders/Order3.java b/src/main/java/it/polimi/ingsw/gc14/Model/Orders/Order3.java index fc7f6d2..fb4c71a 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Orders/Order3.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Orders/Order3.java @@ -2,8 +2,11 @@ package it.polimi.ingsw.gc14.Model.Orders; import it.polimi.ingsw.gc14.Model.OrderLogicCard; import it.polimi.ingsw.gc14.Model.Player; +import it.polimi.ingsw.gc14.View.TUI.AsciiTable; +import it.polimi.ingsw.gc14.View.TUI.BorderStyle; import java.util.ArrayList; +import java.util.List; import java.util.NoSuchElementException; public class Order3 extends OrderLogicCard { @@ -49,4 +52,40 @@ public class Order3 extends OrderLogicCard { } } } + @Override + public String toString() + { + + var table = new AsciiTable(BorderStyle.UNICODE, 3); + + List stringUp=new ArrayList<>(); + List stringDown=new ArrayList<>(); + for(int i=0;i<3;i++) + { + try { + playerList.get(i); + stringUp.add(i+". "+playerList.get(i).player.getUserName()); + if(playerList.get(i).played) + stringDown.add(" Placed"); + else + stringDown.add(" Not Placed"); + } + catch (IndexOutOfBoundsException e) { + stringUp.add(""); + stringDown.add(""); + } + } + table.addRow(stringUp); + table.addRow(stringDown); + + List stringList=new ArrayList<>(); + + stringList.add("+2 Food"); + stringList.add("--"); + stringList.add("-1 Food / -2 PP"); + table.addRow(stringList); + + + return "TURN ORDER\n" + table.build() + "\n"; + } } \ No newline at end of file diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Orders/Order4.java b/src/main/java/it/polimi/ingsw/gc14/Model/Orders/Order4.java index 06bb44a..966f15a 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Orders/Order4.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Orders/Order4.java @@ -2,8 +2,11 @@ package it.polimi.ingsw.gc14.Model.Orders; import it.polimi.ingsw.gc14.Model.OrderLogicCard; import it.polimi.ingsw.gc14.Model.Player; +import it.polimi.ingsw.gc14.View.TUI.AsciiTable; +import it.polimi.ingsw.gc14.View.TUI.BorderStyle; import java.util.ArrayList; +import java.util.List; import java.util.NoSuchElementException; public class Order4 extends OrderLogicCard { @@ -57,4 +60,37 @@ public class Order4 extends OrderLogicCard { } } } + @Override + public String toString() + { + + var table = new AsciiTable(BorderStyle.UNICODE, 4); + List stringUp=new ArrayList<>(); + List stringDown=new ArrayList<>(); + for(int i=0;i<4;i++) + { + try { + playerList.get(i); + stringUp.add(i+". "+playerList.get(i).player.getUserName()); + if(playerList.get(i).played) + stringDown.add(" Placed"); + else + stringDown.add(" Not Placed"); + } + catch (IndexOutOfBoundsException e) { + stringUp.add(""); + stringDown.add(""); + } + } + table.addRow(stringUp); + table.addRow(stringDown); + + List stringList=new ArrayList<>(); + stringList.add("+2 Food"); + stringList.add("+1 Food"); + stringList.add("--"); + stringList.add("-1 Food / -2 PP"); + table.addRow(stringList); + return "TURN ORDER\n" + table.build() + "\n"; + } } \ No newline at end of file diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Orders/Order5.java b/src/main/java/it/polimi/ingsw/gc14/Model/Orders/Order5.java index 41b7228..468c626 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Orders/Order5.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Orders/Order5.java @@ -2,8 +2,11 @@ package it.polimi.ingsw.gc14.Model.Orders; import it.polimi.ingsw.gc14.Model.OrderLogicCard; import it.polimi.ingsw.gc14.Model.Player; +import it.polimi.ingsw.gc14.View.TUI.AsciiTable; +import it.polimi.ingsw.gc14.View.TUI.BorderStyle; import java.util.ArrayList; +import java.util.List; import java.util.NoSuchElementException; public class Order5 extends OrderLogicCard { @@ -58,4 +61,38 @@ public class Order5 extends OrderLogicCard { } } } + @Override + public String toString() + { + + var table = new AsciiTable(BorderStyle.UNICODE, 5); + List stringUp=new ArrayList<>(); + List stringDown=new ArrayList<>(); + for(int i=0;i<5;i++) + { + try { + playerList.get(i); + stringUp.add(i+". "+playerList.get(i).player.getUserName()); + if(playerList.get(i).played) + stringDown.add(" Placed"); + else + stringDown.add(" Not Placed"); + } + catch (IndexOutOfBoundsException e) { + stringUp.add(""); + stringDown.add(""); + } + } + table.addRow(stringUp); + table.addRow(stringDown); + + List stringList=new ArrayList<>(); + stringList.add("+3 Food"); + stringList.add("+1 Food"); + stringList.add("--"); + stringList.add("--"); + stringList.add("-1 Food / -2 PP"); + table.addRow(stringList); + return "TURN ORDER\n" + table.build() + "\n"; + } } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Orders/OrderPlayer.java b/src/main/java/it/polimi/ingsw/gc14/Model/Orders/OrderPlayer.java new file mode 100644 index 0000000..360bebc --- /dev/null +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Orders/OrderPlayer.java @@ -0,0 +1,21 @@ +package it.polimi.ingsw.gc14.Model.Orders; + +import it.polimi.ingsw.gc14.Model.Player; + +/** + * Abstract base class for all order logic cards. + * An OrderLogicCard manages a queue of players and defines the effects + * applied when players are pushed back into the queue. + */ +public class OrderPlayer{ + public Player player; + public boolean played; + public OrderPlayer(Player player,boolean played){ + this.player=player; + this.played=played; + } + @Override + public String toString() { + return player.getUserName()+" "+played; + } +} diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/PlayableCard.java b/src/main/java/it/polimi/ingsw/gc14/Model/PlayableCard.java index a6c61d7..386f731 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/PlayableCard.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/PlayableCard.java @@ -43,6 +43,10 @@ public abstract class PlayableCard implements Serializable { */ @Override public String toString() { - return "Era:"+String.valueOf(Era); + return "⎕:"; + } + public String toStringBoard() + { + return "⎕:"; } } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Player.java b/src/main/java/it/polimi/ingsw/gc14/Model/Player.java index bef8cbd..fd0a3ba 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Player.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Player.java @@ -3,10 +3,14 @@ package it.polimi.ingsw.gc14.Model; 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.Characters.*; +import it.polimi.ingsw.gc14.View.TUI.AsciiTable; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; +import java.util.List; + +import static it.polimi.ingsw.gc14.View.TUI.BorderStyle.*; /** * Default Player class; contains all identifiers and methods needed. @@ -224,21 +228,91 @@ public class Player implements Serializable { // endregion constructors // region Functions - // TODO tostring usr + food + prestige \n tab foreach(characters.cards + spazio) @Override public String toString() { - String toPrint = ""; - toPrint = this.getUserName() - + ":\n\tFood: " + this.getFoodValue() - + "\n\tPrestige: " + this.getPrestigeValue() - + "\n\tArtists: " + this.artists.toString() - + "\n\tBuilders: " + this.builders.toString() - + "\n\tGatherers: " + this.gatherers.toString() - + "\n\tShamans: " + this.shamans.toString() - + "\n\tHunters: " + this.hunters.toString() - + "\n\tBuildings: " - + this.buildingCards.toString(); - return toPrint; + int Last = 6; + + var table = new AsciiTable(UNICODE, 1); + + table.addHeader(this.getUserName()); + table.addRow("RESOURCES:"); + table.addRow("Food: " + this.getFoodValue()); + table.addSeparator(); + table.addRow("Prestige: " + this.getPrestigeValue()); + + if(!this.hunters.isEmpty()){ + Last = 6; + } + else if(!this.inventors.isEmpty()){ + Last = 5; + } + else if(!this.shamans.isEmpty()){ + Last = 4; + } + else if(!this.gatherers.isEmpty()){ + Last = 3; + } + else if(!this.builders.isEmpty()){ + Last = 2; + } + else if(!this.artists.isEmpty()){ + Last = 1; + } + else{ + Last = 0; + } + + if(Last == 0){ + table.addSeparator(); + } + table.addRow("CHARACTERS:"); + if(!this.artists.isEmpty()){ + if(Last == 1){ + table.addSeparator(); + } + table.addRow("Artists: " + this.artists.toString()); + } + + if(!this.builders.isEmpty()){ + if(Last == 2){ + table.addSeparator(); + } + table.addRow("Builders: " + this.builders.toString()); + } + + if(!this.gatherers.isEmpty()){ + if(Last == 3){ + table.addSeparator(); + } + table.addRow("Gatherers: " + this.gatherers.toString()); + } + + if(!this.shamans.isEmpty()){ + if(Last == 4){ + table.addSeparator(); + } + table.addRow("Shamans: " + this.shamans.toString()); + } + + if(!this.inventors.isEmpty()){ + if(Last == 5){ + table.addSeparator(); + } + table.addRow("Inventors: " + this.inventors.toString()); + } + + + if(!this.hunters.isEmpty()){ + table.addSeparator(); + table.addRow("Hunters: " + this.hunters.toString()); + } + + table.addRow("BUILDING CARDS:"); + if(!this.buildingCards.isEmpty()){ + table.addRow("Buildings: " + this.buildingCards.toString()); + } + + return table.build(); } // endregion functions } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Slot.java b/src/main/java/it/polimi/ingsw/gc14/Model/Slot.java index 5cc2f2f..456ee1a 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Slot.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Slot.java @@ -152,7 +152,25 @@ public class Slot implements Serializable { */ @Override public String toString() { - return ("SlotID: "+this.getSlotId()+"\nNUpper: "+this.getNUpper()+"\nNLower: "+this.getNLower()+"\nFood: "+this.getFood()+"\nNMinPlayer: "+this.getNMinPlayer()+"\n"); + return ("SlotID: "+this.getSlotId()+"\nNUpper: "+this.getNUpper()+"\nNLower: "+this.getNLower()+"\nFood: "+this.getFood()+"\n"); + } + + + public String toStringTUI() + { + StringBuilder s = new StringBuilder(); + s.append(this.getSlotId()+" "); + for(int i=0;i> rows = new ArrayList<>(); + private final List separators = new ArrayList<>(); + + public AsciiTable(BorderStyle s, int cols) { + this.s = s; this.cols = cols; + } + + public void addRow(String... cells) { rows.add(Arrays.asList(cells)); } + public void addRow(List 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 String build() { + var sb = new StringBuilder(); + int maxWidth = rows.stream().mapToInt(x->x.stream().mapToInt(y->y.length()).max().getAsInt()).max().getAsInt()+1; + sb.append(hline(s.tl(), s.mt(), s.tr(),maxWidth)).append('\n'); + + for (int i = 0; i < rows.size(); i++) { + sb.append(s.v()); + for (String cell : rows.get(i)) + sb.append(rpad(" " + cell, maxWidth)).append(s.v()); + sb.append('\n'); + if (separators.contains(i) && i < rows.size() - 1) + sb.append(hline(s.sl(), s.sx(), s.sr(),maxWidth)).append('\n'); + } + sb.append(hline(s.bl(), s.mb(), s.br(), maxWidth)); + return sb.toString(); + } + + private String hline(String l, String m, String r,int maxWidth) { + var sb = new StringBuilder(l); + for (int i = 0; i < cols; i++) { + sb.append(s.h().repeat(maxWidth)); + if (i < cols - 1) sb.append(m); + } + return sb.append(r).toString(); + } + + private static String rpad(String s, int w) { + if (s.length() >= w) return s.substring(0, w); + return s + " ".repeat(w - s.length()); + } + public static String sideBySide(List left, List right, int gap) { + int leftWidth = left.stream().mapToInt(String::length).max().orElse(0); + int maxHeight = Math.max(left.size(), right.size()); + String padding = " ".repeat(gap); + + var sb = new StringBuilder(); + for (int i = 0; i < maxHeight; i++) { + String l = i < left.size() + ? left.get(i) + : " ".repeat(leftWidth); + + // padda la riga sinistra se è più corta delle altre + l = rpad(l, leftWidth); + + String r = i < right.size() ? right.get(i) : ""; + sb.append(l).append(padding).append(r).append('\n'); + } + return sb.toString(); + } + +} \ No newline at end of file diff --git a/src/main/java/it/polimi/ingsw/gc14/View/TUI/BorderStyle.java b/src/main/java/it/polimi/ingsw/gc14/View/TUI/BorderStyle.java new file mode 100644 index 0000000..13b365d --- /dev/null +++ b/src/main/java/it/polimi/ingsw/gc14/View/TUI/BorderStyle.java @@ -0,0 +1,39 @@ +package it.polimi.ingsw.gc14.View.TUI; + +public enum BorderStyle { + UNICODE("╔","╗","╚","╝","═","║","╠","╣","╦","╩","╬","├","┤","─","┼"), + ASCII ("+","+","+","+","-","|","+","+","+","+","+","+","+","-","+"), + ROUNDED("╭","╮","╰","╯","─","│","├","┤","┬","┴","┼","├","┤","─","┼"); + + private final String tl,tr,bl,br,h,v,ml,mr,mt,mb,x,sl,sr,sh,sx; + + BorderStyle(String tl,String tr,String bl,String br, + String h, String v, String ml,String mr, + String mt,String mb,String x, + String sl,String sr,String sh,String sx) { + this.tl = tl; this.tr = tr; + this.bl = bl; this.br = br; + this.h = h; this.v = v; + this.ml = ml; this.mr = mr; + this.mt = mt; this.mb = mb; + this.x = x; + this.sl = sl; this.sr = sr; + this.sh = sh; this.sx = sx; + } + + public String tl() { return tl; } + public String tr() { return tr; } + public String bl() { return bl; } + public String br() { return br; } + public String h() { return h; } + public String v() { return v; } + public String ml() { return ml; } + public String mr() { return mr; } + public String mt() { return mt; } + public String mb() { return mb; } + public String x() { return x; } + public String sl() { return sl; } + public String sr() { return sr; } + public String sh() { return sh; } + public String sx() { return sx; } +} diff --git a/src/main/java/it/polimi/ingsw/gc14/View/TUI/TUI.java b/src/main/java/it/polimi/ingsw/gc14/View/TUI/TUI.java new file mode 100644 index 0000000..8d25fa3 --- /dev/null +++ b/src/main/java/it/polimi/ingsw/gc14/View/TUI/TUI.java @@ -0,0 +1,93 @@ +//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 "); +// } +//} diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building0Test.java b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building0Test.java index 5420c00..effb1df 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building0Test.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building0Test.java @@ -143,8 +143,4 @@ class Building0Test { b0.buy(p1); assertFalse(b0.buy(p2)); } - - - - } \ No newline at end of file diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building11Test.java b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building11Test.java index 296b0da..620233a 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building11Test.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building11Test.java @@ -3,7 +3,6 @@ package it.polimi.ingsw.gc14.Model.Cards.Building.Effects; import it.polimi.ingsw.gc14.Model.Cards.Building.EffectType; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.CharacterType; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters.Artist; -import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters.Hunter; import it.polimi.ingsw.gc14.Model.Player; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -109,4 +108,26 @@ class Building11Test { b4.applyEffect(p5); }); } + + @Test + @DisplayName("toString") + void testToString(){ + Building11 b11 = new Building11(1,2,3, CharacterType.INVENTOR, 1); + assertEquals("Era:1 Price:2 Prestige:3 Icon: INVENTOR", b11.toString()); + + b11 = new Building11(1,2,3, CharacterType.BUILDER, 1); + assertEquals("Era:1 Price:2 Prestige:3 Icon: BUILDER", b11.toString()); + + b11 = new Building11(1,2,3, CharacterType.GATHERER, 1); + assertEquals("Era:1 Price:2 Prestige:3 Icon: GATHERER", b11.toString()); + + b11 = new Building11(1,2,3, CharacterType.ARTIST, 1); + assertEquals("Era:1 Price:2 Prestige:3 Icon: ARTIST", b11.toString()); + + b11 = new Building11(1,2,3, CharacterType.SHAMAN, 1); + assertEquals("Era:1 Price:2 Prestige:3 Icon: SHAMAN", b11.toString()); + + b11 = new Building11(1,2,3, CharacterType.HUNTER, 1); + assertEquals("Era:1 Price:2 Prestige:3 Icon: HUNTER", b11.toString()); + } } \ No newline at end of file diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building1Test.java b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building1Test.java index eb76d5c..cfd9ef4 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building1Test.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building1Test.java @@ -66,4 +66,26 @@ class Building1Test { assertEquals(Prestige, bClone.getPrestigeValue()); assertEquals(ct, b0.getIcon()); } + + @Test + @DisplayName("toString") + void testToString(){ + Building1 b1 = new Building1(1,2,3, CharacterType.INVENTOR); + assertEquals("Era:1 Price:2 Prestige:3 Icon: INVENTOR", b1.toString()); + + b1 = new Building1(1,2,3, CharacterType.BUILDER); + assertEquals("Era:1 Price:2 Prestige:3 Icon: BUILDER", b1.toString()); + + b1 = new Building1(1,2,3, CharacterType.GATHERER); + assertEquals("Era:1 Price:2 Prestige:3 Icon: GATHERER", b1.toString()); + + b1 = new Building1(1,2,3, CharacterType.ARTIST); + assertEquals("Era:1 Price:2 Prestige:3 Icon: ARTIST", b1.toString()); + + b1 = new Building1(1,2,3, CharacterType.SHAMAN); + assertEquals("Era:1 Price:2 Prestige:3 Icon: SHAMAN", b1.toString()); + + b1 = new Building1(1,2,3, CharacterType.HUNTER); + assertEquals("Era:1 Price:2 Prestige:3 Icon: HUNTER", b1.toString()); + } } \ No newline at end of file diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/GameTest.java b/src/test/java/it/polimi/ingsw/gc14/Model/GameTest.java index 9dcb81a..ac50d5a 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/GameTest.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/GameTest.java @@ -115,7 +115,7 @@ class GameTest { assertTrue(game.SlotChoiceByIndex(game.getCurrentState().getCurrentPlayer(), i)); } Player temp_player; - + System.out.println(game); temp_player=players.poll(); assertEquals(temp_player,game.getCurrentState().getCurrentPlayer()); @@ -141,9 +141,12 @@ class GameTest { countCards++; } cards=game.getUpperListTribeCards(); + try { + index = cards.indexOf(cards.stream().filter(TribeCard::IsEventCard).findFirst().get()); + assertFalse(game.DrawUpperTribeCardByIndex(temp_player, index)); + }catch (Exception e) { - index=cards.indexOf(cards.stream().filter(TribeCard::IsEventCard).findFirst().get()); - assertFalse(game.DrawUpperTribeCardByIndex(temp_player,index)); + } //index=cards.indexOf(cards.stream().filter(x->!x.IsEventCard()).findFirst().get()); //assertTrue(game.DrawUpperTribeCardByIndex(temp_player,index)); List buildings=game.getUpperListBuilding(); @@ -153,6 +156,7 @@ class GameTest { index=cards.indexOf(cards.stream().filter(x->!x.IsEventCard()).findFirst().get()); assertFalse(game.DrawUpperTribeCardByIndex(temp_player,index)); + System.out.println(game); } private void drawTribeTest(HashMapnCardsByType,int nCards,int countCards,TribeCard temp_card,Player temp_player,Game game) { @@ -195,4 +199,23 @@ class GameTest { @Test void noOptionalCard() { } + @Test + void toStringModel() + { + Game game=new Game(3); + Player p1=new Player("p1"); + Player p2=new Player("p2"); + Player p3=new Player("p3"); + + assertTrue(game.addPlayer(p1)); + assertTrue(game.addPlayer(p2)); + assertTrue(game.addPlayer(p3)); + + Queueplayers=new LinkedList<>(); + for(int i=0;i<3;i++) { + players.add( game.getCurrentState().getCurrentPlayer()); + assertTrue(game.SlotChoiceByIndex(game.getCurrentState().getCurrentPlayer(), i)); + } + System.out.println(game); + } } \ No newline at end of file diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order2Test.java b/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order2Test.java index f089711..22347b3 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order2Test.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order2Test.java @@ -4,9 +4,10 @@ import it.polimi.ingsw.gc14.Model.Cards.BuildingCard; import it.polimi.ingsw.gc14.Model.Player; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.NoSuchElementException; + +import java.lang.reflect.Field; +import java.util.*; + import static org.junit.jupiter.api.Assertions.*; class Order2Test { @@ -154,4 +155,16 @@ class Order2Test { assertEquals(p1, order.getFirst()); assertEquals(p1, order.getFirst()); } + @Test + void toStringTest() throws NoSuchFieldException, IllegalAccessException { + Player p1 = new Player("wPIshEUhiOpRRnIBFfM89s2$@q$9FGbz"); + Player p2 = new Player("L*Ncw1rjjrF2xn%H@4P1iC@&NNIooQQk"); + Order2 order = new Order2(new ArrayList<>(Arrays.asList(p1, p2))); + order.pull(); + order.pull(); + order.push(p2); + order.push(p1); + order.pull().getUserName(); + System.out.println(order); + } } \ No newline at end of file diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order3Test.java b/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order3Test.java index d5cb5d4..34c2e3e 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order3Test.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order3Test.java @@ -4,9 +4,10 @@ import it.polimi.ingsw.gc14.Model.Cards.BuildingCard; import it.polimi.ingsw.gc14.Model.Player; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.NoSuchElementException; + +import java.lang.reflect.Field; +import java.util.*; + import static org.junit.jupiter.api.Assertions.*; class Order3Test { @@ -206,5 +207,30 @@ class Order3Test { assertEquals(p1, order.getFirst()); assertEquals(p1, order.getFirst()); } + @Test + void toStringTest() throws NoSuchFieldException, IllegalAccessException { + Player p1 = new Player("wPIshEUhiOpRRnIBFfM89s2$@q$9FGbz"); + Player p2 = new Player("L*Ncw1rjjrF2xn%H@4P1iC@&NNIooQQk"); + Player p3 = new Player("L*Ncw1ryyrF2xn%H@4P1iC@&NNIooQQk"); + Order3 order = new Order3(new ArrayList<>(Arrays.asList(p1, p2,p3))); + Field field = Order3.class.getSuperclass().getDeclaredField("playerList"); + field.setAccessible(true); + List values =(ArrayList)field.get(order); + + String userPulled=order.pull().getUserName(); + userPulled=order.pull().getUserName(); + userPulled=order.pull().getUserName(); + + System.out.println(values); + order.push(p1); + order.push(p2); + values =(ArrayList)field.get(order); + System.out.println(order); +// assertEquals("TURN ORDER\n" + +// "╔════════════════════════════════════╦════════════════════════════════════╦════════════════════════════════════╗\n" + +// "║ 0. ║ 1. "+values.get(1).getUserName() +"║ 2. "+values.get(2).getUserName()+"║\n" + +// "║ +2 Food ║ -- ║ -1 Food / -2 Prestige ║\n"+ +// "╚════════════════════════════════════╩════════════════════════════════════╩════════════════════════════════════╝\n", order.toString()); + } } diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order4Test.java b/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order4Test.java index 3ae1ac2..c562f60 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order4Test.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order4Test.java @@ -4,9 +4,10 @@ import it.polimi.ingsw.gc14.Model.Cards.BuildingCard; import it.polimi.ingsw.gc14.Model.Player; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.NoSuchElementException; + +import java.lang.reflect.Field; +import java.util.*; + import static org.junit.jupiter.api.Assertions.*; class Order4Test { @@ -272,22 +273,14 @@ class Order4Test { } @Test - void getFirst() { - Player p1 = new Player("p1"); - Player p2 = new Player("p2"); - Player p3 = new Player("p3"); - Player p4 = new Player("p4"); - Order4 order = new Order4(new ArrayList<>(Arrays.asList(p1, p2, p3, p4))); + void toStringTest() throws NoSuchFieldException, IllegalAccessException { + Player p1 = new Player("wPIshNQhiOpRRnIBFfM89s2$@q$9FGbz"); + Player p2 = new Player("L*Ncw1rjjrF2xn%H@4P1iC@&NNIooQQk"); + Player p3 = new Player("wPIshEUhiOpRRnIBFfM89s2$@q$9FGbz"); + Player p4 = new Player("wPIshOThiOpRRnIBFfM89s2$@q$9FGbz"); + Order4 order = new Order4(new ArrayList<>(Arrays.asList(p1, p2,p3,p4))); + String userPulled=order.pull().getUserName(); + System.out.println(order); - order.pull(); - order.pull(); - order.pull(); - order.pull(); - assertNull(order.getFirst()); - - order.push(p1); - - assertEquals(p1, order.getFirst()); - assertEquals(p1, order.getFirst()); } } \ No newline at end of file diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order5Test.java b/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order5Test.java index 929bc6a..0dceb69 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order5Test.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order5Test.java @@ -5,6 +5,7 @@ import it.polimi.ingsw.gc14.Model.Player; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import java.lang.reflect.Field; import java.util.*; import static org.junit.jupiter.api.Assertions.*; @@ -364,6 +365,23 @@ class Order5Test { assertEquals(p1, order.getFirst()); assertEquals(p1, order.getFirst()); } + @Test + void toStringTest() throws NoSuchFieldException, IllegalAccessException { + Player p1 = new Player("wPIshUEhiOpRRnIBFfM89s2$@q$9FGbz"); + Player p2 = new Player("L*Ncw1rjjrF2xn%H@4P1iC@&NNIooQQk"); + Player p3 = new Player("wPIshOUhiOpRRnIBFfM89s2$@q$9FGbz"); + Player p4 = new Player("wPIshNUhiOpRRnIBFfM89s2$@q$9FGbz"); + Player p5 = new Player("wPIshKUhiOpRRnIBFfM89s2$@q$9FGbz"); + Order5 order = new Order5(new ArrayList<>(Arrays.asList(p1, p2,p3,p4,p5))); + order.pull(); + order.pull(); + order.pull(); + order.pull(); + order.pull(); + order.push(p1); + System.out.println(order); + + } } diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/PlayerTest.java b/src/test/java/it/polimi/ingsw/gc14/Model/PlayerTest.java index 79990ec..31cd1b0 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/PlayerTest.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/PlayerTest.java @@ -1,5 +1,6 @@ package it.polimi.ingsw.gc14.Model; +import it.polimi.ingsw.gc14.Model.Cards.Building.Effects.*; 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.Characters.*; @@ -200,17 +201,44 @@ class PlayerTest { p.addPrestige(15); p.addFood(7); 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(1)); + p.artists.add(new Artist(1)); 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, 2,3, 6)); - assertEquals("test_usr:"+ "\n\t" + - "Food: 7" + "\n\t" + - "Prestige: 15" + "\n\t" + - "Artists: [Era:1 ARTIST, Era:2 ARTIST]" + "\n\t" + "Builders: []" + "\n\t" + - "Gatherers: []" + "\n\t" + - "Shamans: []" + "\n\t" + - "Hunters: []" + "\n\t" + - "Buildings: [Era:1 Price:2 Prestige:5, Era:2 Price:3 Prestige:6]", - p.toString()); + p.buildingCards.add(new Building1(2, 5, 5, CharacterType.INVENTOR)); + p.buildingCards.add(new Building1(2, 5, 5, CharacterType.SHAMAN)); + p.buildingCards.add(new Building11(1, 5, 7, CharacterType.ARTIST , 3)); + //System.out.println(p.toString()); + assertEquals(""+ + "╔═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗\n" + + "║ test_usr ║\n" + + "├═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════┤\n" + + "║ RESOURCES: ║\n" + + "║ Food: 7 ║\n" + + "║ Prestige: 15 ║\n" + + "├═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════┤\n" + + "║ CHARACTERS: ║\n" + + "║ Artists: [⎕:, ⎕:, ⎕:, ⎕:, ⎕:, ⎕:, ⎕:] ║\n" + + "║ Builders: [⎕: RV:5 PV:1] ║\n" + + "║ Gatherers: [⎕:] ║\n" + + "║ Shamans: [⎕: *:3, ⎕: *:3] ║\n" + + "║ Inventors: [⎕: I_ID:1] ║\n" + + "║ Hunters: [⎕: I, ⎕:] ║\n" + + "├═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════┤\n" + + "║ BUILDING CARDS: ║\n" + + "║ Buildings: [⎕: ID:2 $:2 PV:5, ⎕: ID:2 $:3 PV:6, ⎕: ID:1 $:5 PV:5 Icon: I, ⎕: ID:1 $:5 PV:5 Icon: S, ⎕: ID:11 $:5 PV:7 Icon: A MP: 3]║\n" + + "╚═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝", p.toString()); } } \ No newline at end of file diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/SlotTest.java b/src/test/java/it/polimi/ingsw/gc14/Model/SlotTest.java index 5d44ca9..ca32b35 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/SlotTest.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/SlotTest.java @@ -46,7 +46,8 @@ class SlotTest { assertEquals(0, s.getNLower()); assertEquals(0, s.getNUpper()); assertEquals(5, s.getNMinPlayer()); - assertEquals("SlotID: "+slotID+"\nNUpper: "+s.getNUpper()+"\nNLower: "+s.getNLower()+"\nFood: "+s.getFood()+"\nNMinPlayer: "+s.getNMinPlayer()+"\n", s.toString()); + System.out.println(s); + assertEquals("SlotID: "+slotID+"\nNUpper: "+s.getNUpper()+"\nNLower: "+s.getNLower()+"\nFood: "+s.getFood()+"\n", s.toString()); } @Test @@ -59,7 +60,8 @@ class SlotTest { assertEquals(1, s.getNLower()); assertEquals(0, s.getNUpper()); assertEquals(0, s.getNMinPlayer()); - assertEquals("SlotID: "+slotID+"\nNUpper: "+s.getNUpper()+"\nNLower: "+s.getNLower()+"\nFood: "+s.getFood()+"\nNMinPlayer: "+s.getNMinPlayer()+"\n", s.toString()); + System.out.println(s); + assertEquals("SlotID: "+slotID+"\nNUpper: "+s.getNUpper()+"\nNLower: "+s.getNLower()+"\nFood: "+s.getFood()+"\n", s.toString()); } @Test @@ -72,8 +74,8 @@ class SlotTest { assertEquals(0, s.getNLower()); assertEquals(1, s.getNUpper()); assertEquals(0, s.getNMinPlayer()); - assertEquals("SlotID: "+slotID+"\nNUpper: "+s.getNUpper()+"\nNLower: "+s.getNLower()+"\nFood: "+s.getFood()+"\nNMinPlayer: "+s.getNMinPlayer()+"\n", s.toString()); - } + System.out.println(s); + assertEquals("SlotID: "+slotID+"\nNUpper: "+s.getNUpper()+"\nNLower: "+s.getNLower()+"\nFood: "+s.getFood()+"\n", s.toString()); } @Test void SlotIdD() { @@ -85,7 +87,8 @@ class SlotTest { assertEquals(2, s.getNLower()); assertEquals(0, s.getNUpper()); assertEquals(3, s.getNMinPlayer()); - assertEquals("SlotID: "+slotID+"\nNUpper: "+s.getNUpper()+"\nNLower: "+s.getNLower()+"\nFood: "+s.getFood()+"\nNMinPlayer: "+s.getNMinPlayer()+"\n", s.toString()); + System.out.println(s); + assertEquals("SlotID: "+slotID+"\nNUpper: "+s.getNUpper()+"\nNLower: "+s.getNLower()+"\nFood: "+s.getFood()+"\n", s.toString()); } @Test @@ -98,7 +101,8 @@ class SlotTest { assertEquals(1, s.getNLower()); assertEquals(1, s.getNUpper()); assertEquals(0, s.getNMinPlayer()); - assertEquals("SlotID: "+slotID+"\nNUpper: "+s.getNUpper()+"\nNLower: "+s.getNLower()+"\nFood: "+s.getFood()+"\nNMinPlayer: "+s.getNMinPlayer()+"\n", s.toString()); + System.out.println(s); + assertEquals("SlotID: "+slotID+"\nNUpper: "+s.getNUpper()+"\nNLower: "+s.getNLower()+"\nFood: "+s.getFood()+"\n", s.toString()); } @Test @@ -111,7 +115,8 @@ class SlotTest { assertEquals(0, s.getNLower()); assertEquals(2, s.getNUpper()); assertEquals(0, s.getNMinPlayer()); - assertEquals("SlotID: "+slotID+"\nNUpper: "+s.getNUpper()+"\nNLower: "+s.getNLower()+"\nFood: "+s.getFood()+"\nNMinPlayer: "+s.getNMinPlayer()+"\n", s.toString()); + System.out.println(s); + assertEquals("SlotID: "+slotID+"\nNUpper: "+s.getNUpper()+"\nNLower: "+s.getNLower()+"\nFood: "+s.getFood()+"\n", s.toString()); } @Test @@ -124,6 +129,7 @@ class SlotTest { assertEquals(1, s.getNLower()); assertEquals(2, s.getNUpper()); assertEquals(4, s.getNMinPlayer()); - assertEquals("SlotID: "+slotID+"\nNUpper: "+s.getNUpper()+"\nNLower: "+s.getNLower()+"\nFood: "+s.getFood()+"\nNMinPlayer: "+s.getNMinPlayer()+"\n", s.toString()); + System.out.println(s); + assertEquals("SlotID: "+slotID+"\nNUpper: "+s.getNUpper()+"\nNLower: "+s.getNLower()+"\nFood: "+s.getFood()+"\n", s.toString()); } } \ No newline at end of file