Coverage Summary for Class: Order5 (it.polimi.ingsw.gc14.Model.Orders)
| Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
| Order5 |
100%
(1/1)
|
100%
(3/3)
|
90%
(18/20)
|
96.7%
(29/30)
|
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;
/**
* Represents the order logic card used in a five-player game.
*
* <p>This class defines the specific turn-order behavior for games with
* five players.
*/
public class Order5 extends OrderLogicCard {
/**
* Creates an Order5 logic card for a five-player game.
*
* @param players the list of players associated with this order card.
* @throws NoSuchElementException if the number of players is not equal to 5.
*/
public Order5(ArrayList<Player> players) throws NoSuchElementException{
super(players);
if(players.size()!=5)
throw new NoSuchElementException();
}
/**
* Applies the effect associated with the specified position index for the given player.
* <p>If {@code index == 0}, the player gains 3 Food and the building effect is applied.
* <p>If {@code index == 1}, the player gains 1 Food and the building effect is applied.
* <p>If {@code index == 2}, no effect is applied.
* <p>If {@code index == 3}, no effect is applied.
* <p>If {@code index == 4}, the player tries to remove 1 Food; if the player cannot pay it,
* the player loses 2 Prestige.
*
* @param player the player to whom the effect is applied.
* @param index the position index of the effect to apply.
* @throws IndexOutOfBoundsException if {@code index < 0} or {@code index >= 5}.
*/
@Override
protected void effect(Player player,int index) throws IndexOutOfBoundsException
{
if(index>=5 || index < 0)
{
throw new IndexOutOfBoundsException("index out of bounds");
}
if(index==0)
{
player.addFood(3);
buildingEffect(player);
return;
}
if(index==1)
{
player.addFood(1);
buildingEffect(player);
return;
}
if(index==4){
if(!player.removeFood(1)){
player.removePrestige(2);
}
}
}
/**
* Creates the TURN ORDER box of the TUI.
* @return the string containing the box
*/
@Override
public String toString()
{
var table = new AsciiTable(BorderStyle.ROUNDED, 5);
List<String> stringUp=new ArrayList<>();
for(int i=0;i<5;i++)
{
try {
if(playerList.get(i).isPlayed())
stringUp.add("");
else
stringUp.add(i + ". " + (playerList.get(i).getPlayer().getTotem() != null ? playerList.get(i).getPlayer().getTotem().toString() : playerList.get(i).getPlayer().getUserName()));
}
catch (IndexOutOfBoundsException e) {
stringUp.add("");
}
}
table.addRow(stringUp);
List<String> stringList=new ArrayList<>();
stringList.add("+3\uD83C\uDF56");
stringList.add("+1\uD83C\uDF56");
stringList.add("--");
stringList.add("--");
stringList.add("-1\uD83C\uDF56/-2\uD83C\uDFC5");
table.addRow(stringList);
return table.build() + "\n";
}
}