Skip to content

[Feature] Sistema de votação de linguagens na sala de espera #72

Closed

Description

@caioross

🚀 Feature

Permitir que os jogadores escolham coletivamente qual linguagem será utilizada na próxima partida.


📖 Contexto

Atualmente a linguagem da corrida é definida sem qualquer participação dos jogadores.

Embora isso funcione, acaba reduzindo o sentimento de interação dentro da sala e faz com que algumas linguagens apareçam repetidamente.

A sala de espera é um ótimo momento para que todos possam participar dessa decisão.


💡 Proposta

Cada linguagem disponível deverá possuir um botão de votação.

Ao clicar em uma linguagem:

  • o jogador registra seu voto;
  • pode alterar seu voto até o início da partida;
  • todos conseguem visualizar a quantidade de votos recebidos por cada linguagem.

Exemplo:

Python      ●●●●●

JavaScript  ●●

Rust        ●

Go

COBOL       ●●●

Lua         ●

No início da partida:

  • vence a linguagem mais votada;
  • em caso de empate, realizar sorteio entre as empatadas.

🎯 Benefícios

  • Mais interação entre os jogadores.
  • Sensação de participação nas decisões da sala.
  • Maior variedade nas partidas.
  • Incentiva jogadores a experimentar novas linguagens.

🖥️ Considerações de interface

Os votos devem ser atualizados em tempo real para todos os jogadores conectados.

A quantidade de votos pode ser representada por:

  • pequenos pontos;
  • contador numérico;
  • barra de progresso.

O importante é que seja simples e facilmente compreensível.


✅ Critérios de aceite

  • Todas as linguagens podem receber votos.
  • Cada jogador possui apenas um voto.
  • O voto pode ser alterado até o início da partida.
  • Todos visualizam os votos em tempo real.
  • Em caso de empate ocorre sorteio automático.
  • A linguagem vencedora é utilizada na próxima corrida.

🔮 Melhorias futuras

Essa funcionalidade pode evoluir para um sistema completo de votação da partida, permitindo que os jogadores escolham também:

  • nível de dificuldade;

Activity

  1. added
    enhancementNew feature or request
    area:uiInterface, design system, animação, game feel
    em-resolucaoClaim: um Resolvedor está trabalhando nisto
    P2Prioridade normal
    area:multiplayerSalas, Realtime, presença, leaderboard, persistência
    and removed
    em-resolucaoClaim: um Resolvedor está trabalhando nisto
    on Jul 25, 2026
  2. caioross commented on Jul 26, 2026

    @caioross
    OwnerAuthor

    Resolvida em PR #89 — #89 (solicitei quórum, §7.2 — novo evento realtime + muda como a linguagem da corrida é decidida).

    • Voto por broadcast (mesma receita confiável do ready, re-anunciado no join); tally conta só quem está presente. No start, o líder resolve o vencedor e grava em rooms.language via a action settings existente — fonte única de verdade, sem tocar a API de salas.
    • Empate → sorteio (pickVoteWinner com rng injetável); sem votos → linguagem padrão. tallyVotes/pickVoteWinner puros, 8 testes novos.
    • Lobby: grade de votação (todos votam, contadores, meu voto destacado, resumo de quem vence/empate); dificuldade e limite seguem só do líder.
    • Gate verde: typecheck·build·test 62·validate-metrics 37·validate-persistence 22. Render-check do Lobby confirmou a grade e o resumo de empate.
    • Limitação: propagação realtime entre clientes + aplicação no start exigem 2 clientes num canal real — sugiro ao PR Doctor um teste com duas abas.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Prioridade normalarea:multiplayerSalas, Realtime, presença, leaderboard, persistênciaarea:uiInterface, design system, animação, game feelenhancementNew feature or requestgameplay

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions