public void setMoveable(Moveable moveable) { this.moveable = moveable; if (moveable != null) { moveable.x = x; moveable.y = y; } }
@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"); } }
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(); }
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); } }
@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; }
/** @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)); } }
// 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); } }
@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; }