function [Xnew Ynew]=AI(Clocky)
global Level;
Xnew=0; Ynew=0;
%--------------------------------------------------------------------------
%Connecting for '1'
[Xnew Ynew]=Check_Order(Clocky,1,0);
%Blocking for '1'
if Level==1,
[Xnew Ynew]=Check_Order(Clocky,1,1);
end
%Connecting for '2'
[Xnew Ynew]=Check_Order(Clocky,2,0);
%Blocking for '2'
if Level==1,
[Xnew Ynew]=Check_Order(Clocky,2,1);
end
%--------------------------------------------------------------------------
%Gaining 'CPU' Medals n Blocking 'UUU' Medals wrt Score
if Level==1,
for ii=1:12,
for jj=1:4,
if Clocky(ii,jj)==5,
Clocky(ii,jj)=1;
else
continue;
end
Max_Medal=0;
Old_Medals=Check_Medal(Clocky,1);
for kk=1:12,
for ll=1:4,
if Clocky(kk,ll)==5,
Clocky(kk,ll)=1;
else
continue;
end
New_Medals=Check_Medal(Clocky,1);
Clocky(kk,ll)=5;
if length(New_Medals)>length(Old_Medals),
N=sum(New_Medals)-sum(Old_Medals);
if N>Max_Medal,
Max_Medal=N;
Xnew=kk; Ynew=ll;
end
end
end
end
Clocky(ii,jj)=5;
end
end
end
%--------------------------------------------------------------------------
%Special Cases 'Semi-Circular' n 'Circular'
%(possibility of multiple Medals. Hence, need to be block from both the ends)
%Semi-Circular
%Gaining Medal
for jj=1:4,
for ii=1:12,
C=[Clocky(ii,jj) Clocky(Lin2Cir(ii+1),jj) Clocky(Lin2Cir(ii+2),jj) Clocky(Lin2Cir(ii+3),jj)];
if length(find(C==0))==2,
[X Y]=find(C==5,1);
if (~isempty(X) && ~isempty(Y)),
switch Y
case 1
Xnew=ii; Ynew=jj;
case 2
Xnew=Lin2Cir(ii+1); Ynew=jj;
case 3
Xnew=Lin2Cir(ii+2); Ynew=jj;
case 4
Xnew=Lin2Cir(ii+3); Ynew=jj;
end
end
end
end
end
%Blocking Opponent
for jj=1:4,
for ii=1:12,
C=[Clocky(ii,jj) Clocky(Lin2Cir(ii+1),jj) Clocky(Lin2Cir(ii+2),jj) Clocky(Lin2Cir(ii+3),jj)];
if length(find(C==1))==2,
[X Y]=find(C==5,1);
if (~isempty(X) && ~isempty(Y)),
switch Y
case 1
Xnew=ii; Ynew=jj;
case 2
Xnew=Lin2Cir(ii+1); Ynew=jj;
case 3
Xnew=Lin2Cir(ii+2); Ynew=jj;
case 4
Xnew=Lin2Cir(ii+3); Ynew=jj;
end
end
end
end
end
%Circular
%Gaining Medal
for jj=1:4,
for ii=1:12,
C=[Clocky(ii,jj) Clocky(Lin2Cir(ii+2),jj) Clocky(Lin2Cir(ii+4),jj) Clocky(Lin2Cir(ii+6),jj)];
if length(find(C==0))==2,
[X Y]=find(C==5,1);
if (~isempty(X) && ~isempty(Y)),
switch Y
case 1
Xnew=ii; Ynew=jj;
case 2
Xnew=Lin2Cir(ii+2); Ynew=jj;
case 3
Xnew=Lin2Cir(ii+4); Ynew=jj;
case 4
Xnew=Lin2Cir(ii+6); Ynew=jj;
end
end
end
end
end
%Blocking Opponent
for jj=1:4,
for ii=1:12,
C=[Clocky(ii,jj) Clocky(Lin2Cir(ii+2),jj) Clocky(Lin2Cir(ii+4),jj) Clocky(Lin2Cir(ii+6),jj)];
if length(find(C==1))==2,
[X Y]=find(C==5,1);
if (~isempty(X) && ~isempty(Y)),
switch Y
case 1
Xnew=ii; Ynew=jj;
case 2
Xnew=Lin2Cir(ii+2); Ynew=jj;
case 3
Xnew=Lin2Cir(ii+4); Ynew=jj;
case 4
Xnew=Lin2Cir(ii+6); Ynew=jj;
end
end
end
end
end
%--------------------------------------------------------------------------
%Gaining 'CPU' Medals wrt Score
Max_Medal=0;
Old_Medals=Check_Medal(Clocky,0);
for ii=1:12,
for jj=1:4,
if Clocky(ii,jj)==5,
Clocky(ii,jj)=0;
else
continue;
end
New_Medals=Check_Medal(Clocky,0);
Clocky(ii,jj)=5;
if length(New_Medals)>length(Old_Medals),
N=sum(New_Medals)-sum(Old_Medals);
if N>Max_Medal,
Max_Medal=N;
Xnew=ii; Ynew=jj;
end
end
end
end
%--------------------------------------------------------------------------
%Blocking 'UUU' Medals wrt Score
Max_Medal=0;
Old_Medals=Check_Medal(Clocky,1);
for ii=1:12,
for jj=1:4,
if Clocky(ii,jj)==5,
Clocky(ii,jj)=1;
else
continue;
end
New_Medals=Check_Medal(Clocky,1);
Clocky(ii,jj)=5;
if length(New_Medals)>length(Old_Medals),
N=sum(New_Medals)-sum(Old_Medals);
if N>Max_Medal,
Max_Medal=N;
Xnew=ii; Ynew=jj;
end
end
end
end
%--------------------------------------------------------------------------
%Random
while(Xnew==0 && Ynew==0),
Xnew=1+mod(fix(100*rand(1,1)),12);
Ynew=1+mod(fix(100*rand(1,1)),4);
if Clocky(Xnew,Ynew)==5, break; end
end
%--------------------------------------------------------------------------