Package de.axxeed.animosy.ai

Source Code of de.axxeed.animosy.ai.MaxDist

/**
*
*/
package de.axxeed.animosy.ai;

import org.apache.log4j.Logger;

import de.axxeed.animosy.model.BoardModel;
import de.axxeed.animosy.model.Link;
import de.axxeed.animosy.model.Manager;
import de.axxeed.animosy.model.Node;

/**
* MaxDist.java
* Created: 15.08.2008 16:45:12
* @author Markus J. Luzius
*
*/
public class MaxDist extends MrXAbstract {
  private static Logger log = Logger.getLogger(MaxDist.class);

    /**This method makes a move for MrX with the maximum distance to the nearest detective
     * @return a random legal Node position for the MrX
   * @see de.axxeed.animosy.ai.MrXInterface#getMove()
     */
  public Node getMove() {
    Node n=Manager.getGame().getBoard().getMrX().getPosition();
    Link[] lk=n.getLinks();
    int noOfNodes=lk.length;
    int[] minDist = new int[noOfNodes];
    int[] sumDist = new int[noOfNodes];
    int minMinDist = 99;
    for(int i=0;i<noOfNodes;i++) {
      log.debug("Checking node "+i+" ("+lk[i].getToNode().getPosition()+") - "+BoardModel.getNode(lk[i].getToNode().getPosition()).getLinks().length);
      minDist[i] = BoardModel.getDistance(lk[i].getToNode().getPosition(), Manager.getGame().getBoard().getDetectives()[0].getPosition().getPosition());
      sumDist[i] = minDist[i];
      log.debug("     Detective 0: "+minDist[i]);
      for(int d=1;d<Manager.getOptions().getNumberOfDetectives();d++) {
        int d2 = BoardModel.getDistance(lk[i].getToNode().getPosition(), Manager.getGame().getBoard().getDetectives()[d].getPosition().getPosition());
        sumDist[i] += d2;
        log.debug("     Detective "+d+": "+d2);
        if(d2<minDist[i]) minDist[i]=d2;
      }
      if(minDist[i]<minMinDist) minMinDist = minDist[i];
      log.debug("     minDist    : "+minDist[i]+" (sumDist="+sumDist[i]+", minMinDist="+minMinDist+")");
    }
    int selectedLink = 0;
    for(int i=1;i<noOfNodes;i++) {
      if(minDist[i]<2 && minDist[selectedLink]>1) continue;
      if(minDist[i]>minDist[selectedLink]+1 || minDist[selectedLink]==0) {
        selectedLink = i;
        continue;
      }
      if(minDist[selectedLink]==1 && minDist[i]>1) {
        selectedLink = i;
        continue;
      }
      if(BoardModel.getNode(lk[i].getToNode().getPosition()).getLinks().length > BoardModel.getNode(lk[selectedLink].getToNode().getPosition()).getLinks().length)
        selectedLink = i;
    }

/*   
    if(minMinDist>1) {
      // detectives are far enough away: maximize the options
      for(int i=1;i<noOfNodes;i++) {
        if(BoardModel.getNode(lk[i].getToNode().getPosition()).getLinks().length > BoardModel.getNode(lk[selectedLink].getToNode().getPosition()).getLinks().length)
          selectedLink = i;
        else if(minDist[i]>minDist[selectedLink] && BoardModel.getNode(lk[i].getToNode().getPosition()).getLinks().length == BoardModel.getNode(lk[selectedLink].getToNode().getPosition()).getLinks().length)
          selectedLink = i;
      }
    }
    else {
      // detectives are close: maximize the distance!
      for(int i=1;i<noOfNodes;i++) {
        if(minDist[i]>minDist[selectedLink])
          selectedLink = i;
        else if(minDist[i]==minDist[selectedLink] && sumDist[i]>sumDist[selectedLink])
          selectedLink = i;
        else if(minDist[i]==minDist[selectedLink] && BoardModel.getNode(lk[i].getToNode().getPosition()).getLinks().length > BoardModel.getNode(lk[selectedLink].getToNode().getPosition()).getLinks().length)
          selectedLink = i;
      }
    }
*/
    log.debug("Selected link: "+lk[selectedLink].getToNode().getPosition());
   
      return lk[selectedLink].getToNode();
  }

}
TOP

Related Classes of de.axxeed.animosy.ai.MaxDist

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.