Exemplo n.º 1
0
 public void setMoveable(Moveable moveable) {
   this.moveable = moveable;
   if (moveable != null) {
     moveable.x = x;
     moveable.y = y;
   }
 }
Exemplo n.º 2
0
 @Override
 public Field move(
     Moveable moveable,
     SetterOfPosition setterOfPosition,
     Field target,
     ResourceHolder resourceHolder)
     throws FieldsNotConnectedException, MoveNotPossibleException, NotEnoughResourceException {
   if (!moveable.getPosition().isConnected(target)) {
     throw new FieldsNotConnectedException(moveable.getPosition(), target);
   }
   CanMoveReport canMoveReport = canMove(moveable, target, resourceHolder);
   if (canMoveReport.isPossible()) {
     resourceHolder.pay(movePointCollector.collect(moveable, target).asPayment());
     setterOfPosition.setPosition(target);
     return target;
   } else if (!canMoveReport.canPay()) {
     throw new NotEnoughResourceException(
         movePointCollector.collect(moveable, target).asPayment(),
         resourceHolder.amountOf(MovePoint.class));
   } else if (canMoveReport.isBlocked() || !canMoveReport.isAbleToEnd()) {
     throw new MoveNotPossibleException(canMoveReport);
   } else {
     throw new MoveNotPossibleException("move is not possible - unknown reason");
   }
 }
Exemplo n.º 3
0
  public static void main(String[] args) throws Exception {
    String rt = "\r\n";
    String src =
        "package com.bjsxt.proxy;"
            + rt
            + "public class TankTimeProxy implements Moveable {"
            + rt
            + "    public TankTimeProxy(Moveable t) {"
            + rt
            + "        super();"
            + rt
            + "        this.t = t;"
            + rt
            + "    }"
            + rt
            + "    Moveable t;"
            + rt
            + "    @Override"
            + rt
            + "    public void move() {"
            + rt
            + "        long start = System.currentTimeMillis();"
            + rt
            + "        System.out.println(\"starttime:\" + start);"
            + rt
            + "        t.move();"
            + rt
            + "        long end = System.currentTimeMillis();"
            + rt
            + "        System.out.println(\"time:\" + (end-start));"
            + rt
            + "    }"
            + rt
            + "}";
    String fileName = System.getProperty("user.dir") + "/src/com/bjsxt/proxy/TankTimeProxy.java";
    File f = new File(fileName);
    FileWriter fw = new FileWriter(f);
    fw.write(src);
    fw.flush();
    fw.close();

    // compile
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    StandardJavaFileManager fileMgr = compiler.getStandardFileManager(null, null, null);
    Iterable units = fileMgr.getJavaFileObjects(fileName);
    CompilationTask t = compiler.getTask(null, fileMgr, null, null, null, units);
    t.call();
    fileMgr.close();

    // load into memory and create an instance
    URL[] urls = new URL[] {new URL("file:/" + System.getProperty("user.dir") + "/src")};
    URLClassLoader ul = new URLClassLoader(urls);
    Class c = ul.loadClass("com.bjsxt.proxy.TankTimeProxy");
    System.out.println(c);

    Constructor ctr = c.getConstructor(Moveable.class);
    Moveable m = (Moveable) ctr.newInstance(new Tank());
    m.move();
  }
Exemplo n.º 4
0
  public void draw(Graphics g, int max) {
    if (enterable) {
      float hue = ((float) cost / (float) max);
      if (solution || (moveable != null && moveable.solution)) {
        g.setColor(new Color(Color.HSBtoRGB(1.0f - hue, 1f, 1f)));
      } else {
        g.setColor(new Color(Color.HSBtoRGB(hue, 0.5f, 0.8f)));
      }

      g.fillRect(x * size, y * size, size, size);
    } else {
      g.setColor(Color.BLACK);
      g.fillRect(x * size, y * size, size, size);
    }

    g.setColor(Color.BLACK);
    g.drawRect(x * size, y * size, size, size);

    if (enterable) {
      g.setColor(Color.RED);
      g.drawString(cost + "", (x * size) + (size / 2), (y * size) + (size / 2));
    }

    if (moveable != null) {
      moveable.draw(g, cost);
    }
  }
