feat: split finish game methods
This commit is contained in:
parent
03963987a4
commit
bcc72a6261
1 changed files with 26 additions and 18 deletions
|
@ -111,7 +111,7 @@ func chooseWinner(round Round, countWinners int) []Answer {
|
|||
for i := 1; i < len(answers) && len(winners) < countWinners; i++ {
|
||||
var currentVote = len(answers[i].votes)
|
||||
if lastVote == currentVote {
|
||||
countWinners++
|
||||
countWinners++ // todo: Могут возникнуть проблемы, надо протестировать
|
||||
}
|
||||
lastVote = currentVote
|
||||
winners = append(winners, answers[i])
|
||||
|
@ -224,7 +224,7 @@ func AskQuestion(roomId string, question string) bool {
|
|||
sendMessageToPlayer(question, player)
|
||||
}
|
||||
|
||||
// todo: Не забыть про ннс
|
||||
// todo: Не забыть про nns
|
||||
// todo: Добавить списание токенов за создание вопроса
|
||||
|
||||
setRoom(ctx, &room)
|
||||
|
@ -326,7 +326,6 @@ func GetWinner(roomId string) bool {
|
|||
return false // Zero winners, because no answer
|
||||
}
|
||||
|
||||
// todo: Надо подумать с увеличением количества, там в методе расписана проблема, но вроде все должно работать нормально с такой реализацией
|
||||
var winners = chooseWinner(round, room.CountWinners)
|
||||
var result string
|
||||
for i, winner := range winners {
|
||||
|
@ -353,7 +352,7 @@ func VoteToFinishGame(roomId string) bool {
|
|||
return false // Host cannot vote to finish game
|
||||
}
|
||||
|
||||
var count = 0
|
||||
var voted = 0
|
||||
var isFound = false
|
||||
for i, p := range room.Players {
|
||||
if p.Wallet.Equals(wallet) {
|
||||
|
@ -365,24 +364,28 @@ func VoteToFinishGame(roomId string) bool {
|
|||
}
|
||||
|
||||
if p.isVotedToFinish {
|
||||
count++ // Count voted players for finish the game
|
||||
voted++ // Count voted players for finish the game
|
||||
}
|
||||
}
|
||||
|
||||
if count == len(room.Players) && isFound {
|
||||
// todo: Можно добавить notify для уведомления, сколько людей проголосовало за завершение игры
|
||||
|
||||
/* todo: Тут можно вызывать finishGame, но тогда надо сделать какую то защиту, например HostFinish будет
|
||||
* проверять, что sender хост и вызывать основной метод finish, а тут будет вызван PlayersFinish, без проверки.
|
||||
*/
|
||||
|
||||
return true
|
||||
if !isFound {
|
||||
return false // Player was not found in the room
|
||||
}
|
||||
|
||||
return false // Player not found in the room
|
||||
// todo: Можно добавить notify для уведомления, сколько людей проголосовало за завершение игры
|
||||
|
||||
return automaticFinishGame(ctx, &room, voted)
|
||||
}
|
||||
|
||||
func FinishGame(roomId string) bool {
|
||||
func automaticFinishGame(ctx storage.Context, room *Room, voted int) bool {
|
||||
if voted != len(room.Players) {
|
||||
return false // All players must voted for finish the game
|
||||
}
|
||||
|
||||
return finishGame(ctx, room)
|
||||
}
|
||||
|
||||
func ManuallyFinishGame(roomId string) bool {
|
||||
var ctx = storage.GetContext()
|
||||
var room = getRoom(ctx, roomId)
|
||||
|
||||
|
@ -390,11 +393,16 @@ func FinishGame(roomId string) bool {
|
|||
return false // Only host can finish game, room status must be game is going
|
||||
}
|
||||
|
||||
// todo победитель всей игры? итоги? что нибудь еще?
|
||||
// todo добавить вилку, что если ВСЕ участники согласились закончить игру - заканчиваем
|
||||
return finishGame(ctx, &room)
|
||||
}
|
||||
|
||||
func finishGame(ctx storage.Context, room *Room) bool {
|
||||
// todo: Отправка награды победителям и хосту
|
||||
|
||||
// todo: Нотификация результатов всей игры
|
||||
|
||||
room.Status = RoomStatusFinished
|
||||
setRoom(ctx, &room)
|
||||
setRoom(ctx, room)
|
||||
return true
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue