Merge pull request #7 from rubenpirreram/OptionalCard-Management
OptionalCard-Management
This commit is contained in:
@@ -27,28 +27,21 @@ public class Game {
|
||||
private OrderLogicCard orderLogicCard;
|
||||
private Board board;
|
||||
|
||||
|
||||
public List<TribeCard>getUpperListTribeCards() {
|
||||
List<TribeCard> cards = new ArrayList<>();
|
||||
board.upperListTribe.forEach(x->cards.add(x.clone()));
|
||||
return cards;
|
||||
}
|
||||
public CurrentState getCurrentState() {
|
||||
return currentState;
|
||||
};
|
||||
public Player getPlayerByIndex(int playerIndex) throws IndexOutOfBoundsException {
|
||||
if(playerIndex >= playersList.size())
|
||||
throw new IndexOutOfBoundsException("Player index out of bounds");
|
||||
return playersList.get(playerIndex);
|
||||
}
|
||||
/*
|
||||
public TribeCard getUpperTribeCardByIndex(int playerIndex) throws IndexOutOfBoundsException
|
||||
{
|
||||
}
|
||||
public TribeCard getLowerTribeCardByIndex()
|
||||
{
|
||||
|
||||
}
|
||||
public BuildingCard getUpperBuildingCardByIndex(int playerIndex) throws IndexOutOfBoundsException
|
||||
{
|
||||
|
||||
}
|
||||
public BuildingCard getLowerBuildingCardByIndex(int playerIndex) throws IndexOutOfBoundsException
|
||||
{
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
public int getNPlayers() {
|
||||
return nPlayers;
|
||||
@@ -69,14 +62,14 @@ public class Game {
|
||||
public boolean addPlayer(Player player) {
|
||||
if(currentState.getGameStage()!= GameStages.WAITING)
|
||||
return false;
|
||||
if(playersList.contains(player))
|
||||
return false;
|
||||
playersList.add(player);
|
||||
|
||||
if(playersList.size()>=nPlayers)
|
||||
{
|
||||
init();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
public void init() {
|
||||
|
||||
@@ -99,7 +92,9 @@ public class Game {
|
||||
}
|
||||
|
||||
//region Cotroller Methods
|
||||
public boolean SlotChoice(Player player, Slot slot) {
|
||||
public boolean SlotChoiceByIndex(Player player, int slotIndex) {
|
||||
if(slotIndex<0 || slotIndex>=slotMap.size())
|
||||
return false;
|
||||
if(currentState.getGameStage()!= GameStages.SLOT_CHOICE)
|
||||
{
|
||||
return false;
|
||||
@@ -108,23 +103,21 @@ public class Game {
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(slotMap.get(slot)!=null)
|
||||
Map.Entry<Slot, Player> slotPlayerEntry = new ArrayList<>(slotMap.entrySet()).get(slotIndex);
|
||||
if(slotPlayerEntry.getValue()!=null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(!board.getSlotList().contains(slot))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
slotMap.put(slot,player);
|
||||
slotMap.put(slotPlayerEntry.getKey(),player);
|
||||
nextPlayerSetup();
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
//region Drawing Methods
|
||||
public boolean DrawUpperTribeCard(Player player,TribeCard tribeCard) {
|
||||
public boolean DrawUpperTribeCardByIndex(Player player,int cardIndex) {
|
||||
if( cardIndex<0 || cardIndex >=board.upperListTribe.size())
|
||||
return false;
|
||||
if(currentState.getGameStage()!= GameStages.RESOLVING_ACTIONS)
|
||||
{
|
||||
return false;
|
||||
@@ -133,11 +126,10 @@ public class Game {
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(!board.containsUpperTribeCard(tribeCard))
|
||||
return false;
|
||||
if(currentState.getNUpper() <1)
|
||||
return false;
|
||||
if(!tribeCard.IsEventCard())
|
||||
TribeCard tribeCard = board.upperListTribe.get(cardIndex);
|
||||
if(tribeCard.IsEventCard())
|
||||
return false;
|
||||
|
||||
Character tempCard = (Character) tribeCard;
|
||||
@@ -149,7 +141,9 @@ public class Game {
|
||||
return true;
|
||||
|
||||
}
|
||||
public boolean DrawLowerTribeCard(Player player,TribeCard tribeCard) {
|
||||
public boolean DrawLowerTribeCardByIndex(Player player, int cardIndex) {
|
||||
if( cardIndex<0 || cardIndex >=board.lowerListTribe.size())
|
||||
return false;
|
||||
if(currentState.getGameStage()!= GameStages.RESOLVING_ACTIONS)
|
||||
{
|
||||
return false;
|
||||
@@ -158,10 +152,11 @@ public class Game {
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(!board.containsLowerTribeCard(tribeCard))
|
||||
return false;
|
||||
|
||||
|
||||
if(currentState.getNLower() <1)
|
||||
return false;
|
||||
TribeCard tribeCard = board.lowerListTribe.get(cardIndex);
|
||||
if(!tribeCard.IsEventCard())
|
||||
return false;
|
||||
|
||||
@@ -175,7 +170,9 @@ public class Game {
|
||||
|
||||
}
|
||||
|
||||
public boolean DrawUpperBuildingCard(Player player,BuildingCard buildingCard) {
|
||||
public boolean DrawUpperBuildingCardByIndex(Player player,int cardIndex) {
|
||||
if( cardIndex<0 || cardIndex >=board.upperListBuilding.size())
|
||||
return false;
|
||||
if(currentState.getGameStage()!= GameStages.RESOLVING_ACTIONS)
|
||||
{
|
||||
return false;
|
||||
@@ -184,10 +181,7 @@ public class Game {
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(!board.containsUpperBuildingCard(buildingCard))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
BuildingCard buildingCard = board.upperListBuilding.get(cardIndex);
|
||||
if(currentState.getNUpper() <1)
|
||||
return false;
|
||||
if(buildingCard.buy(player))
|
||||
@@ -202,19 +196,19 @@ public class Game {
|
||||
|
||||
return true;
|
||||
}
|
||||
public boolean DrawLowerBuildingCard(Player player,BuildingCard buildingCard) {
|
||||
public boolean DrawLowerBuildingCardByIndex(Player player,int cardIndex) {
|
||||
if( cardIndex<0 || cardIndex >=board.lowerListBuilding.size())
|
||||
return false;
|
||||
if(currentState.getGameStage()!= GameStages.RESOLVING_ACTIONS)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!player.equals(currentState.getCurrentPlayer()))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(!board.containsLowerBuildingCard(buildingCard))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
BuildingCard buildingCard = board.lowerListBuilding.get(cardIndex);
|
||||
if(currentState.getNLower() <1)
|
||||
return false;
|
||||
if(buildingCard.buy(player))
|
||||
@@ -234,7 +228,6 @@ public class Game {
|
||||
//endregion
|
||||
|
||||
//region Optional Card Methods
|
||||
// TODO fare mappa per contare più volte lo stesso player
|
||||
public boolean PickOptionalTribeCard(Player player,TribeCard tribeCard) {
|
||||
if(currentState.getGameStage() != GameStages.OPTIONAL_CARD_EFFECT){
|
||||
return false;
|
||||
@@ -242,7 +235,7 @@ public class Game {
|
||||
if(!player.equals(currentState.getCurrentPlayer())){
|
||||
return false;
|
||||
}
|
||||
if(!board.containsUpperTribeCard(tribeCard)){
|
||||
if(!board.upperListTribe.contains(tribeCard)){
|
||||
return false;
|
||||
}
|
||||
if(tribeCard.IsEventCard()){
|
||||
@@ -262,7 +255,7 @@ public class Game {
|
||||
if(!player.equals(currentState.getCurrentPlayer())){
|
||||
return false;
|
||||
}
|
||||
if(!board.containsUpperBuildingCard(buildingCard)){
|
||||
if(!board.upperListBuilding.contains(buildingCard)){
|
||||
return false;
|
||||
}
|
||||
if(buildingCard.buy(player)) {
|
||||
@@ -283,6 +276,8 @@ public class Game {
|
||||
if(!player.equals(currentState.getCurrentPlayer())){
|
||||
return false;
|
||||
}
|
||||
OptionalCardQueue.removeIf(x->x.equals(player));
|
||||
nextPlayerSetup();
|
||||
return true;
|
||||
}
|
||||
//endregion
|
||||
@@ -291,11 +286,21 @@ public class Game {
|
||||
|
||||
private void nextPlayerSetup() {
|
||||
if(GameStages.SLOT_CHOICE==currentState.getGameStage()) {
|
||||
currentState.PlayerUpdate(orderLogicCard.pull(), null);
|
||||
if(currentState.getCurrentPlayer()==null)
|
||||
{
|
||||
currentState.GameStageUpdate(GameStages.RESOLVING_ACTIONS);
|
||||
Player tempPlayer = orderLogicCard.pull();
|
||||
|
||||
if(tempPlayer!=null) {
|
||||
currentState.PlayerUpdate(tempPlayer, null);
|
||||
return;
|
||||
}
|
||||
currentState.GameStageUpdate(GameStages.RESOLVING_ACTIONS);
|
||||
for (Map.Entry<Slot,Player> s : slotMap.entrySet()) {
|
||||
if (s.getValue()!=null) {
|
||||
currentState.PlayerUpdate(s.getValue(), s.getKey());
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
||||
}
|
||||
if(GameStages.RESOLVING_ACTIONS==currentState.getGameStage()) {
|
||||
orderLogicCard.push(currentState.getCurrentPlayer());
|
||||
@@ -308,7 +313,19 @@ public class Game {
|
||||
if(slotMap.values().stream().allMatch(v -> v == null))
|
||||
{
|
||||
currentState.GameStageUpdate(GameStages.OPTIONAL_CARD_EFFECT);
|
||||
OptionalCardQueue=(playersList.stream().filter(x->x.buildingCards.stream().anyMatch(y->y.getEffectId()==12)).collect(Collectors.toCollection(LinkedList::new)));
|
||||
HashMap<Player,Integer> optional=new LinkedHashMap<>();
|
||||
for (Player p : playersList) {
|
||||
int tempCount=(int)p.buildingCards.stream().filter(x->x.getEffectId()==12).count();
|
||||
if(tempCount>0)
|
||||
{
|
||||
optional.put(p,tempCount);
|
||||
}
|
||||
}
|
||||
OptionalCardQueue=new LinkedList<>();
|
||||
for(Map.Entry<Player,Integer> e : optional.entrySet())
|
||||
{
|
||||
OptionalCardQueue.add(e.getKey());
|
||||
}
|
||||
currentState.PlayerUpdate(OptionalCardQueue.remove(), null);
|
||||
if(currentState.getCurrentPlayer()==null)
|
||||
{
|
||||
@@ -373,7 +390,6 @@ public class Game {
|
||||
|
||||
}
|
||||
|
||||
// TODO pulire game ?
|
||||
private void endGame() {
|
||||
playersList.forEach(
|
||||
p -> p.buildingCards.stream().filter(x -> x.getEffectType() == EffectType.FINAL).
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package it.polimi.ingsw.gc14.Model;
|
||||
|
||||
import it.polimi.ingsw.gc14.Controller.GameController;
|
||||
import it.polimi.ingsw.gc14.Model.Cards.BuildingCard;
|
||||
import it.polimi.ingsw.gc14.Model.Cards.TribeCard;
|
||||
import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters.Inventor;
|
||||
@@ -8,9 +9,6 @@ import java.util.*;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
Inventor inventor= new Inventor(1,0);
|
||||
System.out.println(inventor);
|
||||
List<TribeCard>cards= DecksCreator.loadTribeDeck("/Cards/tribe_era1.json");
|
||||
List<BuildingCard> buildingCards = DecksCreator.loadBuildingDeck("/Cards/buildingCards.json");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,18 @@
|
||||
package it.polimi.ingsw.gc14.Model;
|
||||
|
||||
import it.polimi.ingsw.gc14.Model.GamePackage.GameStages;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class GameTest {
|
||||
@Test void Game()
|
||||
{
|
||||
int nPlayers = 3;
|
||||
Game game=new Game(nPlayers);
|
||||
assertEquals(nPlayers,game.getNPlayers());
|
||||
assertEquals(GameStages.WAITING,game.getCurrentState().getGameStage());
|
||||
}
|
||||
|
||||
@Test
|
||||
void getUpperListTribeCards() {
|
||||
@@ -24,10 +32,27 @@ class GameTest {
|
||||
|
||||
@Test
|
||||
void addPlayer() {
|
||||
Game game=new Game(3);
|
||||
Player p1=new Player("p1");
|
||||
Player p2=new Player("p2");
|
||||
Player p3=new Player("p3");
|
||||
Player p4=new Player("p3");
|
||||
|
||||
assertTrue(game.addPlayer(p1));
|
||||
assertTrue(game.addPlayer(p2));
|
||||
assertFalse(game.addPlayer(p2));
|
||||
assertTrue(game.addPlayer(p3));
|
||||
|
||||
|
||||
assertEquals(GameStages.SLOT_CHOICE,game.getCurrentState().getGameStage());
|
||||
assertFalse(game.addPlayer(p4));
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
void init() {
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -49,15 +74,12 @@ class GameTest {
|
||||
@Test
|
||||
void drawLowerBuildingCardByIndex() {
|
||||
}
|
||||
//Ruben
|
||||
@Test
|
||||
void pickOptionalTribeCard() {
|
||||
}
|
||||
//Ruben
|
||||
@Test
|
||||
void pickOptionalBuildingCard() {
|
||||
}
|
||||
//Ruben
|
||||
@Test
|
||||
void noOptionalCard() {
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user