You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.5 KiB
Go
75 lines
1.5 KiB
Go
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}
|
|
}
|