| Code: | function [dRow,dCol,action,mark] = solver(mainMap,foodMap,myAntMap,opAntMap, ...
myScentMap,opScentMap,myDeathMap,opDeathMap)
%
if sum(sum(opAntMap(2:4,2:4)))>0
% opponent close by!-> attack, (something run [e.g. if rand>0.05])
dRow=0;
dCol=0;
action=-1;
mark=0;
elseif foodMap(3,3)>0 %sugar below me -> good!
if mainMap(3,3)==1 %hole below me -> move away, mark
dRow = round(rand*2) - 1;
dCol = round(rand*2) - 1;
action = 0;
mark = 100;
elseif max(max(myScentMap(2:4,2:4)))>0 % any scent marks in direct sight -> move towards highest marker, refresh mark
[scentX, scentY]=find(myScentMap(2:4,2:4)==max(max(myScentMap(2:4,2:4))));
dRow=scentX(1)-2;
dCol=scentY(1)-2;
action = 1;
mark=0; % min(100,max(max(myScentMap(2:4,2:4)))-1);
else %tranport sugar randomly, hoping for new signs
dRow = round(rand*2) - 1;
dCol = round(rand*2) - 1;
action = 1;
mark = 0;
end
elseif max(max(foodMap(2:4,2:4)))>0 % any free (=/ at home) sugar in sight -> move towards next sugar, mark decreasing
[scentX, scentY]=find(foodMap(2:4,2:4)==max(max(foodMap(2:4,2:4))));
dRow=scentX(1)-2;
dCol=scentY(1)-2;
action = 1;
mark=min(100,round(max(max(myScentMap(2:4,2:4)))/2));
elseif mainMap(3,3)==1 %hole below me -> move away, mark
dRow = round(rand*2) - 1;
dCol = round(rand*2) - 1;
action = 0;
mark = 100;
elseif max(max(myScentMap(2:4,2:4)))>0 % scent marks in sight-> move away from highest mark, mark slightly lower
[scentX, scentY]=find(myScentMap(2:4,2:4)==max(max(myScentMap(2:4,2:4))));
dRow=2-scentX(1);
dCol=2-scentY(1);
action = 0;
mark=min(100,round(max(max(myScentMap(2:4,2:4)))/2));
else % no indications for orientation -> move randomly and no mark, hoping for new signs.
dRow = round(rand*2) - 1;
dCol = round(rand*2) - 1;
action = 0;
mark = 0;
end
end |