Percursos
/
Tcl
Tcl
/
Exercícios
/
Jogo da forca
Jogo da forca

Jogo da forca

Difícil

Instruções

Implementa a lógica do jogo da forca com programação funcional reativa.

O jogo da forca é um jogo simples de adivinhar palavras.

A Programação Funcional Reativa é uma forma de escrever programas interativos. Difere da perspetiva habitual porque, em vez de dizeres «quando o botão é premido, incrementa o contador», escreves «o valor do contador é a soma do número de vezes que o botão é premido».

Implementa a lógica básica do jogo da forca com programação funcional reativa. Para isso, vais ter de instalar uma biblioteca de FRP; isso será descrito nos ficheiros específicos da linguagem e do track do exercício.

Nova abordagem ao exercício

Ignora a parte relativa a uma biblioteca FRP; não é precisa uma biblioteca de terceiros para este exercício. Este exercício centra-se na programação orientada a eventos, com callbacks e o ciclo de eventos do Tcl.

Tens de construir um servidor TCP e um protocolo específico de domínio. Este servidor é iniciado com a palavra a adivinhar. O script de teste implementa o cliente que envia comandos ao servidor.

Protocolo específico de domínio

Os comandos do protocolo a implementar são:

  • STATUS para devolver o estado atual do jogo. A resposta é uma lista de três elementos:
    1. o número de tentativas erradas que restam,
    2. a palavra mascarada com underscores nas letras ainda por adivinhar, e
    3. um campo de estado (um de "ongoing", "win" ou "lose")
  • GUESS x, em que x é uma letra a adivinhar. O servidor responde com a lista de estado após cada tentativa.
  • SHUTDOWN para desligar o servidor remotamente. Caso contrário, o servidor termina após uma vitória ou uma derrota.

O servidor deve conseguir tratar estes comandos sem distinguir maiúsculas de minúsculas.

Que porta usa o servidor?

Inicia o teu servidor usando a porta número 0: o Tcl encontra uma porta livre, por isso não temos de fixar um número de porta no script de teste. Todos os intérpretes a correr num processo (incluindo as threads) partilham o mesmo ambiente, por isso o servidor pode comunicar a sua porta ao script de teste através do array global env. Há um exemplo no ficheiro hangman.tcl inicial.

Dicas

Vais precisar destes comandos do Tcl: socket, fileevent, vwait.

Este programa de exemplo com sockets pode ajudar-te a começar.

Editar via GitHub A ligação abre numa nova janela ou separador
Tcl Exercism

Estás pronto para começar Jogo da forca?

Inscreve-te no Exercism para aprenderes e dominares Tcl com 135 exercícios, e mentoria humana real, tudo grátis.