Dados 4 jugadores en un juego de cartas de corazones donde los jugadores juegan en sentido contrario a las agujas del reloj: p1 -> p2 -> p3 -> p4.
Si p3 tiene que jugar primero, seleccione la tarjeta para p3 y p4, luego espere a que el usuario seleccione la tarjeta, luego reanude a p2 para seleccionar la tarjeta.
Si p4 comienza, seleccione p4, espere p1 y reanude p2 y p3...
Esta es la alternancia que estoy tratando de averiguar.
Ejemplo: la computadora elige
{p2: ['A', '♣'], p3:['2', '♣'], p4:['J', '♣'] }y el jugador elige
p1:['Q', '♣']En este turno, p3 comienza, luego p4, luego espera a p1 (usuario) y finalmente reanuda para p2
Intenté tener dos estados:
const [playerCard, setplayerCard] = useState(null) const [compCards, setCompCard] = useState(null)pero estoy teniendo dificultades para cambiar entre los dos. También probé generadores pero soy nuevo en ese tema. Se agradecerá cualquier código o pseudocódigo que pueda ser de orientación.
Tendrás que definir un montón de funciones (como cualquier juego), si se alcanza o no el objetivo, el estado actual y la función para actualizar el estado actual, el turno actual y una lista de acciones que se pueden completar según sobre el estado actual del juego.
const enum PLAYER_TYPES { COMPUTER, HUMAN, } const gameConfig = [ PLAYER_TYPES.HUMAN, PLAYER_TYPES.COMPUTER, PLAYER_TYPES.COMPUTER, PLAYER_TYPES.COMPUTER, ]; const nextTurn = (turn) => { return (turn % gameConfig.length) + 1; }; const Game = () => { const [turn, setTurn] = useState(1); // Define actions that can happen based on the state of the game const actions = (turn) => { if (gameIsOver()) { return; } const type = gameConfig[turn - 1]; let choice; switch(type) { case PLAYER_TYPES.HUMAN: { choice = await userChoice(turn); break; } case PLAYER_TYPES.COMPUTER: { choice = aiChoice(turn); break; } } setCards(turn, choice); setTurn(nextTurn(turn)); }; // Run the action for this turn useEffect(() => { actions(turn); }, [turn]); };