function [dRow,dCol,action,mark] = chintweak(mainMap,foodMap,myAntMap,opAntMap, ... myScentMap,opScentMap,myDeathMap,opDeathMap) % Commented by Alan Chalker % PLEASE LEAVE THE COMMENTS IN IF YOU REUSE! % % Setup obstacle mask mask = isnan(mainMap); % Find existing obstacles %K = [7 7 7 9 9 9 17 17 17 19 19 19 8 12 14 18]; % Indexes for just immediate neighbours L = [1 2 6 4 5 10 16 21 22 20 24 25 3 11 15 23]; % Mapping index to outer neighbours Y = [7 8 9 12 13 14 17 18 19]; % Mask for immediate neighbours mask(L(mask([7 7 7 9 9 9 17 17 17 19 19 19 8 12 14 18]))) = true; %Fill in outer neighbours if inner neighbour is an obstacle mainMap(mask) = nan; % Apply mask to map % Default Actions are no actions. dRow = 0; dCol = 0; % Setup scent trail to be decreasing further from bases myScent = myScentMap(13); H = mainMap == 1; if H(13) mark = 100; else mark = floor((max(myScentMap(Y))-myScent-1)/myAntMap(13)); end myScentMap(H) = inf; %mask bases as maximium scent %% Fight Mode if (any(opAntMap(Y))) if (sum(myAntMap(:))<8)||(rand < 0.3) action = -1; return else if sum(opAntMap(Y))>19 action = -1; return end end mainMap(opAntMap > 0 & opAntMap <8) = nan; end action = 0; %% Food Search % look for food in view foodMap(H) = 0; netFood = foodMap-myAntMap; netFood(mask|H) = 0; netFood = netFood > 0; myFood = foodMap(13); if (myFood > 0)&&(rand > (myAntMap(13)-myFood)/myAntMap(13)) lowFood = netFood&(myScentMap<myScent); if ~any(lowFood(:))||((myFood > 1)&&(rand > sqrt(1/myFood))) action = 1; myScentMap(mask) = -inf; myScentMap(13) = -inf; maxScent = max(myScentMap(:)); if (maxScent == 0) mainMap(13) = nan; [r,c] = find(~isnan(mainMap(2:4,2:4))); pick = ceil(rand*numel(r)); dRow = sign(r(pick)-2); dCol = sign(c(pick)-2); else [r,c] = find(myScentMap==maxScent); dRow = sign(r(1)-3); dCol = sign(c(1)-3); end else lowFoodPositive = lowFood > 0; [r,c] = find(lowFoodPositive&(myScentMap==min(myScentMap(lowFoodPositive)))); dRow = sign(r(1)-3); dCol = sign(c(1)-3); end elseif any(netFood(:) > 0) [r,c] = find(netFood&(myScentMap==min(myScentMap(netFood)))); dRow = sign(r(1)-3); dCol = sign(c(1)-3); else if rand>.82 mainMap(13) = nan; [r,c] = find(~isnan(mainMap(2:4,2:4))); if isempty(r) action = -1; dRow=0; dCol=0; return; end; pick = ceil(rand*numel(r)); dRow = sign(r(pick)-2); dCol = sign(c(pick)-2); else myScentMap(mask) = inf; myScentMap(13) = inf; [r,c] = find(myScentMap==min(myScentMap(:))); pick = ceil(rand*numel(r)); dRow = sign(r(pick)-3); dCol = sign(c(pick)-3); end end end