| Code: | function [dRow,dCol,action,mark] = solver(mainMap,foodMap,myAntMap,opAntMap,myScentMap,opScentMap,myDeathMap,opDeathMap)
try
dx = ones(5,5); dx(1:2,:)=-1; dx(3,:)=0;
dy = ones(5,5); dy(:,1:2)=-1; dy(:,3)=0;
attack = false;
if sum(sum(opAntMap(2:4,2:4)))==0
foodMap(mainMap==1)=0;
antsthere = myAntMap;
antsthere(foodMap==0)=0;
if foodMap(3,3)>0
qqq=find(mainMap==1);
if isempty(qqq)
qqq = foodMap(:) - myScentMap(:) - myAntMap(:);
qqq(13)=99999999;
[a,b]=sort(qqq);
m = mean(qqq);
b = b(a<=m);
b = b(randint(1,1,length(b))+1);
dRow = dx(b); dCol = dy(b);
mark = 0;
else
b = min(qqq(:));
dRow = dx(b); dCol = dy(b);
mark = 50;
end
action = 1;
elseif sum(sum(foodMap))>0
d1 = 2*ones(5,5); d1(2:4,2:4)=1; d1(3,3)=0;
d2 = (foodMap>antsthere).*d1;
d3 = find(d2>0);
if isempty(d3)
qqq = myScentMap + myAntMap;
qqq = qqq(:);
[a,b]=sort(qqq);
m = mean(qqq);
b = b(a<=m);
b = b(randint(1,1,length(b))+1);
dRow = dx(b); dCol = dy(b);
action = 0;
mark = 20;
else
b = d3(randint(1,1,length(d3))+1);
dRow = dx(b); dCol = dy(b);
action = 0;
mark = 10;
end
else
qqq = myScentMap;
qqq = qqq(:);
[a,b]=sort(qqq);
m = mean(qqq);
b = b(a<=m);
b = b(~isnan(mainMap(b)));
if isempty(b)
b = randint(1,1,25)+1;
dRow = dx(b); dCol = dy(b);
else
b = b(randint(1,1,length(b))+1);
dRow = dx(b); dCol = dy(b);
end
action = 0;
mark = 20;
end
else
attack = true;
b = 13;
dRow = dx(b); dCol = dy(b);
action = -1;
mark = 10;
end
rr = dRow + 3;
cc = dCol + 3;
if ~attack
while (isnan(mainMap(rr,cc)) || b==13)
b = randint(1,1,25)+1;
dRow = dx(b); dCol = dy(b);
rr = dRow + 3;
cc = dCol + 3;
end
end
catch
dRow = round(rand*2)-1;
dCol = round(rand*2)-1;
action = 1;
mark = 0;
end
end |