|
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.
|