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