package framework.gameMain; import java.util.Stack; import java.util.Timer; import java.util.TimerTask; /** * 一般的なゲーム用のクラス(状態遷移を持つことができる) * @author 新田直也 * */ public abstract class BaseGame extends AbstractGame { Stack<AbstractGameState> gameStateStack = new Stack<AbstractGameState>(); public abstract AbstractGameState getInitialGameState(); public abstract boolean canGoPrevGameState(); public abstract AbstractGameState changeNextGameState(); public BaseGame() { super(); pushNewGameState(getInitialGameState()); } protected AbstractGameState getCurrentGameState() { return gameStateStack.peek(); } public void goNextGameState(){ deactivateState(getCurrentGameState()); AbstractGameState g = changeNextGameState(); pushNewGameState(g); activateState(g); } public void goPrevGameState(){ if(canGoPrevGameState()){ deactivateState(getCurrentGameState()); popGameState(); activateState(getCurrentGameState()); } } private void pushNewGameState(AbstractGameState g) { gameStateStack.push(g); } private void popGameState() { gameStateStack.pop(); } }