@ -81,13 +81,13 @@ Lo stato della partita è contenuto in `lupus.PartitaState` e viene aggiornato d
Supponiamo ad esempio che sia la prima notte a questo punto, intanto aggiorniamo, gli unici ruoli che agiscono sono il _veggente_ e la _fattucchiera_ quindi come nuovo stato ritorniamo lo stesso stato solo con solo cambiato `state.Time = 1` e come lista di comandi ritorniamo i form per agire con le liste di tutti i giocatori (per ora sono tutti vivi quindi è la stessa lista).
Supponiamo ad esempio che sia la prima notte a questo punto, intanto aggiorniamo, gli unici ruoli che agiscono sono il _veggente_ e la _fattucchiera_ quindi come nuovo stato ritorniamo lo stesso stato solo con solo cambiato `state.Time = 1` e come lista di comandi ritorniamo i form per agire con le liste di tutti i giocatori (per ora sono tutti vivi quindi è la stessa lista).
```go
```go
[]PlayerCmd{
[]Cmd{
ChoosePlayerCmd{
ChooseOptionCmd{
Target: "player-i", // veggente
Target: "player-i", // veggente
Message: "Chi vuoi puntare?",
Message: "Chi vuoi puntare?",
Options: allPlayers,
Options: allPlayers,
},
},
ChoosePlayerCmd{
ChooseOptionCmd{
Target: "player-j", // fattucchiera
Target: "player-j", // fattucchiera
Message: "Chi vuoi puntare?",
Message: "Chi vuoi puntare?",
Options: allPlayers,
Options: allPlayers,
@ -98,12 +98,12 @@ Lo stato della partita è contenuto in `lupus.PartitaState` e viene aggiornato d
A questo punto il codice relativo alla partita va in pausa ed una volta che entrambi i giocatori hanno compilato i propri form la risposta sarà (ad esempio diciamo che sia la _fattucchiera_ che il _veggente_ hanno puntato `player-1` che è un _contadino_)
A questo punto il codice relativo alla partita va in pausa ed una volta che entrambi i giocatori hanno compilato i propri form la risposta sarà (ad esempio diciamo che sia la _fattucchiera_ che il _veggente_ hanno puntato `player-1` che è un _contadino_)
```go
```go
[]PlayerMsg{
[]Msg{
ChoosePlayerMsg{
ChooseOptionMsg{
Target: "player-i", // veggente
Target: "player-i", // veggente
Answer: "player-1",
Answer: "player-1",
},
},
ChoosePlayerMsg{
ChooseOptionMsg{
Target: "player-j", // fattucchiera
Target: "player-j", // fattucchiera
Answer: "player-1",
Answer: "player-1",
},
},
@ -119,36 +119,37 @@ Lo stato della partita è contenuto in `lupus.PartitaState` e viene aggiornato d
},
},
```
```
ora però è giorno ed i giocatori dovranno anche votare per il rogo quindi dobbiamo anche inviare una lista di messaggio di scelta per il voto come segue
ora però è giorno ed i giocatori dovranno anche votare per il rogo quindi dobbiamo anche inviare una lista di messaggio di scelta per il voto come segue. Inoltre se è stato incluso il kamikaze bisogna anche aggiungere un messaggio per far agire il kamikaze durante il giorno
```go
```go
ChoosePlayerCmd{
OrthogonalCmd{
Target: "player-1",
Cases: [][]Cmd{
Message: "Chi vuoi bruciare al rogo?",
[]Cmd{
Options: allAlivePlayers,
ChooseOptionCmd{
},
Target: "player-1",
ChoosePlayerCmd{
Message: "Chi vuoi bruciare al rogo?",
Target: "player-2",
Options: allAlivePlayers,
Message: "Chi vuoi bruciare al rogo?",
},
Options: allAlivePlayers,
ChooseOptionCmd{
},
Target: "player-2",
...
Message: "Chi vuoi bruciare al rogo?",
ChoosePlayerCmd{
Options: allAlivePlayers,
Target: "player-n",
},
Message: "Chi vuoi bruciare al rogo?",
...
Options: allAlivePlayers,
ChooseOptionCmd{
},
Target: "player-n",
```
Message: "Chi vuoi bruciare al rogo?",
Options: allAlivePlayers,
inoltre se è stato incluso il kamikaze bisogna anche aggiungere un messaggio per far agire il kamikaze durante il giorno
},
},
```go
[]Cmd{
OptionalCmd{
ChooseOptionCmd{
ChoosePlayerCmd{
Target: "player-?", // kamikaze
Target: "player-?", // kamikaze
Message: "Su chi vuoi farti esplodere?",
Message: "Su chi vuoi farti esplodere?",
Options: allAlivePlayers,
Options: allAlivePlayers,
}
}
},
},
}
}
```
```
@ -157,3 +158,33 @@ Lo stato della partita è contenuto in `lupus.PartitaState` e viene aggiornato d
## Architettura Lupus (2)
## Architettura Lupus (2)
TODO: Boh forse si può fare proprio qualcosa ad "eventi".
TODO: Boh forse si può fare proprio qualcosa ad "eventi".
// 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 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.
// PlayerCommand rappresenta un "comando" per un certo giocatore, nella fattispecie può dire di mostrare al giocatore un messaggio o anche un prompt che chiede qualcosa all'utente
typeCmdinterface{
typePlayerCommandstruct{
TargetPlayer()string
TargetPlayerstring
}
typebaseCmdstruct{
targetPlayerstring
}
func(cbaseCmd)TargetPlayer()string{
returnc.targetPlayer
}
// Messages
RequestCmd// TODO: Work in progress
typeMsginterface{
TargetPlayer()string
}
}
// PlayerMessage è una risposta da parte del giocatore ad un comando