@Override
    public void run() {
        Player player1 = new Player(2000, 0);
        Player dealer = new Player(0, 1);

        int exit = 0;
        int totalPlayer = 0;
        int totalDealer = 0;
        int moneyBefore = 0;
        ArrayList<Card> initialPlayerHand;
        ArrayList<Card> initialDealerHand;
        Scanner sc = new Scanner(System.in);
        for (int k = 0; k < iterations; k++) {
            try {
                Thread.sleep(retraso);
            } catch (InterruptedException ex) {
                Logger.getLogger(ProjectFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
            exit = 0;
            while (exit == 0) {
                moneyAll = player1.getMoney();
                try {
                    bj = 0;

                    for (int i = 0; i < 2; i++) {
                        player1.getHand().add(deck.getCard());
                        dealer.getHand().add(deck.getCard());
                    }

                    System.out.println("Initial Table: ");
                    printHand(player1, dealer, 0);
                    initialPlayerHand = player1.getHand();
                    initialDealerHand = player1.getHand();


                    System.out.println("Initial Table uncovered (Still covered for player)");
                    printHand(player1, dealer, 1);

                    totalPlayer = play(player1, dealer, this.strategy);
                    makeBet(player1, amount);
                    if (totalPlayer > 21) {
                        totalDealer = Card.sumaCartas(dealer.getHand());
                    } else {
                        totalDealer = play(dealer, player1, 0);
                    }
                    System.out.println("Final Table: ");
                    printHand(player1, dealer, 1);
                    moneyBefore = player1.getMoney();
                    printResult(totalPlayer, totalDealer, player1);
                    System.out.println("Blackjack = " + bj);
                    System.out.println("Player´s Money Before: " + moneyBefore);
                    System.out.println("Winnings: " + (player1.getMoney() - moneyBefore));
                    System.out.println("Player´s Money: " + player1.getMoney());
                    System.out.println("Deck Size: " + deck.getCards().size());
                    System.out.println("DeckYard Size: " + deck.getDeckYard().size());
                    System.out.println("________________________________________________________");
                    System.out.println();

                    handValues.add(totalPlayer);
                    player1.getHand().clear();
                    dealer.getHand().clear();
                    totalGames++;
                } catch (java.lang.IndexOutOfBoundsException e) {
                    bet = 0;
                    deck.shuffDeck();
                    player1.getHand().clear();
                    dealer.getHand().clear();
                    this.log.append("Iteraccion Numero: ").append(k + 1).append("\n");
                    this.log.append("Dinero del jugador: ").append(moneyAll).append("\n");
                    this.log.append("Player Wins: ").append(playerWins).append("\n");
                    this.log.append("Dealer Wins: ").append(dealerWins).append("\n");
                    this.log.append("Draws: ").append(draws).append("\n");
                    this.log.append("Juegos Hasta el Momento: ").append(totalGames).append("\n");
                    this.log.append("Porcentaje Volado: ").append(((double) blowUpTimes / (double) totalGames) * 100).append("\n");
                    this.log.append("Porcentaje Wins: ").append(((double) playerWins / (double) totalGames) * 100).append("\n");
                    if (handValues.size() > 0) {
                        this.log.append("Mano promedio: ").append(arrayAverage(handValues)).append("\n\n\n");
                    }
                    double percentaje = ((double) (k + 1) / (double) iterations) * 100;
                    pj.setLogSimulation3(log.toString());
                    pj.setProgressBar3((int) percentaje);
                    insertPieChart(0);
                    insertPieChart(1);
                    insertBarChart();
                    insertLineChart(k + 1);
                    exit = 1;
                }
            }
        }
        if (bet != 0) {
            moneyAll += bet;
        }
        System.out.println("Resultados Finales: ");
        System.out.println("Dinero: " + moneyAll);
        System.out.println("Veces Volado: " + blowUpTimes);
        System.out.println("Player Wins: " + playerWins);
        System.out.println("Dealer Wins: " + dealerWins);
        System.out.println("Draws: " + draws);
        System.out.println("Juegos Totales: " + totalGames);
        if (handValues.size() > 0) {
            System.out.println("Mano promedio: " + arrayAverage(handValues));
        }
        System.out.println("Porcentaje volado: " + ((double) blowUpTimes / (double) totalGames) * 100);
        System.out.println("Porcentaje Wins: " + ((double) playerWins / (double) totalGames) * 100);
    }