Exemplo n.º 5
0
 @Override
 public boolean canMove(Moveable moveable, MovePath movePath, ResourceHolder resourceHolder) {
   if (moveable == null || movePath == null || resourceHolder == null) {
     return false;
   }
   Moveable testMoveable = moveable.cloneMoveable();
   ResourceHolder testResourceHolder = resourceHolder.cloneResourceHolder();
   boolean canMove = true;
   for (Field field : movePath.getPathFields()) {
     try {
       testMoveable.move(field, testResourceHolder);
     } catch (Exception e) {
       canMove = false;
       break;
     }
   }
   return canMove;
 }
Exemplo n.º 6
0
 /** @param args */
 public static void main(String[] args) {
   Board cb = new BoardArray();
   List<Moveable> moves;
   Scanner scanner = new Scanner(System.in);
   int from, to;
   while (true) {
     moves = cb.generateLegalMoves();
     System.out.println("Generated " + moves.size() + " moves");
     for (Moveable move : moves) {
       System.out.printf(
           "uk.ac.gla.chessmantis.Move: %d %d\n", move.getFromPosition(), move.getToPosition());
     }
     System.out.print("Enter your move: ");
     from = scanner.nextInt();
     to = scanner.nextInt();
     cb.makeMove(new Move(from, to));
   }
 }
Exemplo n.º 7
0
  // RENDERS THE FACES OF A GEOMETRY, THEN RENDERS ITS CHILDREN
  private void renderGeometry(Geometry geo) {

    tmpMaterial = geo.getMaterial();

    if (geo instanceof Moveable) {
      Moveable m = (Moveable) geo;
      m.renderPrep();
    }

    if (geo.hasVertex()) {
      processFaces(geo);
    }

    for (int i = 0; i < geo.getNumChildren(); i++) {
      Geometry child = geo.getChild(i);
      child.transformByParent(geo);
      renderGeometry(child);
    }
  }
Exemplo n.º 8
0
 @Override
 public CanMoveReport canMove(Moveable moveable, Field target, ResourceHolder resourceHolder) {
   if (moveable == null || target == null || resourceHolder == null) {
     return new CanMoveReportBasic.Builder().buildNull();
   }
   return new CanMoveReportBasic.Builder()
       .setCost(movePointCollector.collect(moveable, target))
       .setMaxPayment(resourceHolder.get(MovePoint.class))
       .setMoveIsBlockedBy(checkMoveBlocks(moveable, target))
       .setMoveIsUnableToEndBy(checkMoveUnableToEnd(moveable, target))
       .setSource(moveable.getPosition())
       .setTarget(target)
       .build();
 }
  public boolean changeOK(Moveable me, Moveable fOld, Moveable fNew, Moveable bNew) {

    // fOld: front veh on old lane;
    // fNew,bNew: front,back vehicle on new lane;

    double gapFront = fNew.position() - me.position() - me.length();
    if (gapFront <= gapMin) {
      return false;
    }
    double gapBack = me.position() - bNew.position() - bNew.length();
    if (gapBack <= gapMin) {
      return false;
    }

    // safety criterion (a>-bsave);
    double bNew_acc = bNew.model().calcAcc(bNew, me);
    if (bNew_acc < -bsave) {
      return false;
    }
    double my_acc = me.model().calcAcc(me, fNew);
    if (my_acc < -bsaveSelf) {
      return false;
    }

    // incentive criterion (always model of BACK vehicle used!!)
    // works also for on-ramp: on-ramp has 1 lane with index 0
    // === LEFT on main road -> strong desired to change =
    // large positive biasRight for lcModel of ramp vehicles

    double my_adv =
        my_acc - me.model().calcAcc(me, fOld) + ((me.lane() == LEFT) ? 1 : -1) * biasRight;

    double others_disadv = bNew.model().calcAcc(bNew, fNew) - bNew_acc;

    if (others_disadv < 0) {
      others_disadv = 0;
    }
    return my_adv - p * others_disadv > db ? true : false;
  }