|
From: <ev...@us...> - 2011-05-08 19:08:51
|
Revision: 1551
http://rails.svn.sourceforge.net/rails/?rev=1551&view=rev
Author: evos
Date: 2011-05-08 19:08:40 +0000 (Sun, 08 May 2011)
Log Message:
-----------
1880 changes
Modified Paths:
--------------
trunk/18xx/data/1880/CompanyManager.xml
trunk/18xx/data/1880/Game.xml
trunk/18xx/data/1880/StockMarket.xml
trunk/18xx/rails/game/GameManager.java
trunk/18xx/rails/game/GameManagerI.java
trunk/18xx/rails/game/Player.java
Added Paths:
-----------
trunk/18xx/rails/game/specific/_1880/Investor_1880.java
trunk/18xx/rails/game/specific/_1880/StartRound_1880.java
Property Changed:
----------------
trunk/18xx/tiles/
Modified: trunk/18xx/data/1880/CompanyManager.xml
===================================================================
--- trunk/18xx/data/1880/CompanyManager.xml 2011-05-08 15:55:50 UTC (rev 1550)
+++ trunk/18xx/data/1880/CompanyManager.xml 2011-05-08 19:08:40 UTC (rev 1551)
@@ -2,7 +2,7 @@
<!-- 1880 CompanyManager.xml -->
<CompanyManager>
- <CompanyType name="Investor" class="rails.game.PublicCompany">
+ <CompanyType name="Investor" class="rails.game.specific._1880.Investor_1880">
<ShareUnit percentage="100" />
<Certificate type="President" shares="1" />
<StockPrice market="no" />
@@ -12,13 +12,24 @@
<Payout split="no" />
</CompanyType>
+<CompanyType name="Minor" class="rails.game.PublicCompany">
+ <ShareUnit percentage="100"/>
+ <Certificate type="President" shares="1"/>
+ <StockPrice market="no"/>
+ <BaseTokens>
+ <HomeBase lay="whenFloated"/>
+ </BaseTokens>
+ <Payout split="no"/>
+ <Trains number="1" mandatory="no"/>
+ </CompanyType>
+
<CompanyType name="Private" class="rails.game.PrivateCompany" />
<CompanyType name="Major" class="rails.game.PublicCompany" capitalisation="incremental" >
<Capitalisation Type="incremental" />
<TileLays>
- <Number colour="yellow" phase="2,3,4,5,6,7,8" number="2" />
+ <Number colour="yellow" phase="A2,B1,B2,B3,C1,C2,C3,D1,D2,D3" number="2" />
</TileLays>
<Float percentage="60" />
<StockPrice par="yes" />
@@ -29,32 +40,10 @@
<LayCost method="sequence" cost="0,40,100" />
</BaseTokens>
<Capitalisation type="incremental" />
- <Trains number="4,4,3,3,3,3,2,2" />
+ <Trains number="4,4,4,3,3,3,3,3,2,2,2" />
<CanUseSpecialProperties />
</CompanyType>
- <Company Name="A1" longname="Chinese Eastern Railway" type="Investor" tokens="1" >
- <Home hex="A3" city="1" />
- </Company>
- <Company Name="A2" longname="South Manchuria Railway" type="Investor" tokens="1" >
- <Home hex="E13" city="1" />
- </Company>>
- <Company Name="A3" longname="Zeng Tai Railway" type="Investor" tokens="1" >
- <Home hex="H6" city="1" />
- </Company>
- <Company Name="A4" longname="Schantung-Eisenbahngesellschaft"
- type="Investor" tokens="1" >
- <Home hex="H14" city="1" />
- </Company>
- <Company Name="A5" longname="Kowloon-Canton Railway" type="Investor" tokens="1" >
- <Home hex="Q15" city="1" />
- </Company>
- <Company Name="A6" longname="Macau Hafen" type="Investor" tokens="1" >
- <Home hex="P12" city="1" />
- </Company>
- <Company Name="A7" longname="Kunming-Hekou Railway" type="Investor" tokens="1" >
- <Home hex="Q7" city="1" />
- </Company>
<Company name="WR" longname="Woosong Railway" type="Private"
basePrice="5" revenue="0">
<!--SpecialProperty condition="ifOwnedByPlayer" Phasenwechsel-Freie Lok -->
@@ -114,20 +103,20 @@
</Company>
<Company name="JHA" longname="Jingha Railway" type="Major"
tokens="3" fgColour="FFFFFF" bgColour="FF0000">
- <Home hex="F8" />
+ <Home hex="F8" city="1"/>
</Company>
<Company name="JHU" longname="Jinghu
Railway" type="Major"
tokens="3" fgColour="FFFFFF" bgColour="FF0000">
- <Home hex="F8" />
+ <Home hex="F8" city="2"/>
</Company>
<Company name="JGG" longname="Jingguang Railway" type="Major"
tokens="3" fgColour="FFFFFF" bgColour="FF0000">
- <Home hex="F8" />
+ <Home hex="F8" city="3"/>
</Company>
<Company name="JLR" longname="Jinglan Railway" type="Major"
tokens="3" fgColour="FFFFFF" bgColour="FF0000">
- <Home hex="F8" />
+ <Home hex="F8" city="4"/>
</Company>
<Company name="BZU" longname="Binzhou
Railway" type="Major"
@@ -153,32 +142,63 @@
</Company>
<Company name="HKR" longname="Hukun Railway" type="Major"
tokens="3" fgColour="FFFFFF" bgColour="FF0000">
- <Home hex="K14" />
+ <Home hex="K15" />
</Company>
<Company name="NJR" longname="Najiang Railway" type="Major"
tokens="3" fgColour="FFFFFF" bgColour="FF0000">
- <Home hex="K12" />
+ <Home hex="K13" />
</Company>
<Company name="QSR" longname="Qinshen
Railway" type="Major"
tokens="3" fgColour="FFFFFF" bgColour="FF0000">
- <Home hex="D13" />
+ <Home hex="D12" />
</Company>
<Company name="WNR" longname="Wunan Railway" type="Major"
tokens="3" fgColour="FFFFFF" bgColour="FF0000">
<Home hex="L10" />
</Company>
- <StartPacket roundClass="rails.game.StartRound_1880">
- <Bidding initial="5" minimum="5" increment="5" />
- <Item name="WR" type="Private" />
- <Item name="KR" type="Private" />
- <Item name="YC" type="Private" />
- <Item name="TL" type="Private" />
- <Item name="CC" type="Public" />
- <Item name="JO" type="Private" />
- <Item name="IG" type="Private">
- <SubItem name="BCR" type="Public" />
- <Item name="RC" type="Private" />
+ <Company name="1" longname="Chinese Eastern Railway" type="Minor" price="0" tokens="1" >
+ <Home hex="A3" city="1" />
+ </Company>
+ <Company name="2" longname="South Manchuria Railway" type="Minor" price="0" tokens="1" >
+ <Home hex="E13" city="1" />
+ </Company>>
+ <Company name="3" longname="Zeng Tai Railway" type="Minor" price="0" tokens="1" >
+ <Home hex="H6" city="1" />
+ </Company>
+ <Company name="4" longname="Schantung-Eisenbahngesellschaft"
+ type="Minor" price="0" tokens="1" >
+ <Home hex="H14" city="1" />
+ </Company>
+ <Company name="5" longname="Kowloon-Canton Railway" type="Minor" price="0" tokens="1" >
+ <Home hex="Q15" city="1" />
+ </Company>
+ <Company name="6" longname="Macau Hafen" type="Minor" price="0" tokens="1" >
+ <Home hex="P12" city="1" />
+ </Company>
+ <Company name="7" longname="Kunming-Hekou Railway" type="Minor" price="0" tokens="1" >
+ <Home hex="Q7" city="1" />
+ </Company>
+
+ <StartPacket roundClass="rails.game.specific._1880.StartRound_1880">
+ <Bidding initial="0" minimum="0" increment="5" />
+ <Item name="WR" type="Private" basePrice="5"/>
+ <Item name="KR" type="Private" basePrice="10"/>
+ <Item name="YC" type="Private" basePrice="25"/>
+ <Item name="TL" type="Private" basePrice="45"/>
+ <Item name="CC" type="Private" basePrice="70"/>
+ <Item name="JO" type="Private" basePrice="100"/>
+ <Item name="IG" type="Private" basePrice="160">
+ <SubItem name="BCR" type="Major" president="yes"/>
</Item>
+ <Item name="RC" type="Private" basePrice="50"/>
+ <Item name="1" type="Minor" basePrice="0"/>
+ <Item name="2" type="Minor" basePrice="0"/>
+ <Item name="3" type="Minor" basePrice="0"/>
+ <Item name="4" type="Minor" basePrice="0"/>
+ <Item name="5" type="Minor" basePrice="0"/>
+ <Item name="6" type="Minor" basePrice="0"/>
+ <Item name="7" type="Minor" basePrice="0"/>
</StartPacket>
+
</CompanyManager>
\ No newline at end of file
Modified: trunk/18xx/data/1880/Game.xml
===================================================================
--- trunk/18xx/data/1880/Game.xml 2011-05-08 15:55:50 UTC (rev 1550)
+++ trunk/18xx/data/1880/Game.xml 2011-05-08 19:08:40 UTC (rev 1551)
@@ -55,46 +55,61 @@
<Train name="10" majorStops="10" cost="1000" amount="-1"/>
</Component>
<Component name="PhaseManager" class="rails.game.PhaseManager">
- <Phase name="1">
+ <Phase name="A1">
<Tiles colour="yellow"/>
<OperatingRounds number="-1"/>
<Float percentage="20"/>
<Trains tradingAllowed="yes"/>
<Stocks avail="5"/>
</Phase>
- <Phase name="2">
+ <Phase name="A2">
+ <Tiles colour="yellow"/>
+
+ </Phase>
+ <Phase name="B1">
<Tiles colour="yellow,green"/>
- <OffBoardRevenue step="2"/>
<Float percentage="30"/>
<Stocks avail="10"/>
+ <OffBoardRevenue step="2"/>
</Phase>
- <Phase name="3">
+ <Phase name="B2">
<Tiles colour="yellow,green"/>
-
+ <OffBoardRevenue step="2"/>
</Phase>
- <Phase name="4">
+ <Phase name="B3">
<Tiles colour="yellow,green"/>
+ <OffBoardRevenue step="2"/>
<Privates close="yes"/>
<Investors active="no"/>
<Communists active="yes"/>
<Float percentage="40"/>
</Phase>
- <Phase name="5">
+ <Phase name="C1">
<Tiles colour="yellow,green,brown"/>
<OffBoardRevenue step="3"/>
</Phase>
- <Phase name="6">
+ <Phase name="C2">
<Tiles colour="yellow,green,brown"/>
+ <Comunists active="no"/>
<Float percentage="60"/>
- <Comunists active="no"/>
+ <OffBoardRevenue step="3"/>
</Phase>
- <Phase name="7">
+ <Phase name="C3">
<Tiles colour="yellow,green,brown"/>
+ <OffBoardRevenue step="3"/>
</Phase>
- <Phase name="8">
+ <Phase name="D1">
<Tiles colour="yellow,green,brown,grey"/>
<OffBoardRevenue step="4"/>
</Phase>
+ <Phase name="D2">
+ <Tiles colour="yellow,green,brown,grey"/>
+ <OffBoardRevenue step="4"/>
+ </Phase>
+ <Phase name="D3">
+ <Tiles colour="yellow,green,brown,grey"/>
+ <OffBoardRevenue step="4"/>
+ </Phase>
<Component name="RevenueManager" class="rails.algorithms.RevenueManager">
<Modifier class="rails.game.specific._1880.OffBoardRevenueModifier" />
<Modifier class="rails.game.specific._1880.ExpressTrainRevenueModifier" />
Modified: trunk/18xx/data/1880/StockMarket.xml
===================================================================
--- trunk/18xx/data/1880/StockMarket.xml 2011-05-08 15:55:50 UTC (rev 1550)
+++ trunk/18xx/data/1880/StockMarket.xml 2011-05-08 19:08:40 UTC (rev 1551)
@@ -31,19 +31,19 @@
<StockSpace name="C9" price="60" />
<StockSpace name="D1" price="105" />
<StockSpace name="D2" price="100" >
- <Startspace />
+ <StartSpace />
</StockSpace>
<StockSpace name="D3" price="95" />
<StockSpace name="D4" price="90" >
- <Startspace />
+ <StartSpace />
</StockSpace>
<StockSpace name="D5" price="85" />
<StockSpace name="D6" price="80" >
- <Startspace />
+ <StartSpace />
</StockSpace>
<StockSpace name="D7" price="75" />
<StockSpace name="D8" price="70" >
- <Startspace />
+ <StartSpace />
</StockSpace>
<StockSpace name="D9" price="65" />
<StockSpace name="E1" price="110" />
Modified: trunk/18xx/rails/game/GameManager.java
===================================================================
--- trunk/18xx/rails/game/GameManager.java 2011-05-08 15:55:50 UTC (rev 1550)
+++ trunk/18xx/rails/game/GameManager.java 2011-05-08 19:08:40 UTC (rev 1551)
@@ -1896,5 +1896,31 @@
skipNextDone = true;
skippedStep = step;
}
+
+ /**
+ *
+ *@param ascending Boolean to determine if the playerlist will be sorted in ascending or descending order based on their cash
+ *@return Returns the player at index position 0 that is either the player with the most or least cash depending on sort order.
+ */
+ public Player reorderPlayersByCash (boolean ascending) {
+
+ final boolean _ascending = ascending;
+ Collections.sort (players, new Comparator<Player>() {
+ public int compare (Player p1, Player p2) {
+ return _ascending ? p1.getCash() - p2.getCash() : p2.getCash() - p1.getCash();
+ }
+ });
+
+ Player player;
+ for (int i=0; i<players.size(); i++) {
+ player = players.get(i);
+ player.setIndex (i);
+ playerNames.set (i, player.getName());
+ log.debug("New player "+i+" is "+player.getName() +" (cash="+Bank.format(player.getCash())+")");
+ }
+
+ return players.get(0);
+ }
+
}
Modified: trunk/18xx/rails/game/GameManagerI.java
===================================================================
--- trunk/18xx/rails/game/GameManagerI.java 2011-05-08 15:55:50 UTC (rev 1550)
+++ trunk/18xx/rails/game/GameManagerI.java 2011-05-08 19:08:40 UTC (rev 1551)
@@ -210,4 +210,7 @@
public boolean isReloading();
public void setReloading(boolean reloading);
public void setSkipDone (GameDef.OrStep step);
+
+ public Player reorderPlayersByCash(boolean high);
+ //public void reorderPlayersByCash(boolean high);
}
\ No newline at end of file
Modified: trunk/18xx/rails/game/Player.java
===================================================================
--- trunk/18xx/rails/game/Player.java 2011-05-08 15:55:50 UTC (rev 1550)
+++ trunk/18xx/rails/game/Player.java 2011-05-08 19:08:40 UTC (rev 1551)
@@ -200,6 +200,10 @@
return index;
}
+ public void setIndex(int index) {
+ this.index = index;
+ }
+
public void setBankrupt () {
bankrupt.set(true);
}
Added: trunk/18xx/rails/game/specific/_1880/Investor_1880.java
===================================================================
--- trunk/18xx/rails/game/specific/_1880/Investor_1880.java (rev 0)
+++ trunk/18xx/rails/game/specific/_1880/Investor_1880.java 2011-05-08 19:08:40 UTC (rev 1551)
@@ -0,0 +1,69 @@
+/**
+ *
+ */
+package rails.game.specific._1880;
+
+import rails.game.PublicCompany;
+
+/**
+ * @author Martin 2011/04/11
+ *
+ */
+public class Investor_1880 extends PublicCompany {
+/*
+ * Investors in 1880 get chosen at start after the initial starting package is sold out. They get one share from a new company
+ * TODO: Make sure that dividends aren't accumulated on the investors
+
+*/
+ protected boolean canOwnShare=true;
+
+ protected int maxPercofShares=1;
+
+ protected boolean hasStockPrice=false;
+
+ protected boolean hasParPrice=false;
+
+ protected PublicCompany linkedCompany; // An Investor is always linked to a (exactly one) Public Major Company..
+
+ /* Investors in 1880 operate with the newest train model on lease from the bank for zero costs.
+ */
+ protected boolean canBorrowTrain=true;
+
+
+ /**
+ *
+ */
+ public Investor_1880() {
+ super();
+ }
+
+ public boolean canOwnShare(){
+ return canOwnShare;
+ }
+
+ public int maxPercofShares(){
+ return maxPercofShares;
+ }
+ public boolean hasStockPrice(){
+ return hasStockPrice;
+ }
+
+ public boolean hasParPrice(){
+ return hasParPrice;
+ }
+
+ public PublicCompany getLinkedCompany(){
+ return linkedCompany;
+ }
+
+ public boolean setLinkedCompany(PublicCompany linkedCompany){
+ if (linkedCompany != null){
+ //Check if Company is valid i.e. not Closed maybe check if theres already the President sold and just the president...
+ if(!linkedCompany.isClosed()){
+ this.linkedCompany=linkedCompany;
+ return true;}
+ }
+ return false;
+ }
+
+}
Property changes on: trunk/18xx/rails/game/specific/_1880/Investor_1880.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/18xx/rails/game/specific/_1880/StartRound_1880.java
===================================================================
--- trunk/18xx/rails/game/specific/_1880/StartRound_1880.java (rev 0)
+++ trunk/18xx/rails/game/specific/_1880/StartRound_1880.java 2011-05-08 19:08:40 UTC (rev 1551)
@@ -0,0 +1,384 @@
+/**
+ *
+ */
+package rails.game.specific._1880;
+
+import rails.game.*;
+import rails.game.action.*;
+import rails.game.state.IntegerState;
+import rails.game.state.State;
+import rails.game.state.ArrayListState;
+import rails.util.LocalText;
+
+
+
+/**
+ * @author Martin
+ *
+ */
+public class StartRound_1880 extends StartRound {
+
+ private final State startingPlayer =
+ new State("StartingPlayer", Player.class);
+
+ private final IntegerState currentBuyPrice =
+ new IntegerState("CurrentBuyPrice", 0);
+
+ private final IntegerState initialItemRound =
+ new IntegerState("InitialItemRound",0);
+
+ private final State currentItem =
+ new State("CurrentItem", StartItem.class);
+
+ private final IntegerState currentStartRoundPhase =
+ new IntegerState("CurrentStartRoundPhase",0);
+
+ private final IntegerState investorChosen =
+ new IntegerState("InvestorChosen",0);
+
+ /** A company in need for a par price. */
+ PublicCompanyI companyNeedingPrice = null;
+
+
+ /**
+ * @param gameManager
+ */
+ public StartRound_1880(GameManagerI gameManager) {
+ super(gameManager);
+ hasBasePrices=true;
+ hasBidding=true;
+
+ }
+ @Override
+ public void start() {
+ super.start();
+
+ // crude fix for StartItem hardcoded SetMinimumbid ignoring the initial value out of the XMLs....
+ for (StartItem item : startPacket.getItems()) {
+ item.setMinimumBid(item.getBasePrice());
+ }
+ startingPlayer.set(getCurrentPlayer());
+ setPossibleActions();
+
+ }
+
+ @Override
+ public boolean setPossibleActions() {
+
+ possibleActions.clear();
+
+ StartItem item = startPacket.getFirstUnsoldItem();
+
+
+ //Need Logic to check for all Type Minor/Investor Certificate
+ if ( (item.getType()!=null ) && (item.getType().equals("Private"))) {
+
+ currentBuyPrice.set(item.getMinimumBid());
+
+ if (currentPlayer == startPlayer) ReportBuffer.add("");
+
+ if (currentItem == null || currentItem.get() != item ) { // we haven't seen this item before
+ numPasses.set(0); // new round so cancel all previous passes !
+ currentItem.set(item);
+ item.setStatus(StartItem.BIDDABLE);
+ item.setStatus(StartItem.BUYABLE);
+ auctionItemState.set(item);
+ initialItemRound.set(0);
+ } else {
+ initialItemRound.add(1);
+ }
+
+
+
+ Player currentPlayer = getCurrentPlayer();
+
+ if (item.getStatus() == StartItem.NEEDS_SHARE_PRICE) { //still necessary ??
+ /* This status is set in buy() if a share price is missing */
+ setPlayer(item.getBidder());
+ possibleActions.add(new BuyStartItem(item, item.getBid(), false, true));
+ return true;
+ // No more actions
+ }
+ if ((item.getBidder() == currentPlayer) && (numPasses.intValue() == getNumberOfPlayers()-1)){ // Current Player is highest Bidder & all others have passed
+ if (item.needsPriceSetting() != null ){
+ BuyStartItem possibleAction = new BuyStartItem(item,item.getBid(), true, true);
+ possibleActions.add(possibleAction);
+ return true;
+ // No more actions// no further Actions possible
+ }else{
+ BuyStartItem possibleAction = new BuyStartItem(item,item.getBid(),true);
+ possibleActions.add(possibleAction);
+ return true;
+ // No more actions// no further Actions possible
+ }
+ }
+
+ if (currentPlayer.getCash() >= item.getMinimumBid()) {
+ //Kann bieten
+ if (item.getBid() == 0) { // erster Spieler noch keiner sonst geboten.
+ BidStartItem possibleAction =
+ new BidStartItem(item, item.getBasePrice(),
+ 0, true);
+ possibleActions.add(possibleAction); // Player can offer a bid
+ possibleActions.add(new NullAction(NullAction.PASS));
+ return true;
+ } else {
+ BidStartItem possibleAction =
+ new BidStartItem(item, item.getMinimumBid(),
+ startPacket.getModulus(), true);
+ possibleActions.add(possibleAction); // Player can offer a bid
+ possibleActions.add(new NullAction(NullAction.PASS));
+ return true;
+ }
+ } else {
+ // Can't bid: Autopass
+ numPasses.add(1);
+ return false;
+ }
+ } else { // Item is not a private ! should be a major or minor in 1880 special rules apply.
+ //Check if all players own a minor/investor already then declare Startinground over...
+ if (currentStartRoundPhase.intValue() == 0) { //first time a non Private gets called up; initialize the rest of items to BUYABLE
+ // Priority Deal goes to the player with the smallest wallet...
+ gameManager.setCurrentPlayer(gameManager.reorderPlayersByCash(true));
+ //setCurrentPlayerIndex(0); //lowest or highest Player is always at the start of the player list after reordering !
+ //Send Message that Playerorder has Changed !...
+ currentPlayer=getCurrentPlayer();
+ currentStartRoundPhase.set(1);
+ startingPlayer.set(currentPlayer);
+ gameManager.setPriorityPlayer((Player) startingPlayer.get()); // Method doesn't exist in Startround ???
+ }
+ if (investorChosen.intValue() == getNumberOfPlayers()) {
+ for ( StartItem item1 : itemsToSell) {
+ if (!item1.isSold()){
+ item1.setStatus(StartItem.UNAVAILABLE);
+ item1.setStatus(StartItem.SOLD);
+
+ }
+ }
+ finishRound();
+ return false;
+ } else {
+ for ( StartItem item1 : itemsToSell) {
+ if (!item1.isSold()){
+ item1.setStatus(StartItem.BUYABLE);
+ BuyStartItem possibleAction = new BuyStartItem(item1, 0, false);
+ possibleActions.add(possibleAction);
+ }
+ }
+ investorChosen.add(1);
+ return true;
+ }
+
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see rails.game.StartRound#bid(java.lang.String, rails.game.action.BidStartItem)
+ */
+ @Override
+ protected boolean bid(String playerName, BidStartItem bidItem) {
+ StartItem item = bidItem.getStartItem();
+ String errMsg = null;
+ Player player = getCurrentPlayer();
+ int bidAmount = bidItem.getActualBid();
+
+ while (true) {
+
+ // Check player
+ if (!playerName.equals(player.getName())) {
+ errMsg = LocalText.getText("WrongPlayer", playerName, player.getName());
+ break;
+ }
+ // Check item
+ boolean validItem = false;
+ for (StartItemAction activeItem : possibleActions.getType(StartItemAction.class)) {
+ if (bidItem.equalsAsOption(activeItem)) {
+ validItem = true;
+ break;
+ }
+
+ }
+ if (!validItem) {
+ errMsg = LocalText.getText("ActionNotAllowed",
+ bidItem.toString());
+ break;
+ }
+
+ // Is the item buyable?
+ if (bidItem.getStatus() != StartItem.BUYABLE) {
+ errMsg = LocalText.getText("NotForSale");
+ break;
+ }
+
+ // Bid must be at least 5 above last bid
+ if (bidAmount < item.getMinimumBid()) {
+ errMsg = LocalText.getText("BidTooLow", ""
+ + item.getMinimumBid());
+ break;
+ }
+
+ // Bid must be a multiple of the modulus
+ if (bidAmount % startPacket.getModulus() != 0) {
+ errMsg = LocalText.getText("BidMustBeMultipleOf",
+ bidAmount,
+ startPacket.getMinimumIncrement());
+ break;
+ }
+
+ // Has the buyer enough cash?
+ if (bidAmount > player.getCash()) {
+ errMsg = LocalText.getText("BidTooHigh", Bank.format(bidAmount));
+ break;
+ }
+
+ break;
+ }
+
+ if (errMsg != null) {
+ DisplayBuffer.add(LocalText.getText("InvalidBid",
+ playerName,
+ item.getName(),
+ errMsg ));
+ return false;
+ }
+
+ moveStack.start(false);
+
+ item.setBid(bidAmount, player);
+ ReportBuffer.add(LocalText.getText("BID_ITEM_LOG",
+ playerName,
+ Bank.format(bidAmount),
+ item.getName(),
+ Bank.format(player.getCash()) ));
+ setNextBiddingPlayer(item);
+ return true;
+
+ }
+
+ /* (non-Javadoc)
+ * @see rails.game.StartRound#pass(java.lang.String)
+ */
+ @Override
+ protected boolean pass(String playerName) {
+ String errMsg = null;
+ Player player = getCurrentPlayer();
+ StartItem auctionItem = (StartItem) auctionItemState.get();
+
+ while (true) {
+
+ // Check player
+ if (!playerName.equals(player.getName())) {
+ errMsg = LocalText.getText("WrongPlayer", playerName, player.getName());
+ break;
+ }
+ break;
+ }
+
+ if (errMsg != null) {
+ DisplayBuffer.add(LocalText.getText("InvalidPass",
+ playerName,
+ errMsg ));
+ return false;
+ }
+
+ ReportBuffer.add(LocalText.getText("PASSES", playerName));
+
+ moveStack.start(false);
+
+ numPasses.add(1);
+
+ if (numPasses.intValue() >= numPlayers) {
+ // All players have passed.
+ ReportBuffer.add(LocalText.getText("ALL_PASSED"));
+ // It the first item has not been sold yet, reduce its price by
+ // 5.
+ if (auctionItem.getIndex() < 2) {
+ auctionItem.reduceBasePriceBy(5);
+ auctionItem.setMinimumBid(auctionItem.getBasePrice());
+ ReportBuffer.add(LocalText.getText(
+ "ITEM_PRICE_REDUCED",
+ auctionItem.getName(),
+ Bank.format(startPacket.getFirstItem().getBasePrice()) ));
+ numPasses.set(0);
+ if (auctionItem.getBasePrice() == 0) {
+ assignItem((Player)startingPlayer.get(),
+ auctionItem, 0, 0);
+ setNextStartingPlayer();
+ // startPacket.getFirstItem().getName());
+ return true;
+ }
+ } else {
+ numPasses.set(0);
+ //gameManager.nextRound(this);
+ finishRound();
+
+ }
+ }
+ // if ((numPasses.intValue() >= auctionItem.getBidders() - 1) &&
+ if ((auctionItem.getBidders() >0) && (numPasses.intValue()== getNumberOfPlayers()-1)) {
+ // All but the highest bidder have passed.
+ int price = auctionItem.getBid();
+
+ log.debug("Highest bidder is "
+ + auctionItem.getBidder().getName());
+ if (auctionItem.needsPriceSetting() != null) {
+ auctionItem.setStatus(StartItem.NEEDS_SHARE_PRICE);
+ } else {
+ assignItem(auctionItem.getBidder(), auctionItem, price, 0);
+ }
+ auctionItemState.set(null);
+ numPasses.set(0);
+ setNextStartingPlayer();
+ return true;
+ } else {
+ // More than one left: find next bidder
+
+ if (auctionItem.getIndex()>1){
+ auctionItem.setBid(-1, player);
+ setNextBiddingPlayer(auctionItem,
+ getCurrentPlayerIndex());
+ }else {
+ auctionItem.setBid(-1, player);
+ setNextPlayer();
+ }
+
+
+ }
+
+
+
+ return true;
+
+
+ }
+
+ private void setNextBiddingPlayer(StartItem item, int currentIndex) {
+ for (int i = currentIndex + 1; i < currentIndex
+ + gameManager.getNumberOfPlayers(); i++) {
+ if (item.getBid(gameManager.getPlayerByIndex(i)) >=0) {
+ setCurrentPlayerIndex(i);
+ break;
+ }
+ }
+ }
+
+ private void setNextBiddingPlayer(StartItem item) {
+
+ setNextBiddingPlayer(item, getCurrentPlayerIndex());
+ }
+
+ @Override
+ public String getHelp() {
+ return "1880 Start Round help text";
+ }
+
+ private void setNextStartingPlayer(){
+ int i;
+ Player player;
+ player = (Player) startingPlayer.get();
+ i= player.getIndex();
+ startingPlayer.set(gameManager.getPlayerByIndex(i+1));
+ setCurrentPlayerIndex(i+1 % getNumberOfPlayers());
+ }
+
+}
Property changes on: trunk/18xx/rails/game/specific/_1880/StartRound_1880.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Property changes on: trunk/18xx/tiles
___________________________________________________________________
Modified: svn:ignore
- Copy of TileDictionary.18t
handmade
TDwithID
TDwoID
xml
tileimages.xml
Copy (2) of TileDictionary.18t
Copy (3) of TileDictionary.18t
Rails18xx.ini
UserGridStyle.ini
UserTileStyle.ini
*.exe
o
TDindex.pl
TDindex.txt
TileDictionary - kopie.xml
TileDictionary - kopie.18t
+ Copy of TileDictionary.18t
handmade
TDwithID
TDwoID
xml
tileimages.xml
Copy (2) of TileDictionary.18t
Copy (3) of TileDictionary.18t
Rails18xx.ini
UserGridStyle.ini
UserTileStyle.ini
*.exe
o
TDindex.pl
TDindex.txt
TileDictionary - kopie.xml
TileDictionary - kopie.18t
fix.bat
tilexml.bat
tileset.bat
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|