In regard to setting a limit, and I apologize if this is repeat information, I received the best advice when my kids were young and I did the following...
I set a limit of $50 on each of my kids cards. I told them whatever amount they had left at the end of the cruise they would get in cash to spend on whatever they wanted back home.
My then 9 year old spent $35 in the arcade and on candy and my then 17 year old spent $5 buying a girl a drink:)
They both had to make wise decisions... was it worth it to spend the money in the moment or wait? I actually set aside more than that just in case:) Neither one went without anything they wanted:)