From: <ev...@us...> - 2011-04-29 14:07:57
|
Revision: 1541 http://rails.svn.sourceforge.net/rails/?rev=1541&view=rev Author: evos Date: 2011-04-29 14:07:51 +0000 (Fri, 29 Apr 2011) Log Message: ----------- 18TN: Enabled private purchase in first OR turn at fixed price. Modified Paths: -------------- trunk/18xx/rails/game/OperatingRound.java trunk/18xx/rails/game/specific/_18TN/OperatingRound_18TN.java trunk/18xx/rails/game/state/ArrayListState.java Modified: trunk/18xx/rails/game/OperatingRound.java =================================================================== --- trunk/18xx/rails/game/OperatingRound.java 2011-04-29 13:27:11 UTC (rev 1540) +++ trunk/18xx/rails/game/OperatingRound.java 2011-04-29 14:07:51 UTC (rev 1541) @@ -2426,8 +2426,9 @@ List<Player> players = getPlayers(); int numberOfPlayers = getNumberOfPlayers(); for (int i = currentPlayerIndex; i < currentPlayerIndex - + numberOfPlayers; i++) { + + numberOfPlayers; i++) { player = players.get(i % numberOfPlayers); + if (!maySellPrivate(player)) continue; for (PrivateCompanyI privComp : player.getPortfolio().getPrivateCompanies()) { // check to see if the private can be sold to a company @@ -2536,6 +2537,10 @@ return maxPrice; } + protected boolean maySellPrivate (Player player) { + return true; + } + protected void prepareRevenueAndDividendAction () { // There is only revenue if there are any trains Modified: trunk/18xx/rails/game/specific/_18TN/OperatingRound_18TN.java =================================================================== --- trunk/18xx/rails/game/specific/_18TN/OperatingRound_18TN.java 2011-04-29 13:27:11 UTC (rev 1540) +++ trunk/18xx/rails/game/specific/_18TN/OperatingRound_18TN.java 2011-04-29 14:07:51 UTC (rev 1541) @@ -1,11 +1,15 @@ package rails.game.specific._18TN; -import java.util.List; +import java.util.*; import rails.game.*; +import rails.game.action.BuyPrivate; +import rails.game.state.ArrayListState; public class OperatingRound_18TN extends OperatingRound { + private ArrayListState<Player> playersSoldInOR1; + public OperatingRound_18TN (GameManagerI gameManager) { super (gameManager); } @@ -41,5 +45,33 @@ List<PrivateCompanyI> privates = company.getPortfolio().getPrivateCompanies(); return privates != null && !privates.isEmpty(); } + + protected boolean maySellPrivate (Player player) { + return gameManager.getAbsoluteORNumber() != 1 + || !hasPlayerSoldInOR1(player); + } + + private boolean hasPlayerSoldInOR1 (Player player) { + return playersSoldInOR1 != null && playersSoldInOR1.contains(player); + } + public boolean buyPrivate(BuyPrivate action) { + + Player sellingPlayer = null; + + if (gameManager.getAbsoluteORNumber() == 1) { + sellingPlayer = (Player)((Portfolio)action.getPrivateCompany().getHolder()).getOwner(); + } + + boolean result = super.buyPrivate(action); + + if (result && gameManager.getAbsoluteORNumber() == 1) { + if (playersSoldInOR1 == null) playersSoldInOR1 = new ArrayListState<Player>("PlayersSoldPrivateInOR1"); + if (!playersSoldInOR1.contains(sellingPlayer)) { + playersSoldInOR1.add(sellingPlayer); + } + } + + return result; + } } Modified: trunk/18xx/rails/game/state/ArrayListState.java =================================================================== --- trunk/18xx/rails/game/state/ArrayListState.java 2011-04-29 13:27:11 UTC (rev 1540) +++ trunk/18xx/rails/game/state/ArrayListState.java 2011-04-29 14:07:51 UTC (rev 1541) @@ -58,6 +58,10 @@ public void move (E element, int toIndex) { if (remove (element)) add (toIndex, element); } + + public boolean contains (E element) { + return list.contains(element); + } public void clear() { for (E element:list) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |