PlayerWords

Atividade de adivinhação de vocabulário para o Moodle — documentação completa.

English | Português

View on GitHub Download .zip

Moodle Plugin CI Moodle License Status PlayerGames Ecosystem Game Activity

O PlayerWords é uma atividade de adivinhação de palavras para o Moodle. O estudante adivinha uma palavra oculta letra por letra dentro de um número configurável de tentativas, recebendo feedback visual em cores e símbolos a cada chute.

Use a barra lateral para pular direto a qualquer seção desta página.

Código-fonte: github.com/jeanlucio/moodle-mod_playerwords


✨ Funcionalidades

🎓 Finalidade Educacional

O PlayerWords foi projetado para:

Indicado para:

🕹️ Ecossistema PlayerGames

O PlayerWords faz parte do ecossistema de gamificação PlayerGames para Moodle. Sua principal integração direta é com o bloco PlayerHUD:

Veja o perfil do autor no Moodle Plugins Directory para a família PlayerGames completa.

📦 Requisitos

Componente Versão
Moodle 4.5+
PHP 8.1+

🛠️ Instalação e Configuração

  1. Baixe o arquivo .zip ou clone este repositório.
  2. Extraia na pasta mod/ do seu Moodle.
  3. Renomeie para playerwords (se necessário). Caminho final: seu-moodle/mod/playerwords/
  4. Acesse Administração do site > Notificações para concluir a instalação.
  5. Adicione uma atividade PlayerWords a qualquer curso.

Este plugin não tem configurações separadas em nível de site após a instalação — toda configuração é feita pelo professor ao adicionar a atividade a um curso, conforme explicado em Como Usar logo abaixo.

📖 Como Usar

  1. Adicione uma atividade PlayerWords ao seu curso.
  2. Configure:
    • Faixa de comprimento de palavras e máximo de tentativas
    • Tempo de recarga entre rodadas e limite de rodadas
    • Modo de palavras (aleatório ou sequência compartilhada)
    • Método de nota e configurações do livro de notas
    • Fontes de palavras (manual, Glossário, IA), fonte de glossário e uma lista de stopwords para ignorar ao dividir conceitos com várias palavras (todos opcionais)
    • Custos em itens do PlayerHUD e concessão por vitória (opcional, quando o bloco PlayerHUD está presente)
  3. Acesse Gerenciar palavras para adicionar, gerar com IA, aprovar, editar ou excluir palavras.
  4. Os estudantes jogam diretamente na página da atividade — chutando, revelando dicas e desistindo de rodadas, sem recarregar a página. O toolbar da própria página dá acesso às regras (ajuda), ao registro de tentativas e ao ranking.
  5. Notas e ranking são atualizados automaticamente após cada rodada.

🧮 Nota e Ranking

O PlayerWords calcula uma nota e um total de ranking a partir das mesmas rodadas terminadas, mas os dois são configurados de forma totalmente independente — o professor pode manter a nota simples e ainda assim recompensar jogadas eficientes no ranking, ou o contrário.

Os dois são totalmente opcionais, e cada um liga/desliga por conta própria:

Desligar um nunca afeta o outro: uma atividade pode ter nota sem ranking, ranking sem nota, os dois, ou nenhum dos dois.

A pontuação por rodada decide quanto vale uma única rodada, escolhida separadamente para a nota e para o ranking (configurações Pontuação da nota / Pontuação do ranking, ambas com padrão Binária):

Modo Uma rodada vencida vale… Uma rodada perdida, desistida ou com tempo esgotado
Binária (padrão) A nota cheia da atividade Zero
Linear Nota cheia nas duas primeiras tentativas, depois uma fração proporcional às tentativas poupadas: nota × (max_attempts − tentativas_usadas + 1) / (max_attempts − 1) Zero

O modo linear dá nota cheia nas duas primeiras tentativas — um segundo palpite certeiro não é tratado como menos merecedor que um acerto de primeira, já que este é um jogo educativo não punitivo, não uma disputa de sorte — e só a partir daí distribui as tentativas restantes proporcionalmente, nunca zerando totalmente uma vitória: até vencer na última tentativa permitida ainda rende uma fração positiva. Exemplo com nota máxima 100 e 6 tentativas:

Tentativas usadas Pontos (linear)
1 100,00
2 100,00
3 80,00
4 60,00
5 40,00
6 20,00
Não completou 0,00

Com Máximo de tentativas igual a 2 ou menos, o modo Linear fica numericamente idêntico ao Binário — toda tentativa permitida já cai dentro do platô de nota cheia.

Combinar várias rodadas numa nota final é uma configuração separada, Método de avaliação (maior nota, média, primeira tentativa, última tentativa ou média sobre todas as rodadas exigidas). Funciona igual independente de a pontuação por rodada acima ser Binária ou Linear: só agrega o valor que cada rodada já registrou.

