FPCT

= Formação Prática em Contexto de Trabalho =



Janela Digital - Informática e Telecomunicações, S.A.
 * Nome da Entidade:**

Parque Tecnológico de Óbidos, Rua da Criatividade, Lote 6 2510-216 Óbidos media type="googlemap" key="http://maps.google.com/maps?f=q&source=s_q&hl=pt-PT&q=rua+da+criatividade+lote+6&sll=39.372061,-9.141397&sspn=0.030455,0.077162&ie=UTF8&t=h&split=1&filter=0&rq=1&ev=p&radius=2.47&hq=rua+da+criatividade+lote+6&hnear=&ll=39.380421,-9.143028&spn=0.02322,0.036478&z=14&iwloc=A&output=embed" width="609" height="504"
 * Local:**

Telefone: 262 840 464 Fax: 262 840 468 Web: @http://www.janeladigital.pt/default.htm E-mail: comercial@janeladigital.com
 * Contactos:**

Dra. Catarina Amaral E-mail: catarina.amaral@janeladigital.com
 * Responsável:**

Gonçalo Martins E-mail: gonsalo@janeladigital.com
 * Orientador:**

Sónia Rodrigues E-mail: sonia.megaexpansao@gmail.com
 * Tutor:**

210 Horas
 * Duração:**

24-08-2010
 * Início:**

09h às 18h
 * Horário:**

Previsto para 04-10-2010
 * Fim:**

