Files
snatchgame/game-sequence.mmd
2025-08-10 16:44:48 -06:00

76 lines
2.3 KiB
Plaintext

sequenceDiagram
participant P1 as Player 1 (10 pavos)
participant P2 as Player 2 (10 elotes)
participant S as Server/Room
participant UI as UI Components
Note over P1,P2: Inicio de Demo Play
S->>P1: Asignar rol P1, tokens iniciales
S->>P2: Asignar rol P2, tokens iniciales
Note over UI: Jugadores pueden cambiar variante en cualquier momento
P1->>S: setVariant(G1-G5)
S->>S: resetRound(), currentRound=1, status=PLAYING
S-->>P1: broadcast variantChanged
S-->>P2: broadcast variantChanged
loop Cada Ronda (1-3)
alt G2 - Regla contraproductiva
Note over P2: Checkbox "Forzar oferta" (activo por defecto)
P2->>S: p2Force(true/false)
S-->>UI: forcedByP2 = true/false
Note over P1: Si forzado, botón "No ofrecer" deshabilitado
end
alt G5 - Cheap talk
Note over P1,P2: Chat no vinculante por 1 minuto
end
alt P1 decide ofrecer
P1->>S: proposeOffer({offerPavo, offerElote, requestPavo, requestElote})
S->>S: Validar tokens disponibles
S-->>UI: offerActive = true, ocultar OfferControls
S-->>P2: Mostrar oferta y botones de decisión
P2->>S: p2Action(accept/reject/snatch)
S->>S: Prevenir múltiples acciones (if p2Action exists, return)
alt accept
S->>S: Intercambiar tokens ambos lados
S->>S: Auto-avanzar ronda
else reject
S->>S: Sin cambios en tokens
S->>S: Auto-avanzar ronda
else snatch
S->>S: P2 recibe oferta sin pagar
alt G3 - Token de vergüenza
S-->>UI: Mostrar botones vergüenza a P1
P1->>S: assignShame(true/false)
alt true
S->>P2: shameTokens += 1
end
S->>S: Auto-avanzar ronda
else G4 - Derechos mínimos
S-->>UI: Mostrar botones denuncia a P1
P1->>S: report(true/false)
alt true
S->>S: Revertir robo
S->>S: P1 recibe pedido sin dar oferta (sanción inversa)
end
S->>S: Auto-avanzar ronda
else Otros
S->>S: Auto-avanzar ronda
end
end
else P1 no ofrece
P1->>S: noOffer()
S->>S: p1Action = "no_offer"
S->>S: Auto-avanzar ronda
end
end
Note over S: Después de ronda 3
S->>S: gameStatus = FINISHED
Note over UI: Al cambiar variante, reinicia todo