The syntax
set(imshow(card(53)),'buttonDownFcn',@flip);
causes flip to be called with two arguments, sometimes called hObject and eventData. Those two arguments are supplied automatically by MATLAB.
Your line
function flip(played1,Pflip,played2,Cflip,hObject,eventData)
shows that you expect flip to be called with 6 parameters, with hObject and eventData the last two.
You should be using
set(imshow(card(53)),'buttonDownFcn',@(hObject,eventData) flip(played1, Pflip, played2, Cflip, hObject, eventData) );
if you want those arguments to be passed to flip in that order.
Warning: if you do use
set(imshow(card(53)),'buttonDownFcn',@(hObject,eventData) flip(played1, Pflip, played2, Cflip, hObject, eventData) );
then the played1, Pflip, played2, and Cflip that are passed to flip will be the ones that existed at the time the set() call was made, and they will not be updated with any later changes. That is probably want what you want.
I suggest you should be considering using shared variables and nested functions.
