public void undo(CardGame game) {

        switch (moveType) {
            case FROM_DECK:
                //This sucks a bit
                LinkedList<Card> queueList = (LinkedList<Card>) game.getDeck();
                if (topRow) {
                    List<Card> pile = game.getTopRow().get(boardIndexTo);
                    queueList.add(0, pile.remove(pile.size() - 1));
                } else {
                    List<Card> col = game.getBoard().get(boardIndexTo);
                    queueList.add(0, col.remove(col.size() - 1));
                }
                break;
            case FROM_BOARD:
                List<Card> boardCol = game.getBoard().get(boardIndexFrom);
                if (topRow) {
                    List<Card> pile = game.getTopRow().get(boardIndexTo);
                    boardCol.add(pile.remove(pile.size() - 1));
                } else {
                    //The fun one
                    List<Card> otherCol = game.getBoard().get(boardIndexTo);
                    for (int i = otherCol.size() - numCardsMoved; i < otherCol.size(); ) {
                        boardCol.add(otherCol.remove(i));
                    }
                }
                break;
            case FROM_PILE:
                List<Card> pile = game.getTopRow().get(boardIndexFrom);
                if (topRow) {
                    List<Card> otherPile = game.getTopRow().get(boardIndexTo);
                    pile.add(otherPile.remove(otherPile.size() - 1));
                } else {
                    List<Card> col = game.getBoard().get(boardIndexTo);
                    pile.add(col.remove(col.size() - 1));
                }
                break;
        }
    }