- Criar uma aplicação desenvolvida em C Sharp (C#) no software Microsoft Visual Studio 2008, para aceder à informação guardada num ficheiro *.txt, retirando excertos de informação de dentro do ficheiro, isto para vir a correr localmente num computador. - Tornar a aplicação num jogo de perguntas relacionadas com a Janela Digital, de forma a dar a conhecer um pouco mais a empresa, a quem o venha a fazer através do quiosque Imoguia. - Permitir a atribuição de pontos e na hora, poder dar a conhecer a resposta correcta ao jogador no âmbito de poder conhecer melhor a empresa. - Permitir guardar o top das pontuações e os respectivos nomes dos jogadores, de preferência por ordem de ranking das pontuações.
 * Objectivos:**

- Criar uma aplicação que permita a utilização de movimento de imagens, quer seja através de teclas ou da utilização do rato. - Criar "Thread" para permitir a movimentação dos objectos, de forma a que a aplicação não fique parada à espera de novas instruções.


 * Relatório Diário:**

Depois de instalar as aplicações necessárias que foram: Microsoft Visual Studio 2008; Thunderbird e Imoguia Mensageiro, para dar início ao desenvolvimento do meu estágio, comecei a analisar as ferramentas do C# e com a ajuda do orientador para dar início à criação de um novo projecto, e à criação do respectivo ficheiro *.txt com alguma informação inserida, a partir daí estaria por minha "conta". Depois de algumas pesquisas sobre informações do código em Visual C# em Windows applications, comecei a dar os primeiros passos, e entretanto o orientador facultou-me também alguns manuais para analisar e tentar obter alguns dados úteis, entretanto com o cruzamento de informação consegui criar dois botões e uma caixa de texto, um botão para sair e outro que ao ser pressionado iria mostrar a informação armazenada no ficheiro *.txt. Ao pressionar esse botão já consigo ver o resultado de uma linha desse ficheiro, mas ainda não cheguei ao resultado pretendido, de só retirar parte da informação, mas já me dou por satisfeito, acho que o meu primeiro dia acabou de alguma forma por ser positivo, devido ao falto de estar a trabalhar com uma linguagem nova e com ficheiros, que é uma das novidades que tenho pena de não ter existido a oportunidade de aprender durante a formação.
 * 1º dia de estágio (24/08/2010) -** Hoje estive o prazer de conhecer a entidade onde vou permanecer durante o período de tempo da minha formação prática em contexto de trabalho, e as pessoas responsáveis que me irão acompanhar durante esse mesmo período. Também conheci os vários departamentos, e mais em pormenor o departamento de desenvolvimento, na área da programação. Em diálogo com a responsável e o orientador do estágio, chegamos a um consenso de eu tentar desenvolver uma aplicação em linguagem C Sharp (C#), visto ser uma das linguagens utilizadas pela entidade, mas como durante a minha formação, não tive o privilégio de adquirir conhecimentos nessa área, foi-me proposto que viesse a tentar desenvolver algo mais simples e criar uma aplicação para aceder a um ficheiro *.txt, e retirar excertos de informação, ao qual aceitei, mesmo não tendo formação nessa linguagem de programação, acho que será uma mais valia para mim tentar adquirir novos conhecimentos.

Mas isso tornou com que tivesse que ler em manuais mais informação, pois a lógica desse código junto com o que já tinha parecia funcionar, fazia sentido, mas parecia um esforço em vão, foi então que quase no final da tarde consegui perceber um outro pequeno código que fazia sentido como muitos dos que já vira anteriormente, mas assim parecia que todo o conjunto de trabalho já desenvolvido, com o código do colega e mais aquela nova informação, poderia funcionar, e claro está já consegui evoluir mais um pouco, já consegui retirar o primeiro excerto do ficheiro *.txt. Pareceu-me à partida um dia quase perdido, mas bem analisado até foi bastante produtivo a nível pessoal, pois fui enriquecendo com tudo o que li, mesmo sendo uns códigos para trabalhar em modo consola e outros em Windows applications, o que pode parecer igual à partida, sendo a mesma linguagem de programação (C#), mas há diferenças e para quem está pela primeira vez a trabalhar com esta nova linguagem, acaba por encontrar algumas dificuldades. Mas tiro daqui também outro proveito que é de treinar o meu inglês, visto que é um pouco fraco, só os termos relacionados com informática é que estou mais à vontade, e assim acabo por enriquecer mais algum vocabulário, visto que grande parte dos manuais e informações encontradas são em inglês, ou pelo menos o que se encontra mais fidedigno.
 * 2º dia** **(25/08/2010)** **-** Comecei o dia com a continuação do objectivo que tinha em mãos, parecia que tinha a solução por perto, mas como os comandos desta nova linguagem que tenho pela frente ainda me são quase de todo desconhecidos, estive que permanecer com as pesquisas e leituras de tutoriais que ia encontrando e analisando dados encontrados em fóruns. Continuei assim em pesquisas e teste até à hora do almoço e sem avançar nada, foi então durante a pausa do almoço, que em conversação com colegas estagiários que falamos sobre assuntos encontrados nas minhas pesquisas e algum conhecimento deles que me sugeriram uma das opções e no período da tarde um até me facultou pelo envio através do Imoguia Mensageiro, um pedaço de código que julgávamos vir a funcionar.

Para guardar essa informação, criei uma array, que está a guardar a informação da primeira linha txt separada por ";" e estou a pensar em criar uma matriz tipo "string[*,*]" para poder inserir as restantes perguntas que serão as linhas seguintes. Também aproveitei para criar uma mensagem de confirmação, para quando o utilizador pressionar em "Sair", onde irá surgir uma questão se realmente este deseja sair ou continuar com a aplicação em funcionamento. Entretanto depois do o meu orientador ter visto o meu trabalho, foi então sugerido novas propostas, para esta aplicação vir a funcionar como um jogo de perguntas, e mais tarde a responsável do meu estágio, propôs que então se for possível, este jogo venha a ser usado nos quiosques multimédia da Janela Digital. Mas para isso, vou ter ainda que me debater com um longo caminho de pesquisas para conhecer melhor esta linguagem e dar uso à criatividade para vir a conseguir um bom resultado. Em baixo poderemos ver um registo de como o programa está a ficar.
 * 3º dia** **(26/08/2010)** **-** Continuei a debater-me com o C# e com a aplicação que estou a desenvolver, e também não deixando de parte as pesquisas para aprender mais alguma coisa. Entretanto com a informação que me foi facultada pelo formador de programação, consegui encontrar novas ideias e em conjunto com um manual em PDF que tinha encontrado, consegui resolver a questão de conseguir ler separadamente o conteúdo da primeira linha do ficheiro *.txt, e assim mostrar no formulário através de Label's, a pergunta e as respectivas respostas. Mas como para todas as soluções existem sempre novas complicações, então para já, só estou a conseguir retirar a informação da primeira linha. Mas terei que conseguir também obter os dados das seguintes, para que quando carregar em "Seguinte", estes primeiros valores venham a ser substituídos por novos valores que contenham na segunda linha do ficheiro txt e depois as restantes até este terminar com os dados.



No final do dia, eis que consegui solucionar o problema, simplesmente bastava-me inicializar a variável do contador fora da classe privada, pois estava a igualar o seu valor a zero sempre que pressionava o botão, e como seria lógico o mesmo não poderia avançar com os novos valores a mostrar. Também vim a instalar o OpenOffice, para fazer o relatório semanal que me fui pedido pela responsável de estágio.
 * 4º dia** **(27/08/2010)** **–** Comecei o dia por alterar a aplicação, visto ter mudado de ideias, em relação à utilização de uma mensagem que iria surgir quando o utilizador pressiona-se o botão de sair. Como não gostava muito dessa mensagem por não poder ser personalizada, decidi criar um formulário novo e adicionar os respectivos botões. Depois instalou-se o meu novo problema que era fazer o programa avançar, sempre que se pressionasse em seguinte, mas entretanto entre descobrir a solução, e resolver o problema, fui alterando algumas coisas, como o ocultar informação quando o jogo inicia, e depois voltar a mostrar depois de dar início ao mesmo, testar alguns ciclos de programação para resolver o problema inicial, foi sendo assim o meu dia.

Agora depois de o básico já funcionar, comecei a pesquisar alguma informação de como fazer as "Label's" alterarem de forma a que cada vez que inicie um novo jogo, as soluções estejam em posições diferentes, pretendo fazer a troca para baralhar um pouco o utilizador, para o jogo não se tornar muito monótono e dificultar um pouco quem pense em decorar as posições e deixar de ler as opções de resposta. Entretanto a responsável do estágio veio ter comigo e estivemos a ver o que já estava feito até então, e chegamos à conclusão que poderia fazer com que fosse possível, o utilizador ver a resposta errada e qual a certa, para ficar a saber mais sobre a Janela Digital, e que poderia querer desistir do jogo a meio, então seria bom que o botão de sair volta-se a estar activo durante todo o decorrer do mesmo. Também me foi sugerido criar a possibilidade de quando o jogador terminasse o jogo, pode-se guardar numa lista o respectivo nome e a pontuação, onde vou ter que trabalhar nesse sentido, tendo que agora vir a fazer com que seja possível criar um ficheiro e guardar essa informação dentro desse ficheiro. Em seguida comecei a alterar a imagem do jogo, para começar a ficar mais semelhante à imagem do Quiosque do Imoguia, e bloqueei as opções de alteração das janelas e removi os botões de maximizar, restaurar e fechar dos formulários. Em baixo fica uma imagem de como está a ficar o projecto do jogo.
 * 5º dia** **(30/08/2010)** **-** Comecei mais um dia a fazer testes para me recordar como estava o jogo, onde voltei ao ponto e que estava a fazer com que o contador avança-se, fui completando o código e testei. Depois de conseguir fazer com que todas as questões fossem apresentadas, comecei a inserir o código para começar a pontuar, consoante o resposta escolhida, onde pensei em atribuir 2 pontos por cada resposta correcta e -1 por cada resposta errada. Concluída essa tarefa, pensei em remover o valor e o botão de sair, para obrigar o utilizador a efectuar o jogo até ao fim, com o fim de ver o resultado só no fim, e aí poder optar por fazer um novo jogo, ou sair, e voltando a um novo jogo, poderia aí também decidir se pretendia continuar a jogar ou também sair, visto que ainda não tinha efectivamente dado início ao mesmo. Então vim a criar um novo formulário para poder mostrar a pontuação e inserir botões, onde encontrei nova dificuldade, pois tinha um problema que era o seguinte: precisava de conseguir passar o valor da variável para o novo formulário, e reparei que nem mesmo com a variável sendo pública, o valor chegaria ao novo formulário, mas lá consegui com algumas pesquisas encontrar alguma informação que explicasse como poderia solucionar o problema.

Voltei a tornar possível a visualização da respectiva pontuação, consoante o jogador for avançando, e também alterei a respectiva pontuação. No momento se o jogador obtiver uma pontuação igual a 20 pontos, ficará com um total de 30; no caso de vir a somar só 18 receberá como bónus mais 6 pontos; se conseguir 14 irá receber 4 pontos extra; no caso de só conseguir 10, considerei que até sabe algo em relação à empresa, ainda tem o privilégio de conseguir 2 pontos extra; os restantes podem contentar-se apenas pelos 2 pontos por cada resposta correcta. O formulário que no dia anterior tinha criado para mostrar a pontuação obtida durante o jogo, foi alterada, onde passou a ter uma "Rich TextBox" para mostrar o total das pontuações, que estão guardadas num ficheiro *.txt, criado de forma a que em caso da inexistência do mesmo, este venha a ser criado pelo próprio jogo, de forma a garantir a boa funcionalidade do próprio. Essa "Rich TexBox" já consegue mostrar os valores guardados das pontuações, sendo estes abertos e guardados num vector de forma a poderem ser ordenados e mostrados por ordem do maior para o menor. Onde já está a aparecer ordenado, mas como o vector está definido como string, não aparece 100% correcto, visto isso, terei então que converter os mesmos para inteiros para assim ficarem ordenados correctamente. Dei início também à criação de um novo formulário para funcionar entre os dois formulários anteriores de forma a que assim que o utilizador termine de jogar, surja uma caixa onde lhe seja mostrado só o resultado que obteve e que possa inserir o seu nome e guardar, para ser inserido na lista das pontuações com o respectivo nome, ou em caso de não estar interessado, possa passar logo para a pontuação final. Com a criação deste novo formulário, surgiu um novo problema que faz com que não seja possível ver a pontuação no outro formulário, e quando não passo por este novo, ela já surge. Mas como é com estas dificuldades que se adquire novos conhecimentos, então cá estarei para o ultrapassar.
 * 6º dia** **(31/08/2010)** **-** Foi um dia onde existiu algumas alterações significativas ao projecto, iniciei com a possibilidade de permitir ao jogador saber na hora qual a resposta correcta, marcando-a a verde e com o tamanho da fonte maior para a destacar, e a errada ficando num tom vermelho, e tornando impossível a selecção da resposta correcta, em continuidade com as respostas. Também vim a alterar o controlo do botão Seguinte, que a partir de agora, quando é para começar a jogar tem a mensagem de Iniciar e a partir desse ponto passa a poder ler-se Seguinte, e enquanto o jogador não seleccionar uma das respostas, não poderá avançar, ou responde ou desiste, não tem a possibilidade de deixar questões em branco.

Os resultados ao serem apresentados no ecrã, continuam a estarem ordenados por string, o que origina um pequeno erro de visualização, então resolvi adicionar o valor de "0" no caso de a pontuação ser menor que dez, ficando assim com o valor de "0*" antes do "10", assim a string passou a aparecer ordenada, só que por ascendente, e pretendia que fosse inversa, devido ao surgir no ecrã a pontuação mais alta em primeiro lugar. Alterei também a "TextBox" de forma a só permitir receber um total de sete caracteres, e optei por fazer com que ao guardar o nome do utilizador, este seja convertido em caracteres maiúsculos, para quando estes sejam apresentados, tenham uma forma mais homogénea. Também ao gravar, no caso de o jogador optar por não dar nome, este será guardado com o nome de "JOGADOR" por defeito, ou se pretender só ver as pontuações, o mesmo é sucedido, só em caso que pretender guardar mesmo o nome com " " é que estes ficará com esse nome, isto para não se dar o caso de avançar e depois ficar o campo vazio, assim surge o nome por defeito. Acabei o dia a fazer mais uns acertos, de imagem e pequenos erros que poderiam vir a surgir. E continuarei com o problema de fazer com que as "Label's" surjam em posições diferentes e o vector fique ordenado pela ordem descendente.
 * 7º dia (01/09/2010) -** Logo no início do dia resolvi o problema da passagem das pontuações para o formulário das respectivas pontuações, seguidamente consegui começar a guardar também o nome do jogador em conjunto com a pontuação, pois estes campos devem ficar juntos para não existir a opção de erro, quando forem apresentadas ao jogador.

Decidi criar um código que ao ser inserido no nome do jogador, este irá limpar todos os registos, de forma a que sempre que queiram reiniciar a lista das pontuações se possa fazer de forma simples e segura, visto a aplicação estar preparada para isso e mesmo para a perda do respectivo ficheiro de pontuação. Abaixo estão as imagens dos menus para inserir o nome e mostrar as classificações.
 * 8º dia (02/09/2010) -** Como havia deixado a ordenação dos vectores por concluir, comecei por aí, e com algumas insistências fez-se luz, se já estava a ordenar o vector por ordem ascendente, seria como poderia ser óbvio, pegar nesse resultado e inverte-lo, pois andava a insistir com que ele fizesse o "Reverse" sem que primeiro fosse ordenado, mas claro que é com testes que vamos descobrindo e obtendo resultados. Seguidamente o meu problema seria fazer com que o ficheiro onde estou a guardar as pontuações, deixa-se de crescer, pois só estou a mostrar o resultado dos melhores doze jogadores, não será importante ficar com os registos dos restantes, pois se existir por exemplo um milhão de registos, não faz lógica estar a desperdiçar tempo e espaço com a informação desnecessária, por isso, e para aprender mais alguns comandos, decidi que seria uma solução criar um ficheiro *.tmp ou seja um ficheiro temporário, onde iria guardar a informação de um vector ordenado do maior para o menor e só as doze posições melhores, e depois iria substituir a informação do ficheiro dos pontos, assim teria só guardado os registos necessários. O meu orientador depois de ver disse-me que seria solução, mas que poderia ir também por outro caminho, onde irei tentar também essa opção, que pelo que consta será mais prático, mas por enquanto vou permanecer assim, visto ter ainda outros acertos.

Depois atribui os respectivos dados a cada botão, e pensei em criar uma "TexBox" junto do teclado para o utilizador ver o que está a escrever, e criei um botão para fechar o teclado onde inseri o código para passar essa informação para a janela da pontuação final, mas ainda necessita de uns pequenos ajustes. Com o acerto destes pequenos passos, vim a descobrir que quando fecho um formulário, na realidade ele acaba por ficar aberto por detrás do novo que abriu, pois o código para o fechar não chega a ser executado, então ando a tentar resolver este problema, pois já consegui que até funcione, só que ainda com um erro, sempre que fecha o formulário e abre um novo, este envia o formulário principal para o fim de tudo o que tenhamos aberto no nosso computador, mas será mais um problema com resolução à vista, espero ultrapassar este problema o mais breve possível. Imagem do teclado virtual.
 * 9º dia (06/09/2010) -** Hoje depois de ter analisado o ponto da situação do projecto, pensei em criar um teclado virtual, visto cada vez mais os computadores estarem direccionados para o touchscreen, e os quiosques Imoguia, estão apontados para o uso desta tecnologia. Então comecei por criar um novo formulário para inserir os botões do teclado, e seguidamente criar uma imagem do mesmo para inserir no novo botão que criei para colocar junto da "TextBox" onde o utilizador pode escrever o nome para guardar com a respectiva pontuação.

Entretanto como ainda estava longe de terminar o teclado, e em conversação com a minha tutora, falamos sobre o teclado poder alterar entre maiúsculas e minúsculas, pois estava a pensar em resolver isso para quando o teclado estivesse pronto, ou melhor, estivesse funcional só com caracteres maiúsculos, mas aproveitei e fiz um teste e resolvi fazer com que ficasse já a trabalhar, alterando consoante o jogador pretendesse escrever. Entretanto o botão "Apagar" estava a apagar tudo de uma só vez, para efectuar testes estaria funcional, mas vamos supor que o utilizador ao escrever o último caracter, engana-se, não faria muito sentido voltar a escrever tudo de novo, então seria bom funcionar como a tecla de "Backspace" do teclado físico, e apagar caracter a caracter. Depois de alguma pesquisa descobrir como é que seria possível fazer com que ele fizesse essa função, mas os problemas surgem com as novas soluções, tinha aqui um problema que se apagasse todos os caracteres, e insistisse em apagar o vazio, acabava por dar erro, então resolvi este novo problema com uma instrução simples como a utilização de um ciclo "if". Contudo ainda tinha um problema, mesmo com a "TextBox" limitada a um número de caracteres, ao pressionar o teclado virtual, este permitiria escrever mais do que a "TextBox" permitia, e foi com mais um simples ciclo "if" que se solucionou o problema. Com este simples teclado, e por curiosidade, conseguiu atingir um total de 924 linhas de código.
 * 10º dia (07/09/2010) -** De volta ao formulário do teclado virtual, vim a reparar que estava a perder informação com a abertura deste, depois de escrever o nome do jogador, quando vinha a fechar o teclado, só chegava a informação do nome do jogador e entretanto já tinha perdido os pontos a guardar com o respectivo nome introduzido, então resolvi em transportar esse resultado para o novo formulário, e quando o fechasse, voltasse a transportar para o formulário que tem a opção para guardar os dados, e encontrei assim solução, só que agora sempre que estou pretendo ver só os pontos, depois de ter acedido ao teclado, ele está a guardar os dados, e quando faço guardar está a fechar tudo, mas deve ser devido ao ter andado a resolver também o problema dos formulários.

Neste momento o jogo já está a mostras as respostas aleatoriamente, e também os "RadioButton's" estão a acompanhar as respectivas "Label's", garantindo assim que a opção correcta esteja em frente a resposta correcta. Aproveitei o restante tempo para corrigir alguns erros que surgiam quando forçava determinadas funções, por exemplo, existia um ficheiro que ficava em aberto e por vezes causava erro. Também existe um ainda quando escrevemos com o teclado virtual e depois mando guardar e está a dar um erro, mas será resolvido em breve, o acumular de código é que está a tornar o erro mais camuflado, mas irá acabar por ser encontrado.
 * 11º dia (08/09/2010) -** Comecei o dia por instalar o editor de imagens GIMP, para fazer tratamento a algumas imagens que necessito para o teclado. Depois de ter melhorado o aspecto do teclado, com a inserção de imagens a substituir os textos das teclas, votei ao problema das "Label's" aleatórias, continuei a minha pesquisa pela internet, em busca de algo que consegui-se apresentar algumas soluções. Mas entretanto houve um pequeno contratempo, a ligação da internet falhou durante toda a manha e princípio da tarde. Devido a essa falha, comecei a realizar novos testes, pois já andava a alguns dias a planear qual seria a melhor opção, talvez fosse criar um array para guardar as posições e depois gerar um número aleatório para o apontar para a posição respectiva do array, e assim pensei que resolveria o problema, mas como tenho questões com três respostas, outras com quatro, tive que optar por gerar números de posicionamentos dentro de cada pergunta, para assim aparecer tudo correcto.

Como achei que ainda poderia melhorar mais, e gosto de desafios, então pensei "Porque não o jogador poder escolher em que língua poderia realizar o seu jogo?". Então comecei por fazer um pequeno teste de como poderia trocar a informação, e decidi criar botões para o utilizador escolher entre o português, espanhol e inglês, mas mais tarde ao falar com a minha responsável, foi-me sugerido implementar também o alemão. Criei novos ficheiros para guardar a informação respectiva de cada língua. comecei por alterar o formulário para sair, e passei para o principal, onde já está a funcionar com as perguntas e respostas em português e espanhol, entretanto estarão também as restantes línguas. Só apliquei até agora as duas línguas para verificar se tudo funcionaria bem. Entretanto vou alterar também os restantes formulários para as respectivas línguas, pois não ficaria muito apresentável estar as perguntas num idioma e as restantes opções noutro. Ao falar com o meu orientador, ele achou que está a ficar um bom trabalho, mas agora poderia também trabalhar no sentido de reduzir um pouco o tamanho do código, visto existir alguns pedaços de código repetido, e até me explicou como poderia fazer, pois nós vamos criando e aplicando as ideias e por vezes repetimos código, mas poderemos sempre voltar a chamar o que já existe, mas claro que com a evolução e o conhecimento da linguagem, irei melhorando este pequeno senão. Pois até agora tenho-me preocupado em especial, com que a aplicação fique 100% funcional ou o mais próximo disso, mas agora que já está quase pronta, vou preocupar-me então com esses acertos para limpar o código. Em seguida vemos uma imagem da entrada do projecto.
 * 12º dia (09/09/2010) -** O problema do teclado virtual já ficou resolvido, era uma simples linha que me esqueci de eliminar devido a testes realizados.


 * 13º dia (10/09/2010) -** 3187, é um número questionável, depois de traduzir todos os formulários, e de ter-me chegado as traduções para os conteúdos dos ficheiros das perguntas, e de estes estarem todos a funcionar, comecei o trabalho de limpeza do código, pois devido à tradução, cresceu significativamente. Então comecei pelos formulários mais simples, assim se danificasse algo ao corrigir e criar novos ciclos, seria mais fácil de lidar com o problema, chegando ao formulário principal, nos outros não estive preocupado, mas sei que reduzi bastante código, mas neste, por curiosidade, antes de eliminar o excesso, verifiquei o tamanho de linhas do código, e a seguir, o resultado seria de menos 3187 linhas, o que posso concluir que as aplicações podem funcionar correctamente e de uma forma mais fácil de compreender, se criarmos ciclos, ficando também mais leve o seu funcionamento, mas claro que por vezes necessitamos de ir aplicando as nossas ideias, sem nos preocuparmos muito, o importante será mesmo funcionar, e de seguida fazer estes pequenos acertos, pois assim as ideias já estão implementadas, sendo assim mais pratico aplicar outras estratégias. Mas ainda não está totalmente limpo, ainda existe vários acertos, como o ciclo para gerar números aleatórios, que tem algumas repetições, e podem ser eliminadas, mas cada ponto a seu tempo, para não perder o raciocínio.

Entretanto comecei a pesquisar informação para saber como criar um manual para o jogo, mas gostaria de o realizar não num simples documento em Word, ou num PDF, mas sim num documento em Flash, ficando o mais próximo possível de um livro, sendo claro em formato digital, para isso instalei duas versões de software Trial, uma do WebbookBinder e outra do FlippingBook, mas como são versões experimentais, estão limitadas, vou entretanto testar uma outra que é provável estar funcional, só que o limite de tempo é muito reduzido, por isso terei que preparar todo o manual primeiro para depois fazer os testes. Senão outras as hipóteses mais prováveis é de tentar criar de raiz tudo em flash, o que iria demorar algum tempo, e neste momento é precioso o tempo restante. Criei um novo formulário que lhe dei o nome "Sobre", onde contém informação sobre o projecto, os objectivos e o que está concretizado, bem como quem o criou, a data e as entidades que tornaram a sua realização possível. Isto tudo também para poder adicionar a utilização de teclas especiais, no caso desta utilizada é a tecla "F1". Imagem do novo formulário a seguir.
 * 14º dia (13/09/2010) -** O trabalho de limpeza de código ainda perdura, durante a manha, a alteração de código e testes, foram constantes, alguns com sucesso outros, para criar novas dúvidas, mas que não serão esquecidas, pois irei insistir até ficar o mais organizado possível.

Depois comecei a fazer o próprio manual, explicando os passos todos e inserindo as imagens par não existir margem para duvidas em relação à sua utilização.
 * 15º dia (15/09/2010) -** Comecei o dia por acertar uns valores que estavam a originar erro ao mostras as respostas erradas, devido à limpeza do código, entretanto como já tinha iniciado a pesquisa para fazer um manual em flash, e em casa andei a fazer uns testes, e consegui uma solução apresentável para o manual, visto não dispensar de muito tempo para andar a testar opções em flash, vou utilizar o software FlippingBook, que já tinha falado nele. Pois constatei que este permite publicar o manual num ficheiro executável de fácil utilização, então dei início ao trabalho para permitir que a aplicação também pode-se carregar o manual, e então criei um botão no formulário "Sobre" para chamar assim o manual através desse ponto, pois poderão querer aceder enquanto fazem o questionário, contudo o questionário é de simples utilização, por isso, o utilizador não terá grande necessidade de o consultar, mas claro que alguém aqui da Janela digital poderá querer saber algum pormenor mais especifico e assim poderá recorrer directamente ao manual sem ter que terminar a aplicação, bastando simplesmente pressionar a tecla "F1" e abrir o manual.

Entretanto continuei com o manual, que já está pronto, falta só os devidos alinhamentos de texto e imagens, e até testei como poderia ficar a funcionar como um livro digital. Em seguida poderemos ver então um exemplo do resultado do manual digital.
 * 16º dia (16/09/2010) -** Na continuação do manual, acabei por me lembrar que visto ter criado a possibilidade de poder aceder ao manual através do formulário "Sobre", até aqui tudo bem, mas não, a criação do acesso a este formulário através da tecla "F1", no quiosque imoguia, seria impossível aceder, visto só utilizar a opção de touchscreen, então encontrei aqui um novo problema e não queria inserir um novo botão, porque esteticamente ficaria mal e não só, como o maior interesse deste manual é de dar a conhecer a quem ficar a fazer a manutenção da aplicação, não havia mesmo nenhum interesse em que o botão ficasse visível, então depois de analisar as ferramentas que tinha ao meu dispor, decidi criar um botão invisível, só tendo assim acesso quem realmente saiba da sua existência, e decidi então inserir uma "PictureBox", normalmente utilizada para conter imagens, mas como os botões não os podemos tornar invisível, então assim não inseri imagem, ficando com o fundo transparente e dando a instrução para abrir o formulário ao click, e o problema ficou resolvido assim.

Depois de ter o manual concluído, voltei para os acertos finais do projecto, pois necessito de eliminar uns pequenos pontos, devido ao posicionamento das Label's. Criar um pequeno ciclo para não repetir código em cada opção de "case", este, está a dificultar-me um pouco a vida, mas terá resolução. Tenho pesquisado em vários fóruns de programação para tentar encontrar um método mais eficaz para o problema, mas pelo que tenho conseguido analisar até agora, é que, não é um problema muito procurado. Entretanto estive a falar com minha responsável de estágio sobre o relatório que tenho enviado semanalmente. Onde me foi informou que está bem concebido, como relatório, mas está a ficar muito extenso, então sugeriu-me resumir um pouco para não se tornar muito pesado, e sugeriu-me criar um anexo para as imagens, visto estas serem importantes acompanharem o relatório, para analisar a evolução do projecto, mas para reduzir o número de páginas, fazer então referencia às imagens e posicioná-las no fim do relatório.
 * 17º dia (20/09/2010) -** Iniciei a semana a trabalhar na conclusão do manual e nos testes para ficar apresentável no formato de livro digital.

Contudo é nestes acertos que acabo por notar a falta de ter adquirido conhecimentos mais aprofundados em programação por objectos, e principalmente em C#. Mas não vou desistir, agora tenho o projecto para deixar concluído, mas num futuro próximo, nas horas vagas irei aprofundar os conhecimentos na programação por objectos, porque é de facto interessante, e os métodos de ensino continuam a perder muito tempo na programação base e a deixar de preparar os futuros programadores como deveria ser suposto, pois quando se apresentam no mercado de trabalho acabam por encontrar inúmeras dificuldades, e terão de lutar muito mais para atingir objectivos e progredir.
 * 18º dia (21/09/2010) -** Este foi um dia em que não pude notar grandes diferenças físicas no projecto, passei o tempo a criar, testar, apagar, e recriar ciclos para o código ficar funcional e ao mesmo tempo perceptível de interpretar. Ao trabalhar assim para criar melhoramentos no código, deu-me a ideia de passar um dia em vão. Mas acabei por eliminar as repetições dos valores aleatórios para as respostas, e até cheguei ao ponto de ter que escrever valor a valor, utilizando os "brackpoints" para os conseguir obter.

Alterei também a visualização do botão "Iniciar", de modo a que este não seja mostrado tanto no início, antes de escolher o idioma, quer no fim, para não permitir tentações de quando estão no formulário para inserir o nome ou a ver as pontuações, pensarem por exemplo "olha ali o botão, vamos pressionar", assim terão que ser respeitados os passos da aplicação. Adicionei uma opção para que no caso de o ficheiro onde é guardara a pontuação, já não ser alterada há mais de sessenta dias, este será automaticamente eliminado. Reduzindo assim a necessidade de ser necessário eliminar a pontuação manualmente através do código introduzido no lugar do nome.
 * 19º dia (22/09/2010) -** Hoje alterei mais código, o ciclo "Switch" ainda tinha algumas repetições de código dentro de cada "case", retirei o código e inseri-o fora, dentro de um ciclo "if" para distinguir entre as perguntas com quatro opções de resposta e as de três, ficando só o essencial dentro de cada "case".

Verificamos em conjunto e pareceu que estaria tudo em ordem, em seguida falamos sobre o novo projecto, o que poderia fazer, e como já tínhamos falado anteriormente, poderia criar um simples jogo gráfico, com a utilização de movimentos de imagens, ou fazer algo para a web. E claro mais uma vez tentei saber o que seria mais útil para mim, ao nível de adquirir conhecimentos, falamos sobre o que seria mais fácil de aprender em casa, visto de não ter tempo aqui para aprender tudo, então deixei o desenvolvimento web para mais tarde, pelo que consta será mais fácil de aprender e trabalhar só, devido à facilidade de encontrar tutoriais a explicar o respectivo funcionamento. Então comecei por ter uma "aula" na sala de reuniões para saber o funcionamento interno do windows, ou seja com ele usa as "thread", para conseguir executar multi-tarefas em simultâneo, ou seja, para poder trabalhar várias instruções e permitir a utilização da aplicação ao mesmo tempo, como por exemplo quando deslocamos um objecto, o processador fazer com que o cenário também seja actualizado. O novo projecto já está a caminhar, pois já criei umas imagens geométricas para praticar e ver como isto de gerar gráficos e movimentos funciona, e até já experimentei implementar uma imagem. Mas por agora tenho só pesquisado e andado nos testes, mas vai ficar aqui uma imagem para recordar como começou, para depois ver a evolução.
 * 20º dia (23/09/2010) -** Hoje no período da manha dei por concluído o projecto, onde me reuni com os responsáveis de estágio.

Mas já consegui aplicar movimentos a numa imagem, só que agora preciso limpar ou melhor actualizar permanentemente o cenário, pois o movimento está a deixar uma marca de movimento, como poderemos verificar na imagem.
 * 20º dia (24/09/2010) -** Foi um dia para continuar a pesquisar e testar como movimentar imagens, mas o resultados encontrados on-line, são maioritariamente direccionados para a programação de jogos em C# utilizando em vez do Windows Forms Applications, o XNA Games Studio, que é um pacote que se pode instalar para programação de jogos. Procedi à instalação deste pacote para tentar perceber mais o funcionamento dos gráficos, mas pelo que consta, este pacote facilita a vida aos programadores de jogos, e iria fugir um pouco ao meu objectivo, que seria animar objectos através de formulários.

Continuei a pesquisar como trabalhar com o movimento das imagens, e também a realizar alguns testes, encontrei algumas informações de como utilizar o "BackGroudWorker" e andei a estudar como poderia implementar, visto ser um dos métodos mais usuais para trabalhar com as "Thread", mas ainda está um pouco confuso a sua utilização, mas espero lá chegar, porque o tempo de estágio está a ficar reduzido.
 * 21º dia (27/09/2010) -** Organizei o meu relatório semanal, e alterei, para evitar ficar muito extenso, mesmo assim acabou por ficar ligeiramente grande, devido à explicação do que teria realizado, porque para quem não tem conhecimentos de programação, ao olhar para uma aplicação, não consegue imaginar o que esta a decorrer por traz, se existe ou não muito trabalho ou tempo de pesquisas e procura de soluções.

Dei então um pequeno salto no projecto, e já conseguia movimentar a bola sem deixar o rasto, ou seja, conseguia limpar o ecrã, mas existia ainda um pequeno problema. A imagem cintilava durante o movimento do ponteiro do rato, pois a bola estava ligada ao rato para se movimentar. Entretanto o meu orientador esteve um pouco comigo e explicou-me que estava a desenhar o cenário, mas que não estava a actualizar correctamente, daí a oscilação da imagem. Também me explicou como poderia tornar o movimento automático. Então de seguida, como já tinha algum movimento da bola, criei as barras para testar, e atribui uma ao computador para jogar e outra para o utilizador. A do utilizador já consegue andar para cima e para baixo automaticamente ou seguindo a bola. Ao seguir a bola, fica mais real, só que fica um adversário muito "inteligente", ou seja, o jogador não terá a mínima hipótese de conseguir ganhar.
 * 22º dia (28/09/2010) -** Continuei com pesquisas e testes para perceber melhor o funcionamento do "BackGroundWorker", Testei com a utilização de uma "ProgressBar" e um Botão. Enquanto a barra de progresso ia avançando, eu poderia pressionar o botão onde me mostraria uma mensagem de teste. Pude então perceber um pouco melhor o funcionamento. Verifiquei que mesmo com uma acção a decorrer, eu conseguiria executar operações.

Voltei a ter um "aula", para compreender melhor a utilização das "Thread's", pois estas podem ser múltiplas e funcionarem para o mesmo objectivo, o que poderá por vezes dar origem a erros, é um dos grandes problemas dos programadores, principalmente se estivermos a trabalhar em escrita, porque em leitura todos os processos podem aceder, que o valor analisado será sempre igual, indiferentemente da ordem de acesso das "Thread's", agora a actualizar a informação, ou a ler uma linha de código como por exemplo esta simples instrução "i++;", pode equivaler a resultados estranhos ou dizer que o ficheiro poderá estar corrompido. Daí podermos bloquear a "Thread" num determinado ponto, e fazer o mesmo com outra "Thread" no mesmo, para que na memória seja reservada um espaço, para essa instrução, ou também poderemos utilizar uma instrução tipo semáforo, que enquanto aquela "Thread" estiver a "passar" mais nenhuma pode avançar. Isto porque eu pensei em criar um segundo "BackGroudWorker", que era para usar as barras, pois no primeiro atribuia uma velocidade à bola, e na segunda uma velocidade à barra, só que depois por vezes a barra acabava por saltar de posição, devido à escrita nas "Thread's", porque quando uma desenhava, a outra lia, e depois quando volta-se a ler, a informação já não estaria correcta. Por isso neste caso só posso usar uma, para não existir falhas ao desenhar. Entretanto comecei testar como poderei criar agora as colisões entre a bola e as barras, e criei a velocidade para a barra do computador, para este andar mais devagar e permitir que o jogador consiga ganhar, e também só se movimenta quando a bola regressa e a seguir ao meio do jogo, porque se ele continua-se a seguir sempre a bola, mesmo mais devagar ficaria quase impossível de derrotar.
 * 23º dia (29/09/2010) -** Continuei a tratar do movimento das barras. A barra do jogador já segue o movimento do rato, verticalmente, e adicionei também a possibilidade que esta seja também movimentada com as teclas "Up" e "Down".

Entretanto o meu orientador esteve comigo a verificar o que já tinha feito, e ajudou-me com a colisão com a barra do jogador e verificamos que o código do movimento do jogador feito pelo teclado poderia ser alterado a ser mais fluido o seu movimento, porque poderia ser desenhado, em vez de esperar pela detecção da tecla pressionada. Depois fiz a detecção das colisões para a outra barra e a detecção de quando a bola bate nas extremidades do cenário adicionar pontuações, e voltar a iniciar o jogo. As pontuações estão a ser exibitas numa "MessageBox", mostrando assim o número de vitórias e derrotas durante o jogo.
 * 24º dia (30/09/2010) -** Comecei o dia a continuar os testes e pesquisas para detectar as colisões, no entanto comecei a conseguir algum tipo de colisão, mas ainda não fazia o que pretendia.

Passei também a inserir a pontuação no cenário de jogo, para o jogador poder assim ir acompanhando a respectiva pontuação, e passei também a permitir que se o jogador carregar na tecla "Escape" possa sair do jogo, e sempre que alguém consiga vencer, este foca a espera que seja pressionada a tecla "Enter", para continuar a jogar. O jogo passou também a ter níveis de dificuldade. Entretanto estou a tentar criar a possibilidade para que em vez de o jogo ir sempre subindo no grau de dificuldade, este venha antes a acompanhar a jogabilidade do jogador, ou seja, se o jogador começar a perder muitas vezes, a dificuldade seja reduzida, para que o jogador tenha uma maior capacidade para acompanhar o jogo. Também aproveitei algum do tempo para concluir o relatório de estágio para entregar aqui na janela digital. Em baixo poderemos ver uma imagem do jogo.
 * 25º e último dia de estágio (01/10/2010) -** Hoje comecei por criar algum grau de dificuldade, ou seja, consoante o jogo vai avançando, o computador vai ficando cada vez mais "inteligente". A velocidade da bola vai ficando mais rápida nos seus movimentos e o computador tem uma maior precisão para acompanhar a bola, de forma que acaba por ficar quase impossível de vencer.


 * Relatório de estágio:**


 * Questionário Digital:**


 * Manual do Questionário Digital:**


 * Pong:**