Você fará um simulador de uma sala com paredes.

PARTE I
=======

Seu programa lerá um arquivo com caracteres ASCII
contendo um diagrama retangular. Exemplo:

###################
#  -        #     3
#     #     #     #
#######     ### ###
#  2     !  #     #
#                 #
######### ###  +  #
1           #     #
###################

+ uma mesa
- uma máquina de café
! um livro


* TODAS as linhas do diagrama devem ter o mesmo comprimento

* Não pode haver espaços nas bordas do diagrama (se houver, o programa deve
  sinalizar um erro (use o procedimento error)

* Os símbolos significam:

espaço  espaço livre
#       parede
1       passagem para sala 1
2       passagem para sala 2
...     ...
9       passagem para sala 9
+       um objeto com nome
-       um objeto com nome
!       um objeto com nome
@       um objeto com nome

Os nomes dos objetos seguem após o diagrama, um objeto por
linha (veja no exemplo). A linha

+ uma mesa

Deve ser lida assim: o primeiro token (+) é o símbolo do objeto.
O resto, até o final da linha, é o nome dele.


TESTE!

Teste seu programa neste ponto, mandando ele escrever o mapa em
outro arquivo!

SUGESTÕES:

- Usar matriz de duas dimensões, como vimos em sala (usando um vetor
  grande ou, neste caso, uma string grande, e calculando o índice) ou
  usar a srfi-25. Ou ainda (talvez seja mais fácil) criar uma lista
  de vetores (cada linha é um vetor) e depois fazer list->vector nesta
  lista. Claro, precisará criar procedimentos para acessar e setar
  elementos nessa estrutura.

  
PARTE II
========

Faça um servidor TCP que aceite conexões e interaja com o usuário.
O servidor deve obedecer EXATAMENTE o protocolo que segue:

- O usuário manda exatamente um caracter por linha:

n      anda para o Norte
s      anda para o Sul
l      anda para o Leste
o      anda para o Oeste

- O servidor retorna um dos seguintes:

OK                   se o usuário andou
PAREDE               se não pode andar (acertou parede)
PASSAGEM:1           se andou, mas chegou em uma passagem
PASSAGEM:2           idem
...                  ...
"nome de objeto"     se andou, mas chegou em um objeto


TESTE!

Teste seu programa neste ponto. Sua função interage deveria
aceitar duas portas, assim voce consegue testá-la sem usar
TCP ou telnet.

Depois de testar interage, teste via Telnet também.


PARTE III
=========

Faça um segundo programa que dialogue com o usuário.

O programa deve implementar um loop:

- Pergunte o que o usuário quer
- Aceite um comando
- Traduza o comando em n, s, l ou o
- Envie para o servidor.
- Receba uma resposta do servidor
- Traduza a resposta em uma frase para o usuário
- Reinicie

Quando o usuário chegar a uma passagem, responda algo como
"Você vê aqui uma passagem para outro lugar, marcada com o número x"

PARTE IV
========

Mude a parte da passagem.

Quando o usuário chegar em um local de passagem:

- O servidor deve responder:
PASSAGEM HOST PORTA

- O programa que dialoga recebe a mensagem do servidor e:
  + Fecha conexão com este servidor
  + Abre conexão com o novo servidor
  + Continua normalmente (talvez dizendo ao usuário que ele se vê em
    um novo ambiente)

O mapeamento de passagem para host/porta pode ser feito como voce
quiser, no seu programa.

    
PARTE V (opcional)
==================

a) Faça seu "dialogador" tocar sons!
   (É trivial -- veja o Egg "openal" no Chicken)
   Você pode fazer ele emitir sons interessantes quando o usuário
   acertar uma parede, por exemplo.

b) Crie mais dois comandos:

p     pega o objeto neste local
d     deixa o objeto que estiver carregando no local onde estiver


c) Você deve ter notado que um servidor terá mais de um usuário
conectado. Impeça que usuários fiquem no mesmo local (dois corpos no
mesmo lugar...) Voce poderá precisar de mutexes (veja a srfi-18).

d) Faça o servidor abrir mais uma thread e ouvir em outra porta. Nesta
   porta voce poderá dar um telnet e o servidor mostrará o mapa com
   marcadores nas posições onde houver usuários visitando.

e) Faça uma interface gráfica para o programa que dialoga com o usuário
   (use o "Egg" Tk do Chicken)