package lupus // Ruleset si occupa di far avanzare la partita type Ruleset struct { // Start viene chiamata all'inizio di una partita per inizializzare una partita partendo da alcune info di configurazione Start func(PartitaConfig) PartitaState // Update prende lo stato della partita e ne ritorna uno nuovo eventualmente utilizzando delle "UserResponse" fatte precedentemente all'utente (alla prima chiamata questa lista è vuota), successivamente c'è una corrispondenza tra lo slice di "[]UserRequest" ritornato ed il successivo slice "[]UserResponse" ricevuto. Update func(state PartitaState, responses []Msg) (PartitaState, []Cmd) } // Commands type Cmd interface { TargetPlayer() string } type baseCmd struct { targetPlayer string } func (c baseCmd) TargetPlayer() string { return c.targetPlayer } // Messages type Msg interface { TargetPlayer() string } type baseMsg struct { targetPlayer string } func (m baseMsg) TargetPlayer() string { return m.targetPlayer } // -------------------- // // Commands and Message // // -------------------- // // // Choose Option Form // type ChooseOptionCmd struct { baseCmd Message string Options []string } func NewChooseOptionCmd(player, message string, options []string) Cmd { return &ChooseOptionCmd{baseCmd{player}, message, options} } type ChooseOptionMsg struct { baseMsg Answer string } // // Display Message Form // type DisplayMessageCmd struct { baseMsg Message string } func NewDisplayCmd(option, message string) Cmd { return &DisplayMessageCmd{baseMsg{option}, message} }