O ranking é a soma dos pontos de ranking de todas as rodadas terminadas de um estudante (SUM), ordenado do maior para o menor; empates são desfeitos por menos tentativas usadas em média, depois menos tempo gasto em média. Só aparece quando o professor liga “Mostrar ranking”, e nunca revela uma rodada ainda em andamento.

Só os 5 primeiros aparecem — de propósito, não é bug: tanto o mini-ranking dentro do jogo quanto a página dedicada limitam a lista a 5 linhas, pra evitar expor o ranking da turma inteira publicamente. Um estudante mais abaixo continua vendo exatamente onde está: uma linha extra, separada por “…”, mostra sua posição e pontuação reais, sem revelar a colocação de mais ninguém abaixo do 5º lugar. Quem pode gerenciar a atividade (professor editor, gerente) nunca aparece no ranking, mesmo que jogue a atividade — a mesma regra que exclui suas próprias tentativas do registro de tentativas abaixo.

“Mostrar ranking” só controla a exibição, não a coleta de dados: os pontos de ranking são calculados e gravados em toda rodada terminada, esteja a configuração ligada ou desligada naquele momento. Ligá-la depois que os estudantes já jogaram revela o total acumulado desde o início da atividade, não só os pontos ganhos a partir da mudança — nada se perde, e não é preciso “recuperar” nada ao desligar e ligar de novo.

Trava ao registrar a nota: assim que a atividade registra uma nota real para qualquer estudante, Máximo de tentativas, Pontuação da nota e Pontuação do ranking travam — do mesmo jeito que o Moodle já trava o campo “Nota máxima” de uma atividade avaliada assim que existem notas reais. Isso garante que toda rodada já registrada para aquela atividade foi pontuada sob exatamente as mesmas regras, então a nota e o total do ranking permanecem consistentes durante toda a vida da atividade.

Registro de tentativas: cada estudante pode conferir suas próprias rodadas passadas — palavra, tentativas usadas, tempo, nota da rodada e (quando o ranking está ligado) pontos no ranking — pela página de registro de tentativas do toolbar. Quem pode gerenciar a atividade vê essa mesma página virar um relatório de todos os estudantes: uma tabela só, 30 linhas por página, ordenável clicando em qualquer cabeçalho de coluna, e filtrável para um único estudante. Assim como no ranking, nunca inclui as próprias tentativas de quem gerencia, mesmo que essa pessoa tenha jogado a atividade.

🧪 Testes Automatizados

O PlayerWords inclui uma suíte PHPUnit cobrindo lógica de negócio, consultas ao repositório, web services e conformidade com a Privacy API. Todo push de CI executa a matriz completa (Moodle 4.5 → 5.x, PostgreSQL e MariaDB).

PHPUnit — Testes Centrais

Arquivo de teste Casos
backup_restore_test.php 5
cross_instance_security_test.php 4
lib_grant_potential_test.php 6
lib_reset_userdata_test.php 4
completion/custom_completion_test.php 7
privacy/provider_test.php 14
Subtotal 40

Testes de Lógica de Negócio (tests/local/)

Arquivo de teste Casos
ai_word_generator_test.php 12
attempts_history_service_test.php 14
gameplay_service_test.php 19
hud_service_test.php 22
intro_service_test.php 5
ranking_service_test.php 6
round_presenter_test.php 35
round_service_test.php 30
view_page_service_test.php 16
word_normalizer_test.php 16
words_repository_test.php 56
Subtotal 231

Testes de Web Services (tests/external/)

Arquivo de teste Casos
count_eligible_words_test.php 5
count_glossary_candidates_test.php 4
end_round_test.php 4
new_round_test.php 3
reveal_hint_test.php 6
start_round_test.php 5
submit_guess_test.php 7
Subtotal 34
Total Geral 305
vendor/bin/phpunit --testsuite mod_playerwords

Cobertura de linhas geral (moodle-coverage, PHPUnit + Xdebug): 63%.

Ver o detalhamento completo de cada teste e a tabela de cobertura →

🔐 Segurança e Conformidade

🔒 Divulgação de Serviço de Terceiros

A geração de palavras por IA é opcional e vem desativada por padrão. Quando um professor a usa, o tema da atividade (nunca dados de estudante ou registros de tentativa) é enviado através do local_aihub — usando a chave própria (BYOK) do usuário ou do site, se o plugin estiver instalado — ou, como alternativa, através do subsistema de IA nativo do Moodle (core_ai), que roteia para o provedor configurado pelo administrador do site. O PlayerWords nunca contata um provedor de IA diretamente; a requisição e sua divulgação/consentimento são de responsabilidade exclusiva do local_aihub ou do core_ai. Se nenhum dos dois estiver instalado ou configurado, a fonte de palavras por IA fica indisponível e todas as outras funcionalidades continuam funcionando normalmente.

📄 Licença

Este projeto é licenciado sob a GNU General Public License v3 (GPLv3).

Copyright: 2026 Jean Lúcio