From: Stefan F. <ste...@us...> - 2010-04-15 21:46:36
|
Update of /cvsroot/rails/18xx/rails/algorithms In directory sfp-cvsdas-4.v30.ch3.sourceforge.com:/tmp/cvs-serv14783/rails/algorithms Modified Files: NetworkTrain.java RevenueCalculator.java RevenueAdapter.java Added Files: RevenueListener.java Log Message: RevenueCalculation feeds into ORPanel implementation Index: RevenueCalculator.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/algorithms/RevenueCalculator.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** RevenueCalculator.java 13 Apr 2010 23:21:12 -0000 1.2 --- RevenueCalculator.java 15 Apr 2010 21:46:28 -0000 1.3 *************** *** 1,4 **** --- 1,5 ---- package rails.algorithms; + import java.awt.EventQueue; import java.util.Arrays; *************** *** 56,59 **** --- 57,63 ---- private int[] maxTrainRevenues; + // revenue listener + private RevenueListener revenueListener; + protected static Logger log = *************** *** 129,132 **** --- 133,140 ---- return currentBestRun; } + + void addRevenueListener(RevenueListener listener) { + this.revenueListener = listener; + } int calculateRevenue(int startTrain, int finalTrain) { *************** *** 406,409 **** --- 414,424 ---- } log.info("RC: Found better run with " + totalValue); + // inform revenue listener + EventQueue.invokeLater( + new Runnable() { + public void run() { + revenueListener.revenueUpdate(currentBestValue, false); + } + }); } } *************** *** 455,458 **** --- 470,474 ---- + @Override public String toString() { --- NEW FILE: RevenueListener.java --- package rails.algorithms; public interface RevenueListener { public void revenueUpdate(int revenue, boolean finalResult); } Index: NetworkTrain.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/algorithms/NetworkTrain.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** NetworkTrain.java 13 Apr 2010 23:21:12 -0000 1.2 --- NetworkTrain.java 15 Apr 2010 21:46:28 -0000 1.3 *************** *** 3,8 **** public final class NetworkTrain { ! private final int cities; ! private final int towns; private final boolean townsCostNothing; private final int multiplyCities; --- 3,8 ---- public final class NetworkTrain { ! private int cities; ! private int towns; private final boolean townsCostNothing; private final int multiplyCities; *************** *** 28,35 **** --- 28,43 ---- } + void setCities(int cities){ + this.cities = cities; + } + int getTowns() { return towns; } + void setTowns(int towns){ + this.towns = towns; + } + int calculateRevenue(int[] cityValues, int[] townValues) { return cityValues[cities] * multiplyCities + townValues[towns] * multiplyTowns; Index: RevenueAdapter.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/algorithms/RevenueAdapter.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** RevenueAdapter.java 13 Apr 2010 23:21:12 -0000 1.2 --- RevenueAdapter.java 15 Apr 2010 21:46:28 -0000 1.3 *************** *** 8,19 **** import java.util.Map; import org.jgrapht.Graph; import org.jgrapht.Graphs; import rails.game.PhaseI; import rails.game.PublicCompanyI; import rails.game.TrainI; ! public class RevenueAdapter { private Graph<NetworkVertex, NetworkEdge> graph; --- 8,24 ---- import java.util.Map; + import javax.swing.SwingUtilities; + import org.jgrapht.Graph; import org.jgrapht.Graphs; + import rails.game.GameManager; import rails.game.PhaseI; import rails.game.PublicCompanyI; + import rails.game.TokenI; import rails.game.TrainI; ! ! public class RevenueAdapter implements Runnable { private Graph<NetworkVertex, NetworkEdge> graph; *************** *** 75,81 **** --- 80,98 ---- } + int maxCities = cities.size(); + int maxTowns = towns.size(); + // check train lengths int maxCityLength = 0, maxTownLength = 0; for (NetworkTrain train: trains) { + int increaseTowns = 0; + if (train.getCities() > maxCities) { + increaseTowns = maxCities - train.getCities(); + train.setCities(maxCities); + } + int trainTowns = train.getTowns() + increaseTowns; + if (trainTowns > maxTowns) { + train.setTowns(maxTowns); + } maxCityLength = Math.max(maxCityLength, train.getCities()); maxTownLength = Math.max(maxTownLength, train.getTowns()); *************** *** 221,224 **** --- 238,242 ---- } + public int calculateRevenue() { return calculateRevenue(0, trains.size() - 1); *************** *** 229,241 **** return rc.calculateRevenue(startTrain, finalTrain); } @Override public String toString() { StringBuffer buffer = new StringBuffer(); ! buffer.append("RevenueCalculator:" + rc); ! buffer.append("Vertexes:" + vertexes); ! buffer.append("Edges:" + edges); return buffer.toString(); } } --- 247,269 ---- return rc.calculateRevenue(startTrain, finalTrain); } + + + public void addRevenueListener(RevenueListener listener) { + rc.addRevenueListener(listener); + } + + public void run() { + calculateRevenue(0, trains.size() -1); + } @Override public String toString() { StringBuffer buffer = new StringBuffer(); ! buffer.append("RevenueCalculator: \n" + rc); ! buffer.append("\n Vertexes: \n" + vertexes); ! buffer.append("\n Edges: \n" + edges); return buffer.toString(); } + } |