package rules; import java.io.Serializable; import utility.GuiUtility; public class NextTurn implements Serializable { public enum NextTurnOption { CLASSIC, INCREASING_TOGETHER, INCREASING_SEPARATELY, DIFFERENT_NUMBER_OF_TURNS }; /** * */ private static final long serialVersionUID = 4504947872189771271L; public NextTurn(NextTurnOption option, int whiteMoves, int blackMoves, int increment) { mNumberOfWhiteMovesBeforeTurnChange = whiteMoves; mNumberOfBlackMovesBeforeTurnChange = blackMoves; mTurnIncrement = increment; mCurrentNumberOfMovesMade = 0; mIsBlackMove = false; mNextTurnOption = option; } public boolean getNextTurn() { switch (mNextTurnOption) { case CLASSIC: return classicNextTurn(); case INCREASING_TOGETHER: return increasingTurnsTogether(); case INCREASING_SEPARATELY: return increasingTurnsSeparately(); case DIFFERENT_NUMBER_OF_TURNS: return differentNumberOfTurns(); default: return false; } } public boolean undo(boolean isPlayback) { switch (mNextTurnOption) { case CLASSIC: return undoClassic(isPlayback); case INCREASING_TOGETHER: return undoIncreasingTurnsTogether(); case INCREASING_SEPARATELY: return undoIncreasingTurnsSeparately(); case DIFFERENT_NUMBER_OF_TURNS: return undoDifferentNumberOfTurns(); default: return false; } } public int getWhiteMoves() { return mNumberOfWhiteMovesBeforeTurnChange; } public int getBlackMoves() { return mNumberOfBlackMovesBeforeTurnChange; } public int getIncrement() { return mTurnIncrement; } private boolean classicNextTurn() { mIsBlackMove = !mIsBlackMove; GuiUtility.getChessCrafter().getPlayGameScreen(null).turn(mIsBlackMove); return mIsBlackMove; } private boolean undoClassic(boolean isPlayback) { mIsBlackMove = !mIsBlackMove; if (isPlayback) GuiUtility.getChessCrafter().getPlayGameScreen(null).turn(mIsBlackMove); return mIsBlackMove; } private boolean increasingTurnsTogether() { if (++mCurrentNumberOfMovesMade >= mNumberOfWhiteMovesBeforeTurnChange) { mIsBlackMove = !mIsBlackMove; GuiUtility.getChessCrafter().getPlayGameScreen(null).turn(mIsBlackMove); mNumberOfWhiteMovesBeforeTurnChange += mTurnIncrement; mCurrentNumberOfMovesMade = 0; } return mIsBlackMove; } private boolean undoIncreasingTurnsTogether() { if (--mCurrentNumberOfMovesMade < 0) { mIsBlackMove = !mIsBlackMove; GuiUtility.getChessCrafter().getPlayGameScreen(null).turn(mIsBlackMove); mNumberOfWhiteMovesBeforeTurnChange -= mTurnIncrement; mCurrentNumberOfMovesMade = mNumberOfWhiteMovesBeforeTurnChange - 1; } return mIsBlackMove; } private boolean increasingTurnsSeparately() { if (++mCurrentNumberOfMovesMade >= (mIsBlackMove ? mNumberOfBlackMovesBeforeTurnChange : mNumberOfWhiteMovesBeforeTurnChange)) { mIsBlackMove = !mIsBlackMove; GuiUtility.getChessCrafter().getPlayGameScreen(null).turn(mIsBlackMove); mNumberOfBlackMovesBeforeTurnChange += mTurnIncrement; mNumberOfWhiteMovesBeforeTurnChange += mTurnIncrement; mCurrentNumberOfMovesMade = 0; } return mIsBlackMove; } private boolean undoIncreasingTurnsSeparately() { if (--mCurrentNumberOfMovesMade < 0) { mIsBlackMove = !mIsBlackMove; mNumberOfBlackMovesBeforeTurnChange -= mTurnIncrement; mNumberOfWhiteMovesBeforeTurnChange -= mTurnIncrement; GuiUtility.getChessCrafter().getPlayGameScreen(null).turn(mIsBlackMove); mCurrentNumberOfMovesMade = mIsBlackMove ? mNumberOfBlackMovesBeforeTurnChange : mNumberOfWhiteMovesBeforeTurnChange; } return mIsBlackMove; } private boolean differentNumberOfTurns() { if (++mCurrentNumberOfMovesMade >= (mIsBlackMove ? mNumberOfBlackMovesBeforeTurnChange : mNumberOfWhiteMovesBeforeTurnChange)) { mIsBlackMove = !mIsBlackMove; GuiUtility.getChessCrafter().getPlayGameScreen(null).turn(mIsBlackMove); mCurrentNumberOfMovesMade = 0; } return mIsBlackMove; } private boolean undoDifferentNumberOfTurns() { if (--mCurrentNumberOfMovesMade < 0) { mIsBlackMove = !mIsBlackMove; GuiUtility.getChessCrafter().getPlayGameScreen(null).turn(mIsBlackMove); mCurrentNumberOfMovesMade = mIsBlackMove ? mNumberOfBlackMovesBeforeTurnChange : mNumberOfWhiteMovesBeforeTurnChange; } return mIsBlackMove; } private NextTurnOption mNextTurnOption; private int mNumberOfWhiteMovesBeforeTurnChange; private int mNumberOfBlackMovesBeforeTurnChange; private int mCurrentNumberOfMovesMade; private int mTurnIncrement; private boolean mIsBlackMove; }