diff --git a/Projektgruppe_175/src/game/AI.java b/Projektgruppe_175/src/game/AI.java index af3cda9..ec355e4 100644 --- a/Projektgruppe_175/src/game/AI.java +++ b/Projektgruppe_175/src/game/AI.java @@ -3,6 +3,15 @@ package game; import java.awt.Color; import java.util.Random; +import java.util.ArrayList; +import java.util.List; + +import base.Edge; +import game.map.Castle; +import game.map.GameMap; +import gui.components.JokerPanel.JokerTypes; + + public abstract class AI extends Player { private AIThread aiThread; @@ -40,6 +49,62 @@ public abstract class AI extends Player { Thread.sleep(10); } } + + protected void playTroopsJoker() { + if(getJokers()[0] == JokerTypes.ADD_TROOPS_USED) + return; + + this.addTroops(5); + this.setJoker(0, JokerTypes.ADD_TROOPS_USED); + } + + + protected void playScareJoker(Castle scared, Game game) { + if(getJokers()[1] == JokerTypes.SCARE_TROOPS_USED) + return; + + // Verscheuchen-Joker + if(scared == null) + return; + + GameMap map = game.getMap(); + List> castleEdges = map.getEdges(); + List adjacentCastles = new ArrayList<>(); + for(Edge edge : castleEdges) { + if(edge.getNodeA().getValue().equals(scared)) { + if(edge.getNodeB().getValue().getOwner() != game.getCurrentPlayer() && !edge.getNodeB().getValue().equals(scared)) { + adjacentCastles.add(edge.getNodeB().getValue()); + } + } else if(edge.getNodeB().getValue().equals(scared)) { + if(edge.getNodeA().getValue().getOwner() != game.getCurrentPlayer() && !edge.getNodeA().getValue().equals(scared)) { + adjacentCastles.add(edge.getNodeA().getValue()); + } + } + } + + int troopsToDistribute = scared.getTroopCount() - 1; + System.out.println(troopsToDistribute); + scared.removeTroops(troopsToDistribute); + System.out.println(adjacentCastles.size()); + for(Castle c : adjacentCastles) { + System.out.print(c.getName() + " "); + } + + + if(adjacentCastles.isEmpty()) { + return; + } + + Random random = new Random(); + for(int i = 0; i < troopsToDistribute; i++) { + int castleNumber = random.nextInt(adjacentCastles.size()); + System.out.print(castleNumber + " "); + adjacentCastles.get(castleNumber).addTroops(1); + } + + this.setJoker(1, JokerTypes.SCARE_TROOPS_USED); + return; + } private class AIThread extends Thread {