У меня есть следующие состояния, которые предназначены для имитации игровых состояний
enum GameStates{ Bet, CompleteBet, Bonus,CompleteBonus, Jackpot, CompleteJackpot }
Только состояние Bet
является внешним для игры (может быть вызвано извне).Любое другое состояние является внутренним, что вызвано самой игрой.
Если я нахожусь в состоянии CompleteBet
, игра может перейти в состояние Bonus
, но также может быть возвращена в состояние Bet
(это для каждой конфигурации игры).
Та же самая ситуация повторяется в состоянии CompleteBonus
.Игра может перейти в состояние Bet
или Jackpot
.
Сейчас я решаю эту ситуацию со следующей if - else
логикой
// In CompleteBet state
if (bonus.isEnabled) {
setState(Bonus);
} else {
if (jackpot.isEnabled) {
setState(Jackpot);
} else {
setState(Bet);
}
// in CompleteBonus state
if (jackpot.isEnabled) {
setState(Jackpot);
} else {
setState(Bet);
}
}
Но, очевидно, это не хорошее решение,Может быть, мне нужно изменить мой конечный автомат?Любые предложения приветствуются
Редактировать: Фактически GameState
enum определяется следующим образом:
enum GameState implements TransferState {
WITHDRAW {
@Override
public void initiateStep(final GameContext context) {
//some logic which triggers complete transfer
}
},
COMPLETE_WITHDRAW {
@Override
public void completeTransfer(final GameContext context) {
// if bonus is enabled;
if (true) {
context.setState(BONUS);
} else {
// if remote gaming is on
if (true) {
context.setState(REMOTE_GAME);
} else {
context.setState(WITHDRAW);
}
}
}
}
// ...
}
initiateTransfer
и completeTransfer
определены как default
методы в интерфейсе TransferState
.