public void shufflePerfectly() {
         /*
          * Split into 2
          * Shuffle perfectly
          * Top card on top, bot card on bot
          */

        ArrayList<Card> topDeck = new ArrayList<Card>(), botDeck = new ArrayList<Card>();
        for (int i = cards.size()-1; i >= 0; i--) {
            Card shuffleCard = null;
            try {
                shuffleCard = cards.get(i);
            }
            catch (Exception e) {
                // If card does not exist
            }
            if (shuffleCard != null) {
                if (i >= cards.size() / 2) {
                    topDeck.add(shuffleCard);
                }
                else {
                    botDeck.add(shuffleCard);
                }
            }
        }
        int len;
        boolean equalStacks = false;
        Card extraCard = null;

        if (topDeck.size() == botDeck.size()) {
            equalStacks = true;
            len = topDeck.size();
        }
        else {
            if (topDeck.size()>botDeck.size()) {
                len = botDeck.size();
                extraCard = topDeck.get(topDeck.size()-1);
            }
            else {
                len = topDeck.size();
                extraCard = botDeck.get(botDeck.size()-1);
            }
        }

        ArrayList<Card> shuffledDeck = new ArrayList<Card>();

        for (int i = len-1; i >= 0; i--) {
            // Shuffle the cards
            shuffledDeck.add(botDeck.get(i));
            shuffledDeck.add(topDeck.get(i));

        }
        if (!equalStacks) {
            shuffledDeck.add(extraCard);
        }

        ArrayList<Card> newDeck = new ArrayList<Card>();

        for (int i = 0; i < shuffledDeck.size(); i++) {
            newDeck.add(shuffledDeck.get(i));
        }
        cards = newDeck;
    }