我在我的Java android二十一點遊戲的switch語句中有這麼大的代碼塊,我一直試圖重構它,但不確定最好的方式來清理它!目前它幾乎是不可讀的,並且存在一些錯誤,即當莊家贏得實際贏家時,玩家贏得了一手牌。任何正確的方向或幫助提示將是驚人的。重構java開關語句(二十一點)
public void checkTable() {
switch (tableState) {
case NEW_GAME:
setUpNewGame();
break;
case PLAYING: {
Player currentPlayer = this.players.get(currentPlayerIndex);
Player.State currentState = currentPlayer.getState();
if (currentState != Player.State.STAND ||
currentState != Player.State.BUST) {
if (currentPlayer.askAction() == Player.Action.HIT) {
currentPlayer.hit(deck.dealCard());
if (currentPlayer.getHandValue() > 21) {
currentPlayer.setState(Player.State.BUST);
} else if (currentPlayer.getHandValue() == 21) {
currentPlayer.setState(Player.State.STAND);
}
}
if (currentPlayer.askAction() == Player.Action.STAND) {
currentPlayer.setState(Player.State.STAND);
currentPlayer.setAction(Player.Action.WAIT);
currentPlayerIndex++;
}
else if (currentState != Player.State.BUST) {
currentPlayer.setAction(Player.Action.WAIT);
currentPlayerIndex++;
}
}
if (currentPlayerIndex > players.size() - 1)
tableState = RESOLVE;
else
break;
}
case RESOLVE:
while (this.dealer.getHandValue() < 17)
this.dealer.hit(deck.dealCard());
if(this.dealer.getHandValue() > 21)
this.dealer.setState(Player.State.BUST);
if (this.dealer.getState() == Player.State.BUST) {
for (int i = 0; i < this.players.size(); i++) {
if (this.players.get(i).getState() != Player.State.BUST) {
this.players.get(i).setState(Player.State.WON);
}
}
}
else
{
for (int i = 0; i < this.players.size(); i++) {
if (this.players.get(i).getState() != Player.State.BUST) {
if (this.players.get(i).getHandValue() < dealer.getHandValue())
players.get(i).setState(Player.State.LOST);
if (players.get(i).getHandValue() < dealer.getHandValue())
players.get(i).setState(Player.State.WON);
if (players.get(i).getHandValue() == dealer.getHandValue())
players.get(i).setState(Player.State.PUSH);
}
}
}
default:
break;
}
}
我想通過把每個開關盒的內容到一個單獨的方法來啓動。即使它們沒有成爲你的最終答案,這將有助於清理這段代碼並使其更易於閱讀。 – Brick
謝謝磚!我現在將它們分開,仍然在整理代碼,但將它們分開是一個好主意 – kaygee