|
|
|
package lupus
|
|
|
|
|
|
|
|
import (
|
|
|
|
"log"
|
|
|
|
|
|
|
|
"github.com/aziis98/lupus-lite/util"
|
|
|
|
)
|
|
|
|
|
|
|
|
var Ruleset1 = Ruleset{
|
|
|
|
Start: func(config PartitaConfig) PartitaState {
|
|
|
|
state := PartitaState{
|
|
|
|
Players: make([]Player, len(config.Players)),
|
|
|
|
Time: 0,
|
|
|
|
Actions: []Action{},
|
|
|
|
}
|
|
|
|
|
|
|
|
// Creo uno slice con il numero di ruoli in base al numero corrispondente per ruolo in "config.RoleCounts"
|
|
|
|
ruoli := make([]Ruolo, 0, len(config.Players))
|
|
|
|
for ruolo, count := range config.RoleCounts {
|
|
|
|
ruoli = append(ruoli, util.RepeatedSlice(ruolo, count)...)
|
|
|
|
}
|
|
|
|
|
|
|
|
// ed i rimanenti sono contadini
|
|
|
|
for len(ruoli) < len(config.Players) { // riempi il resto dei ruoli con contadini
|
|
|
|
ruoli = append(ruoli, Contadino)
|
|
|
|
}
|
|
|
|
|
|
|
|
// mischio la lista di ruoli
|
|
|
|
util.Shuffle(ruoli)
|
|
|
|
|
|
|
|
for i, username := range config.Players {
|
|
|
|
log.Printf(`Al giocatore %q è stato assegnato il ruolo di %q`, username, ruoli[i].Nome)
|
|
|
|
|
|
|
|
state.Players[i] = Player{
|
|
|
|
Username: username,
|
|
|
|
Ruolo: ruoli[i],
|
|
|
|
Vivo: true,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return state
|
|
|
|
},
|
|
|
|
Update: func(state PartitaState, responses []PlayerMessage) (PartitaState, []PlayerCommand) {
|
|
|
|
if state.Time == 0 {
|
|
|
|
ruoliAgenti := map[Ruolo]struct{}{
|
|
|
|
Fattucchiera: {},
|
|
|
|
Veggente: {},
|
|
|
|
}
|
|
|
|
|
|
|
|
playerCommands := []PlayerCommand{}
|
|
|
|
|
|
|
|
for _, player := range state.Players {
|
|
|
|
if _, present := ruoliAgenti[player.Ruolo]; present {
|
|
|
|
if cmd, noop := RuoloMainCmd(player, state); !noop {
|
|
|
|
playerCommands = append(playerCommands, cmd)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
state.Time++
|
|
|
|
return state, playerCommands
|
|
|
|
} else {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return state, []PlayerCommand{}
|
|
|
|
},
|
|
|
|
}
|