@FXML private void handleDraw() { if (this.mainApp.getiGameType() == null) { displayWarning("you must select a game to play from the menu"); return; } iCardDrawn++; iDrawCount++; ImageView imView = null; eGameState = eGameState.PlayOfGame; // Disable the button in case of double-click SetGameControls(eGameState.DrawingCard); // Create the parent transition SequentialTransition tranDealCards = new SequentialTransition(); // Figure the action based on the game, state of game Action act = new Action(gme, iCardDrawnPlayer, iCardDrawnCommon, iDrawCount); if (act.geteDrawAction() == eDrawAction.DrawPlayer) { // Draw a card for each player seated for (int iDraw = 0; iDraw < act.getiCardDrawn(); iDraw++) { iCardDrawnPlayer++; for (Player p : mainApp.GetSeatedPlayers()) { Card c = gme.getGameDeck().drawFromDeck(); HBox PlayerCardBox = null; switch (p.getiPlayerPosition()) { case 1: PlayerCardBox = hBoxP1Cards; imView = imgTransCardP1; break; case 2: PlayerCardBox = hBoxP2Cards; imView = imgTransCardP2; break; case 3: PlayerCardBox = hBoxP3Cards; imView = imgTransCardP3; break; case 4: PlayerCardBox = hBoxP4Cards; imView = imgTransCardP4; break; } gme.FindPlayerGame(gme, p).addCardToHand(c); tranDealCards .getChildren() .add(CalculateTransition(c, PlayerCardBox, imView, iCardDrawnPlayer)); } } } else if (act.geteDrawAction() == eDrawAction.DrawCommon) { for (int iDraw = 0; iDraw < act.getiCardDrawn(); iDraw++) { iCardDrawnCommon++; imView = imgTransCardCommon; Card c = gme.getGameDeck().drawFromDeck(); gme.FindCommonHand(gme).addCardToHand(c); tranDealCards .getChildren() .add(CalculateTransition(c, HboxCommunityCards, imView, iCardDrawnCommon)); } } // tranDealCards is the master transition... it has deals for every card // to every player. Play it. tranDealCards.play(); // If bEvalHand is true, it's time to evaluate the Hand... if (act.isbEvaluateHand()) { ArrayList<GamePlayPlayerHand> AllPlayersHands = new ArrayList<GamePlayPlayerHand>(); ArrayList<Hand> BestPlayerHands = new ArrayList<Hand>(); HashMap hsPlayerHand = new HashMap(); for (Player p : mainApp.GetSeatedPlayers()) { GamePlayPlayerHand GPPH = gme.FindPlayerGame(gme, p); Hand PlayerHand = GPPH.getHand(); GamePlayPlayerHand GPCH = gme.FindCommonHand(gme); ArrayList<Hand> AllHands = Hand.ListHands(GPPH.getHand(), GPCH.getHand(), GPPH.getGame()); Hand hBestHand = Hand.PickBestHand(AllHands); GPPH.setBestHand(hBestHand); hsPlayerHand.put(hBestHand, GPPH.getPlayer()); BestPlayerHands.add(hBestHand); } Hand WinningHand = Hand.PickBestHand(BestPlayerHands); Player WinningPlayer = (Player) hsPlayerHand.get(WinningHand); System.out.println( "Winning Player Position: " + WinningPlayer.getiPlayerPosition() + "(" + WinningPlayer.getPlayerName() + ")"); displayWinner( "Winning Player Position: " + WinningPlayer.getiPlayerPosition() + " (" + WinningPlayer.getPlayerName() + ")"); SetGameControls(eGameState.EndOfGame); } else { if (iCardDrawnPlayer + iCardDrawnCommon + 2 >= gme.getRule().getTotalCardsToDraw()) { for (Player p : mainApp.GetSeatedPlayers()) { Hand hPlayer = gme.FindPlayerGame(gme, p).getHand(); for (int a = hPlayer.getCards().size(); a < gme.getRule().GetPlayerNumberOfCards(); a++) { hPlayer.AddCardToHand(new Card(eSuit.JOKER, eRank.JOKER, 0)); } Hand hCommon = gme.FindCommonHand(gme).getHand(); if (hCommon.getCards() == null) { for (int a = 0; a < gme.getRule().GetCommunityCardsCount(); a++) { hCommon.AddCardToHand(new Card(eSuit.JOKER, eRank.JOKER, 0)); } } else { for (int a = hCommon.getCards().size(); a < gme.getRule().GetCommunityCardsCount(); a++) { hCommon.AddCardToHand(new Card(eSuit.JOKER, eRank.JOKER, 0)); } } ArrayList<Hand> AllHands = Hand.ListHands(hPlayer, hCommon, gme); System.out.println(AllHands.get(0).getHandStrength()); } } // Re-enable the draw button SetGameControls(eGameState); } }