Fix: A Better Method for Identifying the first Player of the Round.
This commit is contained in:
+39
-17
@@ -579,7 +579,7 @@ public class TaskbarController {
|
|||||||
// return;
|
// return;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
if (isFirstPlayerOfPhase(state, me) && !isFirstPreflopPlayer(state, me)) {
|
if (isFirstPlayerOfPhase(state, me)) {
|
||||||
setActionEnabled(betButton, true);
|
setActionEnabled(betButton, true);
|
||||||
setActionEnabled(callButton, false);
|
setActionEnabled(callButton, false);
|
||||||
// setActionEnabled(foldButton, false);
|
// setActionEnabled(foldButton, false);
|
||||||
@@ -765,6 +765,33 @@ public class TaskbarController {
|
|||||||
return isInitialPreflopBlindLayout(state);
|
return isInitialPreflopBlindLayout(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the first player who can still act when starting from a specific index.
|
||||||
|
*
|
||||||
|
* @param state The current game state.
|
||||||
|
* @param startIndex The index from which the search should begin.
|
||||||
|
* @return The first eligible player index, or -1 if none can act.
|
||||||
|
*/
|
||||||
|
private int findFirstActingPlayerIndex(GameState state, int startIndex) {
|
||||||
|
if (state == null || state.players == null || state.players.isEmpty()) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int size = state.players.size();
|
||||||
|
int normalizedStart = ((startIndex % size) + size) % size;
|
||||||
|
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
int candidate = (normalizedStart + i) % size;
|
||||||
|
Player player = state.players.get(candidate);
|
||||||
|
|
||||||
|
if (player != null && player.getState() != PlayerState.FOLDED && player.getChips() > 0) {
|
||||||
|
return candidate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the current player is the first to act on the flop.
|
* Checks if the current player is the first to act on the flop.
|
||||||
*
|
*
|
||||||
@@ -794,19 +821,10 @@ public class TaskbarController {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int firstIndex = (state.dealer + 1) % size;
|
int firstIndex = findFirstActingPlayerIndex(state, (state.dealer + 1) % size);
|
||||||
|
|
||||||
for (int i = 0; i < size; i++) {
|
if (firstIndex < 0) {
|
||||||
|
return false;
|
||||||
int candidate = (firstIndex + i) % size;
|
|
||||||
|
|
||||||
Player p = state.players.get(candidate);
|
|
||||||
|
|
||||||
if (p != null && p.getState() != PlayerState.FOLDED && p.getChips() > 0) {
|
|
||||||
|
|
||||||
firstIndex = candidate;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return state.activePlayer == firstIndex && myIndex == firstIndex;
|
return state.activePlayer == firstIndex && myIndex == firstIndex;
|
||||||
@@ -839,14 +857,18 @@ public class TaskbarController {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int dealer = state.dealer;
|
|
||||||
|
|
||||||
int firstIndex;
|
int firstIndex;
|
||||||
|
|
||||||
if (isPreflop(state.phase)) {
|
if (isPreflop(state.phase)) {
|
||||||
firstIndex = (size == 2) ? dealer : (dealer + DEALER_OFFSET) % size;
|
firstIndex =
|
||||||
|
findFirstActingPlayerIndex(
|
||||||
|
state, (size == 2) ? state.dealer : (state.dealer + DEALER_OFFSET) % size);
|
||||||
} else {
|
} else {
|
||||||
firstIndex = (dealer + 1) % size;
|
firstIndex = findFirstActingPlayerIndex(state, (state.dealer + 1) % size);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (firstIndex < 0) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return state.activePlayer == firstIndex && myIndex == firstIndex;
|
return state.activePlayer == firstIndex && myIndex == firstIndex;
|
||||||
|
|||||||
Reference in New Issue
Block a user