| Code: | function [dRow,dCol,action,mark] = solver( ...
mainMap,foodMap,myAntMap,opAntMap, ...
myScentMap,opScentMap,myDeathMap,opDeathMap)
if opAntMap(3,3)>0
action=-1;
dRow=0; dCol=0;
vers_nid=1;
elseif mainMap(3,3)==1
[dRow,dCol] = aller_vers_sucre(mainMap,foodMap,myAntMap,opAntMap,myScentMap);
action = 0;
vers_nid=0;
elseif foodMap(3,3)>0
[dRow,dCol] = aller_vers_nid(mainMap,myScentMap);
action = 1;
vers_nid=1;
else
[dRow,dCol] = aller_vers_sucre(mainMap,foodMap,myAntMap,opAntMap,myScentMap);
action = 0;
vers_nid=0;
end
mark = marquer_case(mainMap,myScentMap,foodMap,vers_nid,dRow,dCol);
function [dRow,dCol] = aller_vers_nid(mainMap,myScentMap)
[a,b]=find(mainMap==1,1);
if ~isempty(a)
[dRow,dCol] = aller_vers_case(a,b,mainMap);
else
myScentMap(3,3)=0;
if sum(myScentMap(:))==0
[dRow,dCol] = aller_vers_case(floor(rand*(5-eps))+1,floor(rand*(5-eps))+1,mainMap);
else
[a,b]=max(myScentMap(:));
a=mod(b-1,5)+1;
b=floor((b-1)/5)+1;
[dRow,dCol] = aller_vers_case(a,b,mainMap);
end
end
function [dRow,dCol] = aller_vers_sucre(mainMap,foodMap,myAntMap,opAntMap,myScentMap)
[a,b]=find((foodMap-abs(myAntMap-opAntMap)>0)&(mainMap~=1));
if ~isempty(a)
[mini,ind]=min((a-3).^2+(b-3).^2);
[dRow,dCol] = aller_vers_case(a(ind),b(ind),mainMap);
else
myScentMap(3,3)=Inf;
ind=find(myScentMap==min(myScentMap(:)));
ind=ind(1+floor(rand*length(ind)));
[dRow,dCol] = aller_vers_case(1+mod(ind-1,5),1+floor((ind-1)/5),mainMap);
end
function [dRow,dCol] = aller_vers_case(a,b,mainMap)
if a<3
dRow = -1;
elseif a==3
dRow = 0;
else
dRow = 1;
end
if b<3
dCol = -1;
elseif b==3
dCol = 0;
else
dCol = 1;
end
mainMap(3,3)=NaN;
while isnan(mainMap(3+dRow,3+dCol))
dRow=floor(3*rand)-1;
dCol=floor(3*rand)-1;
end
function mark = marquer_case(mainMap,myScentMap,foodMap,vers_nid,dRow,dCol)
if ~isempty(find(mainMap(2:4,2:4)==1,1))
mark = 100;
elseif sum(myScentMap(:)>91) && (sum(foodMap(:))<3)
mark = 10*(myScentMap(3,3)<90);
else
mark = 0;
end |