@@ -47,6 +47,7 @@ public class ClientLauncherTUI {
|
||||
admissibleChar.add("6");
|
||||
admissibleChar.add("7");
|
||||
admissibleChar.add("8");
|
||||
admissibleChar.add("9");
|
||||
admissibleChar.add("A");
|
||||
admissibleChar.add("B");
|
||||
admissibleChar.add("C");
|
||||
@@ -137,7 +138,7 @@ public class ClientLauncherTUI {
|
||||
|
||||
if(admissibleChar.contains(action))
|
||||
{
|
||||
if (!action.equals("7") && !action.equals("8")&& !action.equals("9") && !action.equals("A") && !action.equals("B") && !action.equals("C")&&!action.equals("a") && !action.equals("b") && !action.equals("c")) {
|
||||
if (!action.equals("7") && !action.equals("8")&& !action.equals("A") && !action.equals("B") && !action.equals("C")&&!action.equals("a") && !action.equals("b") && !action.equals("c")) {
|
||||
try {
|
||||
System.out.println("Insert the required position:");
|
||||
pos = scanner.nextInt();
|
||||
|
||||
@@ -19,6 +19,7 @@ import it.polimi.ingsw.gc14.Model.GamePackage.GameStages;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.*;
|
||||
import java.util.random.RandomGenerator;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@@ -61,11 +62,27 @@ public class Game implements Serializable {
|
||||
}
|
||||
player.totem=totem;
|
||||
Player nextPlayer= totemChoiceQueue.poll();
|
||||
|
||||
if(nextPlayer==null)
|
||||
{
|
||||
currentState.GameStageUpdate(GameStages.SLOT_CHOICE);
|
||||
currentState.PlayerUpdate(orderLogicCard.pull(),null);
|
||||
}
|
||||
else
|
||||
{
|
||||
while(disconnetedPlayers.containsKey(nextPlayer)&& disconnetedPlayers.get(nextPlayer))
|
||||
{
|
||||
nextPlayer.totem=getAvailableTotems().get(new Random().nextInt(getAvailableTotems().size()-1));
|
||||
nextPlayer=totemChoiceQueue.poll();
|
||||
if(nextPlayer==null)
|
||||
{
|
||||
currentState.GameStageUpdate(GameStages.SLOT_CHOICE);
|
||||
currentState.PlayerUpdate(orderLogicCard.pull(),null);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
currentState.PlayerUpdate(nextPlayer,null);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -80,7 +97,20 @@ public class Game implements Serializable {
|
||||
}
|
||||
disconnetedPlayers.put(player,true);
|
||||
if(currentState.getCurrentPlayer().equals(player))
|
||||
nextPlayerSetup();
|
||||
if(!currentState.getGameStage().equals(GameStages.TOTEM_CHOICE))
|
||||
nextPlayerSetup();
|
||||
else
|
||||
{
|
||||
if(totemChoiceQueue.isEmpty())
|
||||
{
|
||||
player.totem=getAvailableTotems().get(new Random().nextInt(getAvailableTotems().size()-1));
|
||||
}
|
||||
else {
|
||||
totemChoiceQueue.add(player);
|
||||
}
|
||||
currentState.PlayerUpdate(totemChoiceQueue.poll(),null);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -254,6 +254,9 @@ public class Player implements Serializable {
|
||||
|
||||
table.addHeader(this.getUserName());
|
||||
table.addRow("RESOURCES:");
|
||||
if(this.totem != null) {
|
||||
table.addRow("Totem: " + this.totem.toString());
|
||||
}
|
||||
table.addRow("Food: " + this.getFoodValue());
|
||||
table.addRow("Prestige: " + this.getPrestigeValue());
|
||||
table.addSeparator();
|
||||
|
||||
@@ -11,6 +11,7 @@ import it.polimi.ingsw.gc14.Network.EventType;
|
||||
import it.polimi.ingsw.gc14.Network.NetworkEvent;
|
||||
import it.polimi.ingsw.gc14.Network.NetworkEvents.ApplyNextRound;
|
||||
import it.polimi.ingsw.gc14.Network.NetworkEvents.DisconnectedPlayer;
|
||||
import it.polimi.ingsw.gc14.Network.NetworkEvents.TotemChoice;
|
||||
import it.polimi.ingsw.gc14.Network.RMI.Server.RMIServer;
|
||||
import it.polimi.ingsw.gc14.Network.TCP.Server.TCPServer;
|
||||
import it.polimi.ingsw.gc14.View.TUI.TUI;
|
||||
@@ -116,21 +117,23 @@ public class ServerLauncher {
|
||||
int roundPrec=gameController.getModel().getCurrentState().getRound();
|
||||
synchronized(gameController){
|
||||
event.setIsError(!event.apply(gameController));
|
||||
Game game=gameController.getModel();
|
||||
if(!event.getIsError())
|
||||
{
|
||||
event.setData(gameController.getModel().getSlotMap(),gameController.getModel().orderLogicCard,gameController.getModel().getCurrentState(),gameController.getModel().getPlayerByUsername(event.getUsername()));
|
||||
event.setData(game.getSlotMap(),game.orderLogicCard,game.getCurrentState(),game.getPlayerByUsername(event.getUsername()));
|
||||
if(event.getEventType().equals(EventType.TOTEM_CHOICE))
|
||||
((TotemChoice)event).setAvailableTotems(gameController.getModel().getAvailableTotems());
|
||||
}
|
||||
serverRMI.notifyAll(event);
|
||||
serverTCP.notifyAll(event);
|
||||
if(gameController.getModel().getCurrentState().getRound()!=roundPrec)
|
||||
if(game.getCurrentState().getRound()!=roundPrec)
|
||||
{
|
||||
Game game=gameController.getModel();
|
||||
ApplyNextRound nextRound=new ApplyNextRound(game.getSlotMap(), game.orderLogicCard, game.getCurrentState(),game.getPlayers());
|
||||
serverRMI.notifyAll(nextRound);
|
||||
serverTCP.notifyAll(nextRound);
|
||||
}
|
||||
if(!event.getIsError()){
|
||||
if(this.gameController.getModel().getCurrentState().getGameStage() == GameStages.ENDED){
|
||||
if(game.getCurrentState().getGameStage() == GameStages.ENDED){
|
||||
if(!this.deleteSave()){
|
||||
System.out.println("\n!!! Couldn't delete save !!!\n");
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package it.polimi.ingsw.gc14.View.TUI;
|
||||
import it.polimi.ingsw.gc14.Model.Game;
|
||||
import it.polimi.ingsw.gc14.Model.MiniModel;
|
||||
import it.polimi.ingsw.gc14.Model.Player;
|
||||
import it.polimi.ingsw.gc14.Model.Slot;
|
||||
import it.polimi.ingsw.gc14.Model.*;
|
||||
import it.polimi.ingsw.gc14.Model.GamePackage.GameStages;
|
||||
import it.polimi.ingsw.gc14.View.IView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -92,7 +90,20 @@ public class TUI implements IView {
|
||||
*/
|
||||
@Override
|
||||
public void render() {
|
||||
renderBoard();
|
||||
if(model.currentState.getGameStage().equals(GameStages.TOTEM_CHOICE))
|
||||
{
|
||||
renderTotems();
|
||||
}
|
||||
else if(model.currentState.getGameStage().equals(GameStages.ENDED))
|
||||
{
|
||||
//renderStanding
|
||||
renderBoard();
|
||||
}
|
||||
else
|
||||
{
|
||||
renderBoard();
|
||||
}
|
||||
System.out.println("\nYOUR ACTION:");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -141,10 +152,23 @@ public class TUI implements IView {
|
||||
System.out.println(AsciiTable.sideBySide(lines, lines2, 3));
|
||||
}
|
||||
|
||||
public void renderTotems() {
|
||||
clearTerminal();
|
||||
var table = new AsciiTable(BorderStyle.ROUNDED, model.availableTotems.size());
|
||||
List<String> lines = model.availableTotems.stream().map(Totems::toString).toList();
|
||||
int i=0;
|
||||
for(String line : lines)
|
||||
{
|
||||
line = (i++) +". "+ line;
|
||||
}
|
||||
table.addRow(lines);
|
||||
System.out.println(model.currentState+"\nTOTEMS AVAILABLE:\n"+table.build());
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the player status table only.
|
||||
*
|
||||
* <p>Layout:
|
||||
* <p>Layout:SkipTurn
|
||||
* <ul>
|
||||
* <li><b>Left panel</b> — prestige, food, character deck, and building
|
||||
* deck for all players, as produced by {@link #PlayersStamp()}.</li>
|
||||
@@ -201,6 +225,7 @@ public class TUI implements IView {
|
||||
table.addRow(List.of("6-PickOptionalBuilding(pos)", ""));
|
||||
table.addRow(List.of("7-NoOptional", ""));
|
||||
table.addRow(List.of("8-SkipTurn", ""));
|
||||
table.addRow(List.of("9-TotemChoice(pos)", ""));
|
||||
return table.build();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user