Update of /cvsroot/rails/18xx/rails/game/specific/_18EU
In directory sfp-cvsdas-4.v30.ch3.sourceforge.com:/tmp/cvs-serv26538/rails/game/specific/_18EU
Added Files:
PullmanRevenueModifier.java
Log Message:
Added support for 18EU Pullman, introduced RevenueDynamicModifier
--- NEW FILE: PullmanRevenueModifier.java ---
package rails.game.specific._18EU;
import java.util.Collection;
import java.util.List;
import rails.algorithms.NetworkTrain;
import rails.algorithms.NetworkVertex;
import rails.algorithms.RevenueAdapter;
import rails.algorithms.RevenueDynamicModifier;
import rails.algorithms.RevenueTrainRun;
public class PullmanRevenueModifier implements RevenueDynamicModifier {
private boolean hasPullman;
private int maxValue;
public boolean prepareModifier(RevenueAdapter revenueAdapter) {
// 1. check if there is a Pullman in the train set
hasPullman = false;
List<NetworkTrain> trains = revenueAdapter.getTrains();
for (NetworkTrain train:trains) {
if (train.getRailsTrainType().getName().equals("P")) {
hasPullman = true;
revenueAdapter.removeTrain(train); // remove from revenueAdapter
break;
}
}
if (!hasPullman) return false;
// 2. find the maximum value of the vertices
maxValue = maximumMajorValue(revenueAdapter.getVertices());
return true;
}
public int evaluationValue(RevenueAdapter revenueAdapter) {
return pullmanValue(revenueAdapter.getCurrentRun());
}
private int pullmanValue(List<RevenueTrainRun> trainRuns) {
int maximum = 0;
for (RevenueTrainRun trainRun:trainRuns) {
maximum = Math.max(maximum, maximumMajorValue(trainRun.getVertices()));
if (maximum == maxValue) break;
}
return maximum;
}
public int predictionValue(RevenueAdapter revenueAdapter) {
return maxValue;
}
public String prettyPrint(RevenueAdapter revenueAdapter) {
return "Pullman: " + pullmanValue(revenueAdapter.getOptimalRun());
}
private int maximumMajorValue(Collection<NetworkVertex> vertices) {
int maximum = 0;
for (NetworkVertex vertex:vertices) {
if (!vertex.isMajor()) continue;
maximum= Math.max(maximum, vertex.getValue());
}
return maximum;
}
}
|