diff --git a/examplebot/bot.go b/examplebot/bot.go index cb5b5ab..edb4cc4 100644 --- a/examplebot/bot.go +++ b/examplebot/bot.go @@ -35,8 +35,8 @@ func possibleActionsMap(gs truco.ClientGameState) map[string]truco.Action { func filter(possibleActions map[string]truco.Action, candidateActions ...truco.Action) []truco.Action { filteredActions := []truco.Action{} for _, action := range candidateActions { - if _, ok := possibleActions[action.GetName()]; ok { - filteredActions = append(filteredActions, action) + if possibleAction, ok := possibleActions[action.GetName()]; ok { + filteredActions = append(filteredActions, possibleAction) } } return filteredActions @@ -95,7 +95,7 @@ func canAnyEnvido(actions map[string]truco.Action) bool { truco.NewActionSayEnvido(1), truco.NewActionSayRealEnvido(1), truco.NewActionSayFaltaEnvido(1), - truco.NewActionSayEnvidoQuiero(0, 1), + truco.NewActionSayEnvidoQuiero(1), truco.NewActionSayEnvidoNoQuiero(1), )) > 0 } @@ -511,7 +511,7 @@ func envidoNoQuiero() truco.Action { return truco.NewActionSayEnvidoNoQuiero(1) } func envidoQuiero() truco.Action { - return truco.NewActionSayEnvidoQuiero(0, 1) + return truco.NewActionSayEnvidoQuiero(1) } func trucoQuiero() truco.Action { return truco.NewActionSayTrucoQuiero(1) diff --git a/exampleclient/ui.go b/exampleclient/ui.go index 3dcb56c..c825f37 100644 --- a/exampleclient/ui.go +++ b/exampleclient/ui.go @@ -98,7 +98,7 @@ func renderScores(rs renderState) { youMano := "" themMano := "" - if rs.gs.TurnPlayerID == rs.gs.YouPlayerID { + if rs.gs.RoundTurnPlayerID == rs.gs.YouPlayerID { youMano = " (mano)" } else { themMano = " (mano)" diff --git a/exampleclient/ui_spanish.go b/exampleclient/ui_spanish.go index 4fe602b..0d38bab 100644 --- a/exampleclient/ui_spanish.go +++ b/exampleclient/ui_spanish.go @@ -44,8 +44,10 @@ func getActionString(log truco.ActionLog, playerID int) string { case truco.SAY_FALTA_ENVIDO: what = fmt.Sprintf("%v falta envido!", said) case truco.SAY_ENVIDO_QUIERO: - action := lastAction.(*truco.ActionSayEnvidoQuiero) - what = fmt.Sprintf("%v quiero con %d", said, action.Score) + what = fmt.Sprintf("%v quiero", said) + case truco.SAY_ENVIDO_SCORE: + action := lastAction.(*truco.ActionSayEnvidoScore) + what = fmt.Sprintf("%d", action.Score) case truco.SAY_ENVIDO_NO_QUIERO: what = fmt.Sprintf("%v no quiero", said) case truco.SAY_TRUCO: @@ -102,6 +104,9 @@ func spanishAction(action truco.Action) string { return "quiero" case truco.SAY_ENVIDO_NO_QUIERO: return "no quiero" + case truco.SAY_ENVIDO_SCORE: + _action := action.(*truco.ActionSayEnvidoScore) + return fmt.Sprintf("%d", _action.Score) case truco.SAY_TRUCO: return "truco" case truco.SAY_TRUCO_QUIERO: diff --git a/truco/action_any_quiero.go b/truco/action_any_quiero.go index b9add39..009980e 100644 --- a/truco/action_any_quiero.go +++ b/truco/action_any_quiero.go @@ -1,7 +1,8 @@ package truco type ActionSayEnvidoNoQuiero struct{ act } -type ActionSayEnvidoQuiero struct { +type ActionSayEnvidoQuiero struct{ act } +type ActionSayEnvidoScore struct { act Score int `json:"score"` } @@ -28,6 +29,17 @@ func (a ActionSayEnvidoQuiero) IsPossible(g GameState) bool { return g.EnvidoSequence.CanAddStep(a.GetName()) } +func (a ActionSayEnvidoScore) IsPossible(g GameState) bool { + if len(g.RoundsLog[g.RoundNumber].ActionsLog) == 0 { + return false + } + lastAction := _deserializeCurrentRoundLastAction(g) + if lastAction.GetName() != SAY_ENVIDO_QUIERO { + return false + } + return g.EnvidoSequence.CanAddStep(a.GetName()) +} + func (a ActionSayTrucoQuiero) IsPossible(g GameState) bool { if g.IsRoundFinished { return false @@ -84,6 +96,14 @@ func (a ActionSayEnvidoQuiero) Run(g *GameState) error { return nil } +func (a ActionSayEnvidoScore) Run(g *GameState) error { + if !a.IsPossible(*g) { + return errActionNotPossible + } + g.EnvidoSequence.AddStep(a.GetName()) + return nil +} + func (a ActionSayTrucoQuiero) Run(g *GameState) error { if !a.IsPossible(*g) { return errActionNotPossible @@ -120,3 +140,9 @@ func (a ActionSayEnvidoNoQuiero) YieldsTurn(g GameState) bool { // In son_buenas/son_mejores/no_quiero, the turn should go to whoever started the sequence return g.TurnPlayerID != g.EnvidoSequence.StartingPlayerID } + +func (a ActionSayEnvidoQuiero) YieldsTurn(g GameState) bool { + // In envido_quiero, the next turn should go to whoever has to reveal the score. + // This should always be the "mano" player. + return g.TurnPlayerID != g.RoundTurnPlayerID +} diff --git a/truco/actions.go b/truco/actions.go index 3c3e98b..3f611f9 100644 --- a/truco/actions.go +++ b/truco/actions.go @@ -41,8 +41,12 @@ func NewActionSayEnvidoNoQuiero(playerID int) Action { return ActionSayEnvidoNoQuiero{act: act{Name: SAY_ENVIDO_NO_QUIERO, PlayerID: playerID}} } -func NewActionSayEnvidoQuiero(score int, playerID int) Action { - return ActionSayEnvidoQuiero{act: act{Name: SAY_ENVIDO_QUIERO, PlayerID: playerID}, Score: score} +func NewActionSayEnvidoQuiero(playerID int) Action { + return ActionSayEnvidoQuiero{act: act{Name: SAY_ENVIDO_QUIERO, PlayerID: playerID}} +} + +func NewActionSayEnvidoScore(score int, playerID int) Action { + return ActionSayEnvidoScore{act: act{Name: SAY_ENVIDO_SCORE, PlayerID: playerID}, Score: score} } func NewActionSayTrucoQuiero(playerID int) Action { diff --git a/truco/envido_sequence.go b/truco/envido_sequence.go index 8c6933a..ca22ede 100644 --- a/truco/envido_sequence.go +++ b/truco/envido_sequence.go @@ -17,6 +17,7 @@ const ( SAY_ME_VOY_AL_MAZO = "say_me_voy_al_mazo" REVEAL_CARD = "reveal_card" CONFIRM_ROUND_FINISHED = "confirm_round_finished" + SAY_ENVIDO_SCORE = "say_envido_score" COST_NOT_READY = -1 COST_FALTA_ENVIDO = -2 @@ -27,53 +28,63 @@ var ( SAY_ENVIDO: COST_NOT_READY, SAY_REAL_ENVIDO: COST_NOT_READY, SAY_FALTA_ENVIDO: COST_NOT_READY, - fmt.Sprintf("%s,%s", SAY_ENVIDO, SAY_ENVIDO): COST_NOT_READY, - fmt.Sprintf("%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO): COST_NOT_READY, - fmt.Sprintf("%s,%s", SAY_ENVIDO, SAY_FALTA_ENVIDO): COST_NOT_READY, - fmt.Sprintf("%s,%s", SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO): COST_NOT_READY, - fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO): COST_NOT_READY, - fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO): COST_NOT_READY, - fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO): COST_NOT_READY, - fmt.Sprintf("%s,%s", SAY_ENVIDO, SAY_ENVIDO_QUIERO): 2, - fmt.Sprintf("%s,%s", SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO): 3, - fmt.Sprintf("%s,%s", SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO): COST_FALTA_ENVIDO, - fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_ENVIDO_QUIERO): 4, - fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO): 5, - fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO): COST_FALTA_ENVIDO, - fmt.Sprintf("%s,%s,%s", SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO): COST_FALTA_ENVIDO, - fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO): 7, - fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO): COST_FALTA_ENVIDO, - fmt.Sprintf("%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO): COST_FALTA_ENVIDO, - fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_MEJORES): 2, - fmt.Sprintf("%s,%s,%s", SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_MEJORES): 3, - fmt.Sprintf("%s,%s,%s", SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_MEJORES): COST_FALTA_ENVIDO, - fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_MEJORES): 4, - fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_MEJORES): 5, - fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_MEJORES): COST_FALTA_ENVIDO, - fmt.Sprintf("%s,%s,%s,%s", SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_MEJORES): COST_FALTA_ENVIDO, - fmt.Sprintf("%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_MEJORES): 7, - fmt.Sprintf("%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_MEJORES): COST_FALTA_ENVIDO, - fmt.Sprintf("%s,%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_MEJORES): COST_FALTA_ENVIDO, - fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_BUENAS): 2, - fmt.Sprintf("%s,%s,%s", SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_BUENAS): 3, - fmt.Sprintf("%s,%s,%s", SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_BUENAS): COST_FALTA_ENVIDO, - fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_BUENAS): 4, - fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_BUENAS): 5, - fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_BUENAS): COST_FALTA_ENVIDO, - fmt.Sprintf("%s,%s,%s,%s", SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_BUENAS): COST_FALTA_ENVIDO, - fmt.Sprintf("%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_BUENAS): 7, - fmt.Sprintf("%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_BUENAS): COST_FALTA_ENVIDO, - fmt.Sprintf("%s,%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_SON_BUENAS): COST_FALTA_ENVIDO, - fmt.Sprintf("%s,%s", SAY_ENVIDO, SAY_ENVIDO_NO_QUIERO): 1, - fmt.Sprintf("%s,%s", SAY_REAL_ENVIDO, SAY_ENVIDO_NO_QUIERO): 1, - fmt.Sprintf("%s,%s", SAY_FALTA_ENVIDO, SAY_ENVIDO_NO_QUIERO): 1, - fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_ENVIDO_NO_QUIERO): 2, - fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_NO_QUIERO): 2, - fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_NO_QUIERO): 2, - fmt.Sprintf("%s,%s,%s", SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_NO_QUIERO): 3, - fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_NO_QUIERO): 4, - fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_NO_QUIERO): 5, - fmt.Sprintf("%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_NO_QUIERO): 7, + fmt.Sprintf("%s,%s", SAY_ENVIDO, SAY_ENVIDO): COST_NOT_READY, + fmt.Sprintf("%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO): COST_NOT_READY, + fmt.Sprintf("%s,%s", SAY_ENVIDO, SAY_FALTA_ENVIDO): COST_NOT_READY, + fmt.Sprintf("%s,%s", SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO): COST_NOT_READY, + fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO): COST_NOT_READY, + fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO): COST_NOT_READY, + fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO): COST_NOT_READY, + fmt.Sprintf("%s,%s", SAY_ENVIDO, SAY_ENVIDO_QUIERO): 2, + fmt.Sprintf("%s,%s", SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO): 3, + fmt.Sprintf("%s,%s", SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_ENVIDO_QUIERO): 4, + fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO): 5, + fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s", SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO): 7, + fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE): 2, + fmt.Sprintf("%s,%s,%s", SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE): 3, + fmt.Sprintf("%s,%s,%s", SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE): 4, + fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE): 5, + fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s,%s", SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE): 7, + fmt.Sprintf("%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_MEJORES): 2, + fmt.Sprintf("%s,%s,%s,%s", SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_MEJORES): 3, + fmt.Sprintf("%s,%s,%s,%s", SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_MEJORES): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_MEJORES): 4, + fmt.Sprintf("%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_MEJORES): 5, + fmt.Sprintf("%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_MEJORES): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s,%s,%s", SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_MEJORES): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_MEJORES): 7, + fmt.Sprintf("%s,%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_MEJORES): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_MEJORES): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_BUENAS): 2, + fmt.Sprintf("%s,%s,%s,%s", SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_BUENAS): 3, + fmt.Sprintf("%s,%s,%s,%s", SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_BUENAS): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_BUENAS): 4, + fmt.Sprintf("%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_BUENAS): 5, + fmt.Sprintf("%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_BUENAS): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s,%s,%s", SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_BUENAS): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_BUENAS): 7, + fmt.Sprintf("%s,%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_BUENAS): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s,%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_QUIERO, SAY_ENVIDO_SCORE, SAY_SON_BUENAS): COST_FALTA_ENVIDO, + fmt.Sprintf("%s,%s", SAY_ENVIDO, SAY_ENVIDO_NO_QUIERO): 1, + fmt.Sprintf("%s,%s", SAY_REAL_ENVIDO, SAY_ENVIDO_NO_QUIERO): 1, + fmt.Sprintf("%s,%s", SAY_FALTA_ENVIDO, SAY_ENVIDO_NO_QUIERO): 1, + fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_ENVIDO_NO_QUIERO): 2, + fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_NO_QUIERO): 2, + fmt.Sprintf("%s,%s,%s", SAY_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_NO_QUIERO): 2, + fmt.Sprintf("%s,%s,%s", SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_NO_QUIERO): 3, + fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_ENVIDO_NO_QUIERO): 4, + fmt.Sprintf("%s,%s,%s,%s", SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_NO_QUIERO): 5, + fmt.Sprintf("%s,%s,%s,%s,%s", SAY_ENVIDO, SAY_ENVIDO, SAY_REAL_ENVIDO, SAY_FALTA_ENVIDO, SAY_ENVIDO_NO_QUIERO): 7, } ) diff --git a/truco/envido_sequence_test.go b/truco/envido_sequence_test.go index fb8517c..1b3009d 100644 --- a/truco/envido_sequence_test.go +++ b/truco/envido_sequence_test.go @@ -26,7 +26,7 @@ func TestEnvidoSequence(t *testing.T) { name: "cannot start with envido_quiero", steps: []testStep{ { - action: NewActionSayEnvidoQuiero(30, 0), + action: NewActionSayEnvidoQuiero(0), expectedIsValid: false, }, }, @@ -67,7 +67,7 @@ func TestEnvidoSequence(t *testing.T) { expectedPlayerTurnAfterRunning: 1, }, { - action: NewActionSayEnvidoQuiero(30, 1), + action: NewActionSayEnvidoQuiero(1), expectedIsValid: true, expectedPlayerTurnAfterRunning: 0, }, @@ -82,7 +82,7 @@ func TestEnvidoSequence(t *testing.T) { expectedPlayerTurnAfterRunning: 1, }, { - action: NewActionSayEnvidoQuiero(30, 1), + action: NewActionSayEnvidoQuiero(1), expectedIsValid: true, expectedPlayerTurnAfterRunning: 0, }, @@ -108,7 +108,7 @@ func TestEnvidoSequence(t *testing.T) { expectedPlayerTurnAfterRunning: 0, }, { - action: NewActionSayEnvidoQuiero(25, 0), + action: NewActionSayEnvidoQuiero(0), expectedIsValid: true, expectedPlayerTurnAfterRunning: 1, }, diff --git a/truco/truco.go b/truco/truco.go index 77d8604..aec4b85 100644 --- a/truco/truco.go +++ b/truco/truco.go @@ -304,7 +304,8 @@ func (g GameState) CalculatePossibleActions() []Action { NewActionSayEnvido(g.TurnPlayerID), NewActionSayRealEnvido(g.TurnPlayerID), NewActionSayFaltaEnvido(g.TurnPlayerID), - NewActionSayEnvidoQuiero(envidoScore, g.TurnPlayerID), + NewActionSayEnvidoQuiero(g.TurnPlayerID), + NewActionSayEnvidoScore(envidoScore, g.TurnPlayerID), NewActionSayEnvidoNoQuiero(g.TurnPlayerID), NewActionSayTruco(g.TurnPlayerID), NewActionSayTrucoQuiero(g.TurnPlayerID), @@ -354,6 +355,8 @@ func DeserializeAction(bs []byte) (Action, error) { action = &ActionSayFaltaEnvido{} case SAY_ENVIDO_QUIERO: action = &ActionSayEnvidoQuiero{} + case SAY_ENVIDO_SCORE: + action = &ActionSayEnvidoScore{} case SAY_ENVIDO_NO_QUIERO: action = &ActionSayEnvidoNoQuiero{} case SAY_TRUCO: @@ -394,6 +397,11 @@ func _serializeActions(as []Action) []json.RawMessage { return _as } +func _deserializeCurrentRoundLastAction(g GameState) Action { + a, _ := DeserializeAction(g.RoundsLog[g.RoundNumber].ActionsLog[len(g.RoundsLog[g.RoundNumber].ActionsLog)-1].Action) + return a +} + func (g *GameState) ToClientGameState(youPlayerID int) ClientGameState { themPlayerID := g.OpponentOf(youPlayerID) diff --git a/truco/truco_test.go b/truco/truco_test.go index 33c4802..5cd6df4 100644 --- a/truco/truco_test.go +++ b/truco/truco_test.go @@ -32,7 +32,7 @@ func TestAfterRealEnvidoOptions(t *testing.T) { expectedActions := []Action{ NewActionSayFaltaEnvido(1), - NewActionSayEnvidoQuiero(gameState.Players[gameState.TurnOpponentPlayerID].Hand.EnvidoScore(), 1), + NewActionSayEnvidoQuiero(1), NewActionSayEnvidoNoQuiero(1), }