Trabalhos de MAC 441/5714

Além dos trabalhos realizados em sala de aula, teremos um EP de aquecimento e um projeto em várias fazes para realizar em casa.

Datas de Entrega dos Trabalhos:

EP Zero (aquecimento) - brincando com o Morphic

Este exercício-programa deve ajudar vocês a adquirirem alguma familiaridade com o Morphic, o arcabouço para a construção de interfaces gráficas (GUIs) do Squeak. Seria até certo ponto impreciso chamar o Morphic de um "arcabouço para interfaces gráficas" já que se trata, na verdade, de um "arcabouço para a construção de objetos interativos" (chamados de morphs). Esses "objetos interativos" constituem a base de todos os elementos da interface do Squeak - desde janelas, botões e texto até imagens e figuras animadas. O arcabouço isola o programador e o usuário de grande parte dos detalhes que fazem parte do desenvolvimento de interfaces gráficas, gerenciando automaticamente atualização de tela, despacho de eventos, leiaute e operações como arrastar-e-soltar e composição.

Parte do poder do Morphic vem de uma linguagem (gráfica) de scripts introduzida pelo arcabouço, que serve para a especificação de certas interações entre objetos (morphs). Outra parte desse poder vem do fato que o arcabouço prevê, em seu projeto, a construção de interfaces gráficas dotadas de vivacidade. Isso significa que os objetos da interface podem ser dotados de comportamentos ativos, atualizando-se automaticamente e interagindo com outros objetos a cada instante . Os "instantes" são discretos e podem ser encarados como iterações coletivas, compartilhadas por todos os morphs presentes no mundo Smalltalk. Neste exercício-programa, vamos explorar a linguagem de scripts e a possibilidade de construção de interfaces dotadas de vivacidade.

Dirigindo
O exercício-programa consiste num jogo de computador bastante simples, em que o jogador dirige um carrinho em uma pista circular. Para que seja possível dirigir o carro, ele deve, obviamente, ser dotado de dois controles fundamentais: um para o ajuste de velocidade (acelerador/freio) e outro para o ajuste de direção (volante). Recomendo que você utilize o próprio editor gráfico do Morphic (aquele que se parece com o PaintBrush) para criar a pista, o carrinho e o volante. Para o controle de velocidade, você pode utilizar uma instância da classe SimpleSliderMorph.

Você deve ainda manter um contador na tela, que mostra a pontuação do jogador até o presente instante. A pontuação deve ser calculada da seguinte maneira:

O volante deve responder a comandos como num veículo de verdade. Isso significa que, se o jogador estiver acelerando e virar o volante, o veículo deve passar a descrever uma trajetória circular até que a posição do volante seja corrigida (não vale fazer o carrinho simplesmente apontar para a mesma direção do volante). O volante deve ser girado pelo botão "rotate", disponível no halo do morph que o representa.

Por fim, você deve adicionar um controle para iniciar e suspender o jogo.

Dicas

A princípio você não precisa, para fazer este EP, escrever uma linha sequer de código Smalltalk. Isso não quer dizer, no entanto, que seja proibido.

Veja mais ou menos como deve ficar o seu EP aqui.

Veja a página de ponteiros para alguns tutoriais do Morphic.

O que entregar

Você deve entregar um arquivo contendo o projeto Squeak com a sua solução. Para criar um projeto basta clicar, com o botão da esquerda (também conhecido como botão vermelho no Squeak), em um lugar "vazio" do mundo e um menu deve aparecer. Nesse menu, clique em projects -> create new morphic project. Para exportar seu projeto, acesse, de dentro dele, o mesmo menu e clique em save project on file.... Entregue também um pequeno relatório (formato PDF ou PS, por favor) documentando a sua solução - esse relatório é especialmente importante se você decidir escrever código.

O seu projeto deve funcionar no Squeak 3.7.


Projeto Marcador de Reuniões

Este é um sistema Web que será utilizado para auxiliar na marcação de uma reunião com vários participantes. Um dos participantes, responsável pela organização da reunião, indica em qual período ele gostaria de marcar a reunião (por exemplo, entre 10 e 20 de abril); ele determina também a lista de participantes identificados pelos seus endereços eletrônicos. A seguir, cada um dos participantes indica uma lista de horários dentro do período determinado pelo organizador e, para cada um desses horários, indica sua disponibilidade (ótima, razoável, ruim ou impossível). O organizador então visualiza a sobreposição dos horários de todos os participantes e escolhe um horário para a reunião. Finalmente, o organizador escolhe uma sala para a reunião e uma notificação é enviada para todos os participantes (inclusive para os que se disseram indisponíveis no horário escolhido).

Todas as suas classes deverão ser incluídas dentro de um pacote e este deve ser gravado através da opção fileOut e o respectivo arquivo deverá ser entregue através do panda. O nome do pacote deve conter o sobrenome (ou parte do sobrenome) dos autores.

O trabalho deve ser feito preferencialmente em grupos de 2. Grupos individuais são aceitos (a contragosto :-). Recomendo fortemente que os pares desenvolvam os programas usando programação pareada (os dois programadores sentados lado a lado compartilhando o mesmo computador).

Fase 1: Disponibilidade de horários

Para a Fase 1, que deve ser entregue ao final da semana do breque, em 24/4, a implementação deve se basear em uma interface de texto somente, ou seja, a visualização dos horários dos participantes será feita em modo texto utilizando-se, por exemplo, o objeto Transcript.

A definição dos participantes da reunião será feita através do seguinte método que deverá ser implementado na classe MarcadorDeReuniao :

marcador marqueReuniaoEntre: dataInicial E: dataFinal comParticipantes: listaDeParticipantes

as datas devem ser do tipo Date e a listaDeParticipantes é uma OrderedCollection de Strings identificando os participantes;

cada participante define os seus horários disponíveis através do seguinte método:

marcador disponibilidade: qualidadeDaDisponibilidade De: participante de: inicio a: fim

onde qualidadeDaDisponibilidade é um símbolo (ótima, razoável, ruim ou impossível),  participante é um String e inicio e fim são do tipo TimeStamp

e, finalmente, o método

marcador mostraSobreposicao

que provavelmente vai dar o maior trabalho e vai exigir mais criatividade de vocês, para informar os dados de uma forma clara e elegante.



Página de MAC 441/5714
Página do Fabio
Página do DCC