Programação Orientada por Objetos Licenciatura em Engenharia Informática e de Computadores Primeiro trabalho prático Semestre de Inverno de 2014/2015 Neste trabalho pretende-se que os alunos adquiram prática na utilização de herança de implementação e de interface, na utilização de iteradores e das bibliotecas de contentores e de streams do Java e no desenvolvimento de aplicações em Android usando componentes Activity e a hierarquia de elementos View. Deverão ser usados apenas os conceitos da linguagem Java e da plataforma Android que foram apresentados nas aulas. Cada grupo entregará no site da sua turma (http://thoth.cc.e.ipl.pt/classes/POO/1415i/) até 8 de Dezembro, um documento (com extensão docx, doc, pdf ou txt) que descreva a implementação do trabalho, assim como os ficheiros fonte (java, xml, etc.) do projeto Android realizado, devidamente comentados, comprimidos num ficheiro (com extensão zip, rar, gz, etc.). O trabalho consiste em desenvolver uma aplicação para Android, em que a Activity principal tem apresentação aproximada à da figura, com o objetivo de testar a rapidez dos reflexos do utilizador através de 20 toques realizados na área de jogo. A área de jogo é constituída por um objeto de uma classe derivada de View que, entre outras características, redefine o método onTouchEvent() para capturar os toques MotionEvent e o método onDraw() para desenhar um círculo de uma determinada cor e com um raio igual a um décimo do menor lado da área de jogo. Cada toque na área de jogo é contabilizado em “Counter” e provoca o aparecimento de outro círculo com outra cor numa posição aleatória. Os toques no círculo são contabilizados em “Hits”. É registado o tempo desde o primeiro ao vigésimo toque. Após 20 toques, caso todos sejam certeiros e o tempo registado for inferior a 20 segundos, pode ser adicionado este tempo à tabela de recordes, se ainda não existirem 10 armazenados ou o tempo for menor que o pior dos 10 armazenados. Neste caso é questionado o nome do jogador (conforme a figura) e é armazenado o tempo e o nome. O botão “Top 10” mostra a lista dos 10, ou menos, melhores tempos realizados e o respetivo nome do jogador (conforme a figura), lançando outra Activity cuja implementação é exatamente a apresentada na classe Top10Activity. Para tal, deve ser implementada a classe TopTable por forma a garantir o correto funcionamento desta atividade. Uma possível implementação deste trabalho pode ser experimentada instalando a aplicação deste APK. public class Top10Activity extends Activity { private TopTable top10; @Override protected void onCreate(Bundle state) { super.onCreate(state); top10 = new TopTable(this); LinearLayout root = new LinearLayout(this); root.setOrientation(LinearLayout.VERTICAL); TextView item; int i=1; for(TopTable.Item e : top10) { item = new TextView(this); item.setText( (i++)+": "+e ); root.addView(item); } setContentView(root); } } Na implementação deste trabalho devem considerar a utilização das classes: Button, TextView e LinearLayout para a apresentação principal, View, Paint, MotionEvent e Canvas na implementação da área de desenho, ArrayList<T> para armazenar em memória a tabela de recordes, PrintStream e Scanner para escrita e leitura do ficheiro da tabela de records, AlertDialog para perguntar o nome do jogador. ISEL, 17 de Novembro de 2014