### Question:
AlgorithmOpponentGrand extends AbstractAlgorithmAI { @Override protected Card startGame() { log.debug("OpponentGrand starts Game: " + knowledge.getPlayerPosition()); return playStartGameCard(knowledge.getOwnCards(), knowledge.getTrickCards(), oPlayedCards, oNotOpponentCards, oSituation, knowledge.getDeclarer()); } AlgorithmOpponentGrand(final AlgorithmAI p, final GameType pGameType); @Override CardList discardSkat(final BidEvaluator bidEvaluator); static Card playStartGameCard(final CardList pCards, final CardList pTrickCards,
			final CardList pPlayedCards, final CardList pNotOpponentCards,
			final Situation pSituation, final Player pDeclarer); static Card playForehandCard(final CardList pCards, final CardList pTrickCards,
			final CardList pPlayedCards, final CardList pNotOpponentCards,
			final Situation pSituation, final Player pDeclarer); static Card playMiddlehandCard(final CardList pCards,
			final CardList pTrickCards, final CardList pPlayedCards,
			final CardList pNotOpponentCards, final Situation pSituation, final Player pDeclarer); static Card playRearhandCard(final CardList pCards, final CardList pTrickCards,
			final CardList pPlayedCards, final CardList pNotOpponentCards,
			final Situation pSituation, final Player pPlayerPosition, final Player pDeclarer); static Card getHighValueCard(final CardList pCards, final Situation pSituation,
			final Card pInitialCard); static Card getLowValueCard(final CardList pCards, final Situation pSituation,
			final Card pInitialCard, final CardList pPlayedCards, final CardList pTrickCards);  }### Answer:
@Test public void testOpponentPlayerFollowsJackInGrandGame() { final UnitTestPlayer deterministicPlayer = new UnitTestPlayer(); deterministicPlayer.setCardsToPlay(Lists.newArrayList(Card.SJ)); final AlgorithmAI faultyPlayer = new AlgorithmAI(); final JSkatPlayer helperPlayer = new UnitTestPlayer(); deterministicPlayer.newGame(Player.FOREHAND); faultyPlayer.newGame(Player.MIDDLEHAND); helperPlayer.newGame(Player.REARHAND); final SkatGame skatGame = new SkatGame(TABLE_NAME, GameVariant.STANDARD, deterministicPlayer, faultyPlayer, helperPlayer); skatGame.setView(new UnitTestView()); skatGame.setCardDeck(new CardDeck("SJ DJ CA CT CK CQ C9 C8 C7 SA", "CJ ST SK SQ S9 S8 S7 HA HT HK", "HJ HQ H9 H8 H7 DA DT DK DQ D9", "D8 D7")); skatGame.dealCards(); skatGame.setDeclarer(Player.FOREHAND); final GameAnnouncementFactory announcementFactory = GameAnnouncement.getFactory(); announcementFactory.setGameType(GameType.GRAND); final GameAnnouncement announcement = announcementFactory.getAnnouncement(); skatGame.setGameAnnouncement(announcement); deterministicPlayer.startGame(Player.FOREHAND, announcement); faultyPlayer.startGame(Player.FOREHAND, announcement); helperPlayer.startGame(Player.FOREHAND, announcement); skatGame.setGameState(GameState.TRICK_PLAYING); final SkatGameResult gameResult = skatGame.run(); assertTrue(gameResult.isWon()); assertAlgorithmAIPlayerFollowsJack(skatGame); }