From: Erik V. <ev...@us...> - 2010-03-27 18:27:16
|
Update of /cvsroot/rails/18xx/rails/game/specific/_1856 In directory sfp-cvsdas-1.v30.ch3.sourceforge.com:/tmp/cvs-serv8160/rails/game/specific/_1856 Modified Files: PublicCompany_CGR.java StockRound_1856.java Log Message: Fix 1856 share price adjustment if multiple 5% shares are sold in one round. Index: StockRound_1856.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/game/specific/_1856/StockRound_1856.java,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** StockRound_1856.java 31 Jan 2010 22:22:32 -0000 1.14 --- StockRound_1856.java 27 Mar 2010 18:27:08 -0000 1.15 *************** *** 3,10 **** --- 3,15 ---- import rails.game.*; import rails.game.action.BuyCertificate; + import rails.game.state.IntegerState; import rails.util.LocalText; public class StockRound_1856 extends StockRound { + /* Cope with multiple 5% share sales in one turn */ + private IntegerState sharesSoldSoFar; + private IntegerState squaresDownSoFar; + /** * Constructor with the GameManager, will call super class (StockRound's) Constructor to initialize *************** *** 15,19 **** public StockRound_1856 (GameManagerI aGameManager) { super (aGameManager); ! } /** --- 20,27 ---- public StockRound_1856 (GameManagerI aGameManager) { super (aGameManager); ! ! sharesSoldSoFar = new IntegerState("CGR_SharesSoldSoFar", 0); ! squaresDownSoFar = new IntegerState("CGR_SquaresDownSoFar", 0); ! } /** *************** *** 47,50 **** --- 55,86 ---- } + protected void initPlayer() { + super.initPlayer(); + sharesSoldSoFar.set(0); + squaresDownSoFar.set(0); + } + + protected void adjustSharePrice (PublicCompanyI company, int numberSold, boolean soldBefore) { + + if (company instanceof PublicCompany_CGR) { + if (company.canSharePriceVary()) { + int numberOfSpaces; + if (company.getShareUnit() == 5) { + // Take care for selling 5% shares in multiple blocks per turn + numberOfSpaces + = (sharesSoldSoFar.intValue() + numberSold)/2 + - squaresDownSoFar.intValue(); + sharesSoldSoFar.add(numberSold); + squaresDownSoFar.add(numberOfSpaces); + } else { + numberOfSpaces = numberSold; + } + stockMarket.sell(company, numberOfSpaces); + } + } else { + super.adjustSharePrice (company, numberSold, soldBefore); + } + } + @Override protected CashHolder getSharePriceRecipient(PublicCertificateI cert, int cost) { Index: PublicCompany_CGR.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/game/specific/_1856/PublicCompany_CGR.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** PublicCompany_CGR.java 13 Mar 2010 18:42:59 -0000 1.9 --- PublicCompany_CGR.java 27 Mar 2010 18:27:08 -0000 1.10 *************** *** 30,36 **** // Share price is initially fixed canSharePriceVary.set(false); - - sharesSoldSoFar = new IntegerState(name+"_SharesSoldSoFar", 0); - squaresDownSoFar = new IntegerState(name+"_SquaresDownSoFar", 0); } --- 30,33 ---- *************** *** 142,177 **** @Override - public void adjustSharePrice (int actionPerformed, int numberOfSharesSold, - StockMarketI stockMarket) { - - if (actionPerformed == StockRound.SOLD) { - if (canSharePriceVary()) { - int numberOfSpaces; - if (shareUnit.intValue() == 5) { - // Take care for selling 5% shares in multiple blocks per turn - numberOfSpaces - = (sharesSoldSoFar.intValue() + numberOfSharesSold)/2 - - squaresDownSoFar.intValue(); - sharesSoldSoFar.add(numberOfSharesSold); - squaresDownSoFar.add(numberOfSpaces); - } else { - numberOfSpaces = numberOfSharesSold; - } - stockMarket.sell(this, numberOfSpaces); - } - } - } - - @Override - public void setOperated() { - super.setOperated(); - - // Reset the share selling counts - // TODO Should this be a generic function? - sharesSoldSoFar.set(0); - squaresDownSoFar.set(0); - } - - @Override public boolean mustOwnATrain() { if (!hadPermanentTrain()) { --- 139,142 ---- |