| [valid,C_A_B,Box]=Update_Move(Xnew,Ynew,SXnew,SYnew,C_A_B,Box,turn)
|
function [valid,C_A_B,Box]=Update_Move(Xnew,Ynew,SXnew,SYnew,C_A_B,Box,turn)
valid=0;
if Box(Xnew,Ynew)~=1, return; end%safe side check
%--------------------------------------------------------------------------
% Corners
if not(Xnew==2 & Ynew==2)
if (SXnew==2 | SYnew==2)
flag=0;
if (C_A_B(SXnew,SYnew) < C_A_B(Xnew,Ynew)),
flag=1; valid=1;
[C_A_B,Box]=Condition(Xnew,Ynew,SXnew,SYnew,C_A_B,Box);
end
if mod(turn,2)==0
Board(C_A_B,Box);
pause(1.25);
end
%connected move
if flag==1,
row=SXnew-Xnew; column=SYnew-Ynew;
Xnew=SXnew; Ynew=SYnew;
SXnew=Xnew+row; SYnew=Ynew+column;
valid=1;
end
end
end
%--------------------------------------------------------------------------
% Special case i.e., clicking at empty step
if Box(SXnew,SYnew)==0
if ((2*SXnew-Xnew>0 & 2*SYnew-Ynew>0) & (2*SXnew-Xnew<4 & 2*SYnew-Ynew<4))
if Box(2*SXnew-Xnew,2*SYnew-Ynew)==1
C_A_B(SXnew,SYnew)=C_A_B(Xnew,Ynew);
Box(SXnew,SYnew)=Box(Xnew,Ynew);
row=Xnew;column=Ynew;
Xnew=SXnew;Ynew=SYnew;
SXnew=2*SXnew-row;SYnew=2*SYnew-column;
C_A_B(row,column)=0;
Box(row,column)=0;
valid=1;
end
end
end
%--------------------------------------------------------------------------
if valid~=1
if Box(SXnew,SYnew)~=1, return; end
end
%--------------------------------------------------------------------------
% SubCenter
if xor(Xnew==2,Ynew==2)
if (Xnew==2 & SXnew~=2), valid=1; end
if (Ynew==2 & SYnew~=2), valid=1; end
end
%--------------------------------------------------------------------------
% Center
if (Xnew==2 & Ynew==2)
if xor(SXnew==2,SYnew==2), valid=1; end
end
%--------------------------------------------------------------------------
if (valid==1)
[C_A_B,Box]=Condition(Xnew,Ynew,SXnew,SYnew,C_A_B,Box);
end
%--------------------------------------------------------------------------
|
|