From: Erik V. <ev...@us...> - 2008-12-23 19:54:19
|
Update of /cvsroot/rails/18xx/rails/game In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv26761/rails/game Modified Files: GameManager.java Log Message: Implements new interface GameManagerI New createRound() methods, taking 1 and 2 args. Index: GameManager.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/game/GameManager.java,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** GameManager.java 22 Nov 2008 17:22:59 -0000 1.36 --- GameManager.java 23 Dec 2008 19:54:14 -0000 1.37 *************** *** 3,6 **** --- 3,7 ---- import java.io.*; + import java.lang.reflect.Constructor; import java.util.*; *************** *** 21,25 **** * Round. Currently everything is hardcoded à la 1830. */ ! public class GameManager implements ConfigurableComponentI { /** Version ID of the Save file header, as written in save() */ private static final long saveFileHeaderVersionID = 3L; --- 22,26 ---- * Round. Currently everything is hardcoded à la 1830. */ ! public class GameManager implements ConfigurableComponentI, GameManagerI { /** Version ID of the Save file header, as written in save() */ private static final long saveFileHeaderVersionID = 3L; *************** *** 34,47 **** protected Class<? extends OperatingRound> operatingRoundClass = OperatingRound.class; ! // Variable UI Class names protected String orUIManagerClassName = Defs.getDefaultClassName(Defs.ClassName.OR_UI_MANAGER); protected String gameStatusClassName = Defs.getDefaultClassName(Defs.ClassName.GAME_STATUS); protected String statusWindowClassName = Defs.getDefaultClassName(Defs.ClassName.STATUS_WINDOW); ! protected PlayerManager playerManager; protected CompanyManagerI companyManager; protected PhaseManager phaseManager; ! protected List<Player> players; protected List<String> playerNames; --- 35,48 ---- protected Class<? extends OperatingRound> operatingRoundClass = OperatingRound.class; ! // Variable UI Class names protected String orUIManagerClassName = Defs.getDefaultClassName(Defs.ClassName.OR_UI_MANAGER); protected String gameStatusClassName = Defs.getDefaultClassName(Defs.ClassName.GAME_STATUS); protected String statusWindowClassName = Defs.getDefaultClassName(Defs.ClassName.STATUS_WINDOW); ! protected PlayerManager playerManager; protected CompanyManagerI companyManager; protected PhaseManager phaseManager; ! protected List<Player> players; protected List<String> playerNames; *************** *** 70,74 **** protected IntegerState srNumber = new IntegerState ("SRNumber"); ! protected IntegerState absoluteORNumber = new IntegerState("AbsoluteORNUmber"); --- 71,75 ---- protected IntegerState srNumber = new IntegerState ("SRNumber"); ! protected IntegerState absoluteORNumber = new IntegerState("AbsoluteORNUmber"); *************** *** 110,114 **** /** * Private constructor. ! * */ public GameManager() { --- 111,115 ---- /** * Private constructor. ! * */ public GameManager() { *************** *** 116,121 **** } ! /** ! * @see rails.game.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) */ public void configureFromXML(Tag tag) throws ConfigurationException { --- 117,122 ---- } ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#configureFromXML(rails.util.Tag) */ public void configureFromXML(Tag tag) throws ConfigurationException { *************** *** 269,273 **** } } ! /** Check if a classname can be instantiated. * Throws a ConfiguratioNException if not. --- 270,274 ---- } } ! /** Check if a classname can be instantiated. * Throws a ConfiguratioNException if not. *************** *** 275,281 **** * @throws ConfigurationException */ ! protected void canClassBeInstantiated (String className) throws ConfigurationException { ! try { Class.forName(className); --- 276,282 ---- * @throws ConfigurationException */ ! protected void canClassBeInstantiated (String className) throws ConfigurationException { ! try { Class.forName(className); *************** *** 286,289 **** --- 287,293 ---- } + /* (non-Javadoc) + * @see rails.game.GameManagerI#startGame(rails.game.PlayerManager, rails.game.CompanyManagerI, rails.game.PhaseManager) + */ public void startGame(PlayerManager playerManager, CompanyManagerI companyManager, *************** *** 292,301 **** this.companyManager = companyManager; this.phaseManager = phaseManager; ! players = playerManager.getPlayers(); playerNames = playerManager.getPlayerNames(); numberOfPlayers = players.size(); priorityPlayer.setState(players.get(0)); ! setGameParameters(); --- 296,305 ---- this.companyManager = companyManager; this.phaseManager = phaseManager; ! players = playerManager.getPlayers(); playerNames = playerManager.getPlayerNames(); numberOfPlayers = players.size(); priorityPlayer.setState(players.get(0)); ! setGameParameters(); *************** *** 312,318 **** MoveSet.enable(); } ! private void setGameParameters () { ! for (PublicCompanyI company : companyManager.getAllPublicCompanies()) { hasAnyParPrice = hasAnyParPrice || company.hasParPrice(); --- 316,322 ---- MoveSet.enable(); } ! private void setGameParameters () { ! for (PublicCompanyI company : companyManager.getAllPublicCompanies()) { hasAnyParPrice = hasAnyParPrice || company.hasParPrice(); *************** *** 320,324 **** canAnyCompanyHoldShares = canAnyCompanyHoldShares || company.canHoldOwnShares(); } ! loop: for (PrivateCompanyI company : companyManager.getAllPrivateCompanies()) { for (SpecialPropertyI sp : company.getSpecialProperties()) { --- 324,328 ---- canAnyCompanyHoldShares = canAnyCompanyHoldShares || company.canHoldOwnShares(); } ! loop: for (PrivateCompanyI company : companyManager.getAllPrivateCompanies()) { for (SpecialPropertyI sp : company.getSpecialProperties()) { *************** *** 329,333 **** } } ! } } --- 333,337 ---- } } ! } } *************** *** 336,355 **** * @return instance of GameManager */ ! public static GameManager getInstance() { return instance; } ! public CompanyManagerI getCompanyManager() { return companyManager; } ! public void setRound(RoundI round) { currentRound.set(round); } ! /** ! * Should be called by each Round when it finishes. ! * ! * @param round The object that represents the finishing round. */ public void nextRound(RoundI round) { --- 340,363 ---- * @return instance of GameManager */ ! public static GameManagerI getInstance() { return instance; } ! ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#getCompanyManager() ! */ public CompanyManagerI getCompanyManager() { return companyManager; } ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#setRound(rails.game.RoundI) ! */ ! private void setRound(RoundI round) { currentRound.set(round); } ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#nextRound(rails.game.RoundI) */ public void nextRound(RoundI round) { *************** *** 412,417 **** } StartRound startRound = createRound (startRoundClass); ! startRound.setGameManager(this); ! startRound.start (startPacket); } --- 420,424 ---- } StartRound startRound = createRound (startRoundClass); ! startRound.start (); } *************** *** 424,438 **** protected void startOperatingRound(boolean operate) { log.debug("Operating round started with operate-flag=" + operate); ! OperatingRound or = createRound(operatingRoundClass); if (operate) absoluteORNumber.add(1); ! or.start(operate, getCompositeORNumber()); } ! ! protected <T extends Round> T createRound (Class<T> roundClass) { T round = null; try { ! round = roundClass.newInstance(); } catch (Exception e) { log.fatal("Cannot instantiate class " --- 431,446 ---- protected void startOperatingRound(boolean operate) { log.debug("Operating round started with operate-flag=" + operate); ! OperatingRound or = createRound(operatingRoundClass); if (operate) absoluteORNumber.add(1); ! or.start(operate); } ! ! protected <T extends RoundI> T createRound (Class<T> roundClass) { T round = null; try { ! Constructor<T> cons = roundClass.getConstructor(GameManagerI.class); ! round = cons.newInstance(this); } catch (Exception e) { log.fatal("Cannot instantiate class " *************** *** 440,476 **** System.exit(1); } ! round.setGameManager (this); return round; } public String getCompositeORNumber() { return srNumber.intValue() + "." + relativeORNumber.intValue(); } ! public int getSRNumber () { return srNumber.intValue(); } public void startShareSellingRound(OperatingRound or, PublicCompanyI companyNeedingTrain, int cashToRaise) { interruptedRound = getCurrentRound(); ! new ShareSellingRound(this, companyNeedingTrain, cashToRaise).start(); } ! public void startTreasuryShareTradingRound(OperatingRound or, ! PublicCompanyI companyTradingShares) { interruptedRound = getCurrentRound(); ! new TreasuryShareRound(this, companyTradingShares).start(); } ! /** ! * The central server-side method that takes a client-side initiated action ! * and processes it. ! * ! * @param action A PossibleAction subclass object sent by the client. ! * @return TRUE is the action was valid. */ public boolean process(PossibleAction action) { --- 448,511 ---- System.exit(1); } ! setRound (round); ! return round; ! } ! ! protected <T extends RoundI, U extends RoundI> ! T createRound (Class<T> roundClass, U parentRound) { ! ! if (parentRound == null) { ! return createRound (roundClass); ! } ! ! T round = null; ! try { ! Constructor<T> cons = roundClass.getConstructor(GameManagerI.class, RoundI.class); ! round = cons.newInstance(this, parentRound); ! } catch (Exception e) { ! log.fatal("Cannot instantiate class " ! + roundClass.getName(), e); ! System.exit(1); ! } ! setRound (round); return round; } + /* (non-Javadoc) + * @see rails.game.GameManagerI#getCompositeORNumber() + */ public String getCompositeORNumber() { return srNumber.intValue() + "." + relativeORNumber.intValue(); } ! ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#getSRNumber() ! */ public int getSRNumber () { return srNumber.intValue(); } + /* (non-Javadoc) + * @see rails.game.GameManagerI#startShareSellingRound(rails.game.OperatingRound, rails.game.PublicCompanyI, int) + */ public void startShareSellingRound(OperatingRound or, PublicCompanyI companyNeedingTrain, int cashToRaise) { interruptedRound = getCurrentRound(); ! createRound (ShareSellingRound.class, interruptedRound).start(); } ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#startTreasuryShareTradingRound(rails.game.OperatingRound, rails.game.PublicCompanyI) ! */ ! public void startTreasuryShareTradingRound() { interruptedRound = getCurrentRound(); ! createRound (TreasuryShareRound.class, interruptedRound).start(); } ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#process(rails.game.action.PossibleAction) */ public boolean process(PossibleAction action) { *************** *** 566,569 **** --- 601,607 ---- } + /* (non-Javadoc) + * @see rails.game.GameManagerI#processOnReload(java.util.List) + */ public void processOnReload(List<PossibleAction> actions) throws Exception { *************** *** 609,612 **** --- 647,653 ---- } + /* (non-Javadoc) + * @see rails.game.GameManagerI#finishShareSellingRound() + */ public void finishShareSellingRound() { setRound(interruptedRound); *************** *** 614,617 **** --- 655,661 ---- } + /* (non-Javadoc) + * @see rails.game.GameManagerI#finishTreasuryShareRound() + */ public void finishTreasuryShareRound() { setRound(interruptedRound); *************** *** 619,622 **** --- 663,669 ---- } + /* (non-Javadoc) + * @see rails.game.GameManagerI#registerBankruptcy() + */ public void registerBankruptcy() { endedByBankruptcy = true; *************** *** 639,646 **** } ! /** ! * To be called by the UI to check if the rails.game is over. ! * ! * @return */ public boolean isGameOver() { --- 686,691 ---- } ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#isGameOver() */ public boolean isGameOver() { *************** *** 648,651 **** --- 693,699 ---- } + /* (non-Javadoc) + * @see rails.game.GameManagerI#logGameReport() + */ public void logGameReport() { *************** *** 653,660 **** } ! /** ! * Create a HTML-formatted rails.game status report. ! * ! * @return */ public String getGameReport() { --- 701,706 ---- } ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#getGameReport() */ public String getGameReport() { *************** *** 684,691 **** } ! /** ! * Should be called whenever a Phase changes. The effect on the number of ! * ORs is delayed until a StockRound finishes. ! * */ public RoundI getCurrentRound() { --- 730,735 ---- } ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#getCurrentRound() */ public RoundI getCurrentRound() { *************** *** 693,698 **** } ! /** ! * @return Returns the currentPlayerIndex. */ public int getCurrentPlayerIndex() { --- 737,742 ---- } ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#getCurrentPlayerIndex() */ public int getCurrentPlayerIndex() { *************** *** 700,705 **** } ! /** ! * @param currentPlayerIndex The currentPlayerIndex to set. */ public void setCurrentPlayerIndex(int currentPlayerIndex) { --- 744,749 ---- } ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#setCurrentPlayerIndex(int) */ public void setCurrentPlayerIndex(int currentPlayerIndex) { *************** *** 708,718 **** } public void setCurrentPlayer(Player player) { currentPlayer.set(player); } ! /** ! * Set priority deal to the player after the current player. ! * */ public void setPriorityPlayer() { --- 752,764 ---- } + /* (non-Javadoc) + * @see rails.game.GameManagerI#setCurrentPlayer(rails.game.Player) + */ public void setCurrentPlayer(Player player) { currentPlayer.set(player); } ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#setPriorityPlayer() */ public void setPriorityPlayer() { *************** *** 723,726 **** --- 769,775 ---- } + /* (non-Javadoc) + * @see rails.game.GameManagerI#setPriorityPlayer(rails.game.Player) + */ public void setPriorityPlayer(Player player) { priorityPlayer.set(player); *************** *** 729,734 **** } ! /** ! * @return Returns the priorityPlayer. */ public Player getPriorityPlayer() { --- 778,783 ---- } ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#getPriorityPlayer() */ public Player getPriorityPlayer() { *************** *** 736,741 **** } ! /** ! * @return Returns the currentPlayer. */ public Player getCurrentPlayer() { --- 785,790 ---- } ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#getCurrentPlayer() */ public Player getCurrentPlayer() { *************** *** 743,748 **** } ! /** ! * @return Returns the players. */ public List<Player> getPlayers() { --- 792,797 ---- } ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#getPlayers() */ public List<Player> getPlayers() { *************** *** 750,779 **** } public int getNumberOfPlayers() { return numberOfPlayers; } ! public List<String> getPlayerNames() { return playerNames; } ! public List<PublicCompanyI> getAllPublicCompanies() { return companyManager.getAllPublicCompanies(); } ! public List<PrivateCompanyI> getAllPrivateCompanies() { return companyManager.getAllPrivateCompanies(); } ! ! /** ! * Return a player by its index in the list, modulo the number of players. ! * ! * @param index The player index. ! * @return A player object. */ public Player getPlayerByIndex(int index) { return players.get(index % numberOfPlayers); } ! public void setNextPlayer() { int currentPlayerIndex = getCurrentPlayerIndex(); --- 799,840 ---- } + /* (non-Javadoc) + * @see rails.game.GameManagerI#getNumberOfPlayers() + */ public int getNumberOfPlayers() { return numberOfPlayers; } ! ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#getPlayerNames() ! */ public List<String> getPlayerNames() { return playerNames; } ! ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#getAllPublicCompanies() ! */ public List<PublicCompanyI> getAllPublicCompanies() { return companyManager.getAllPublicCompanies(); } ! ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#getAllPrivateCompanies() ! */ public List<PrivateCompanyI> getAllPrivateCompanies() { return companyManager.getAllPrivateCompanies(); } ! ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#getPlayerByIndex(int) */ public Player getPlayerByIndex(int index) { return players.get(index % numberOfPlayers); } ! ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#setNextPlayer() ! */ public void setNextPlayer() { int currentPlayerIndex = getCurrentPlayerIndex(); *************** *** 782,787 **** } ! /** ! * @return the StartPacket */ public StartPacket getStartPacket() { --- 843,848 ---- } ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#getStartPacket() */ public StartPacket getStartPacket() { *************** *** 789,799 **** } ! /** ! * @return Current phase */ public PhaseI getCurrentPhase() { return phaseManager.getCurrentPhase(); } ! public PhaseManager getPhaseManager() { return phaseManager; --- 850,863 ---- } ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#getCurrentPhase() */ public PhaseI getCurrentPhase() { return phaseManager.getCurrentPhase(); } ! ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#getPhaseManager() ! */ public PhaseManager getPhaseManager() { return phaseManager; *************** *** 812,829 **** } public String getHelp() { return getCurrentRound().getHelp(); } public boolean canAnyCompanyHoldShares() { return canAnyCompanyHoldShares; } public String getClassName (Defs.ClassName key) { ! switch (key) { case OR_UI_MANAGER: return orUIManagerClassName; ! case STATUS_WINDOW: return statusWindowClassName; --- 876,902 ---- } + /* (non-Javadoc) + * @see rails.game.GameManagerI#getHelp() + */ public String getHelp() { return getCurrentRound().getHelp(); } + /* (non-Javadoc) + * @see rails.game.GameManagerI#canAnyCompanyHoldShares() + */ public boolean canAnyCompanyHoldShares() { return canAnyCompanyHoldShares; } + /* (non-Javadoc) + * @see rails.game.GameManagerI#getClassName(rails.common.Defs.ClassName) + */ public String getClassName (Defs.ClassName key) { ! switch (key) { case OR_UI_MANAGER: return orUIManagerClassName; ! case STATUS_WINDOW: return statusWindowClassName; *************** *** 831,835 **** case GAME_STATUS: return gameStatusClassName; ! default: return ""; --- 904,908 ---- case GAME_STATUS: return gameStatusClassName; ! default: return ""; *************** *** 837,848 **** } public int getStockRoundSequenceRule() { return stockRoundSequenceRule; } public int getTreasuryShareLimit() { return treasuryShareLimit; } ! public Object getCommonParameter (Defs.Parm key) { switch (key) { --- 910,930 ---- } + /* (non-Javadoc) + * @see rails.game.GameManagerI#getStockRoundSequenceRule() + */ public int getStockRoundSequenceRule() { return stockRoundSequenceRule; } + /* (non-Javadoc) + * @see rails.game.GameManagerI#getTreasuryShareLimit() + */ public int getTreasuryShareLimit() { return treasuryShareLimit; } ! ! /* (non-Javadoc) ! * @see rails.game.GameManagerI#getCommonParameter(rails.common.Defs.Parm) ! */ public Object getCommonParameter (Defs.Parm key) { switch (key) { *************** *** 860,863 **** } ! } --- 942,945 ---- } ! } |