Projecto # 4: HangMan

Documentos relacionados
Projecto # 4: HangMan

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

SME Introdução à Programação de Computadores Primeiro semestre de Trabalho: jogo Semáforo

Como começar a Jogar? Para iniciar o jogo a forma mais fácil é ir a e começar a jogar.

Associações de Ficheiros. Mike McBride Tradução: José Pires

Introdução a Tecnologia da Informação

Introdução à Programação C

Números Aleatórios Argumentos da Linha de Comando Arquivos

Desenvolvendo Jogos 2D-Android

Aula 3 Primeiros programas

ÍNDICE. PowerPoint CAPÍTULO 1... CAPÍTULO 2... CAPÍTULO 3...

Formação do Microsoft Office PowerPoint 2007

elaboração da aplicação, estamos dependentes do software usado pelo Helpdesk. Por exemplo, como usam activamente o sistema operativo Linux,

OpenOffice.org. tutorial apresentação

Instituto Federal de Minas Gerais - Campus Bambuí

PCS LABORATÓRIO DE PROGRAMAÇÃO ORIENTADA A OBJETOS PARA A ENGENHARIA ELÉTRICA

Linguagem C: Introdução

Classes e Objetos. Sintaxe de classe em Java

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

Fluxogramas. Leandro Tonietto ago-09

Especificação do Trabalho Prático

Passo-a-passo para desenvolver um Programa usando a Linguagem Python

Linguagens de Domínio Específico

O Manual do Kanagram. Danny Allen Tradução: José Pires

Para cada programa, por mais simples que seja, comece sempre por esboçar a solução desenhando um fluxograma.

Exercícios: Arquivos

CEDERJ - CENTRO DE EDUCAÇÃO SUPERIOR A DISTÂNCIA DO ESTADO DO RIO DE JANEIRO

Campeonato de Gamão. 1. Regras. 2. Servidor

Unidade 11: Programando Swing com o NetBeans Prof. Daniel Caetano

Manual de Utilizador

Exercícios: Vetores e Matrizes

Gestão de Tipos de Letra. Craig Drummond Tradução: José Pires

Introdução à Programação

LISTA DE EXERCÍCIOS - ro. 04

Ficheiros de texto 1. Ficheiros de texto. 1. Implementar um programa que leia uma frase do teclado e a escreva num ficheiro.

CURSO DE POWER POINT EXERCÍCIO 1 Iniciando

Manual do Usuário SinFAT Web

Ashampoo Rescue Disc

Jogo da Tabuada. Introdução. Scratch

Como criar uma história

Apostila Impress 01. Partes da Janela Principal do Impress

imax Concepção Centrada no Utilizador 2007/2008 Manual do Utilizador

Aparência. Lauri Watts Tradução: José Pires

COBOL DB2- CICS. Prof. Maromo [Aula 6]

Excel - Funções Estatísticas

INF 1620 Estruturas de Dados Semestre Segundo Trabalho: Jogo de Caça-Palavras

Lição 6 Organize os seus s e encontre o que procura

LABORATÓRIO DE INTRODUÇÃO A CIÊNCIA DE COMPUTAÇÃO TRABALHO SEMESTRAL:

Programação de Computadores:

Padrões de Projeto de Software

ESCOLA SUPERIOR DE TECNOLOGIA DE TOMAR DEPARTAMENTO DE ENGENHARIA INFORMÁTICA 2006/2007

Fundamentos da Programação. Ano lectivo , 2 o Semestre Projecto Primeira Parte 1. Nim

w w w. b a l a n c a s m a r q u e s. p t B M G e s t

Simulação de Caixa Automático

Windows 95/98/Me/2000

Conceitos de Orientação a Objetos. Objeto Atributo Classe Método

Introdução à Computação II (Noturno) BCC Unesp Rio Claro/SP 2015 em PDF via Moodle: Escolha apenas 5 exercícios para entrega Exercício 01 (Pilhas)

Rui Carneiro, Rui Pereira, Tiago Orfão

Microsoft PowerPoint 2003

Document Capture Pro 2.0 para Windows

Manual do KBounce. Tomasz Boczkowski Revisão: Eugene Trounev Tradução: José Pires

Novos recursos da PR-650 Versão 2 PT

Aula 4 Objetos e Classes com BlueJ. Prof. Pedro Baesse

Backup e Recuperação Guia do Usuário

Manual de Utilização PrintScout

Português Estruturado

ZS Rest. Manual Profissional. BackOffice Mapa de Mesas. v2011

Computação II Orientação a Objetos

JCLIC Passos Básicos Vamos criar um Projeto no Jclic: Abra o o Jclic, vá em ficheiro

Praticar os princípios da ordenação, cópia de formatos, hifenização, trabalho com múltiplos documentos, modos de visualização e impressão.

Programação de Computadores III

Criar e formatar relatórios

Ambiente de programação

Prof. Esp. Andrew Rodrigues 1

CEDERJ - CENTRO DE EDUCAÇÃO SUPERIOR A DISTÂNCIA DO ESTADO DO RIO DE JANEIRO

Objetivos. Sistema Operativo em Ambiente Gráfico. Introdução às Tecnologias de Informação e Comunicação

Introdução ao ProjectLibre

Lista de Exercícios STRING LINGUAGEM DE PROGRAMAÇÃO PROF. EDUARDO SILVESTRI.

Ashampoo Rescue Disc

Amostras e Tutoriais Versão 8 Release 0. Tutorial da Amostra de Contratação para o IBM Process Designer

Início Rápido: Exibir relatórios Início Rápido: Exibir relatórios

Interacção Pessoa-Computador

Aula 11 Introdução ao Java Script

Manual do Kanagram. Danny Allen Tradução: Luiz Fernando Ranghetti Tradução: André Marcelo Alvarenga

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

1. Introdução O que é Microsoft PowerPoint Recursos de PowerPoint. Introdução

Explorador do Windows (manipulação de ficheiros)

Computação e Programação

Para calcular a área do trapézio considere a entrada na seguinte ordem: <base maior> <base menor> <altura>.

FÓRUM. Fórum AMBIENTE VIRTUAL DE APRENDIZAGEM TUTORIAL DO. Autor(es) Natália Regina de Souza Lima, Scarlat Pâmela Silva

Personalizando o seu PC

Figura 1. Tela de inicialização do WEKA. 2. Será apresentada a seguinte janela, que iremos utilizar para testar as respostas do WEKA.

Tutorial Word 2007 FONTE: UNICAMP

SUPERPROVAS - NOVOS RECURSOS DA VERSÃO Pesquisar usando simultaneamente o filtro básico, o filtro avançado e o filtro textual.

Mini apostila de Python - Oficina de Vestibulandos. PET Computação - UFPR September 2016

MANUAL DE MICROSOFT EXCEL 2003 Sem bichos de sete cabeças

LIÇÃO DE PROGRAMAÇÃO EV3 AVANÇADA. Matrizes. By Droids Robotics

Transcrição:

Projecto # 4: HangMan Entrega: 1 de Julho as 23:59 Para este problema sua missão é escrever um programa que implementa o jogo Hangman. Deve-se ter em conta dois objectivos. Primeiro, o programa é desenhado para você ter prática em escrever programas que manipulam strings e ficheiros. Segundo, estendendo o programa usando ferramentas gráficas do capitulo 9, você vai ter a oportunidade de trabalhar com diferentes classes em uma única aplicação. Quando o usuário joga HangMan, o computador selecciona uma palavra secreta aleatoriamente a partir de uma lista. O programa então imprime os espaços um para cada letra na palavra secreta. Se o usuário adivinha uma letra que esta na palavra, a palavra e mostrada com a letra adivinhada nos locais correctos, junto com as letras anteriormente adivinhadas. Se a letra não consta da palavra o usuário e penalizado com uma resposta errada. O usuário continua a adivinhar até que (1) adivinhou todas as letras na palavra ou (2) O usuário fez 8 respostas incorrectas. Dois exemplos do programa esta ilustrado na figura 1 na pagina seguinte. Quando este jogo é jogado por crianças e uma verdadeiro fascínio, porque as respostas incorrectas envolve o desenho de um homem enforcado num andaime. Para cada resposta incorrecta uma parte do corpo é desenhada, primeiro a cabeca, depois o corpo, depois os braços, depois as pernas e finalmente os pes. Tudo é adicionado ao andaime ate o enforcamento estar completo. Exemplo o diagrama mostra a primeira resposta incorrecta (Somente a cabeca), a terceira (cabeca, corpo e braco esquerdo), e o facto trágico quando se perde o jogo.

Para escrever o programa que implementa Hangman, você deve projectar e testar seu programa em três partes. A primeira parte consiste em obter a parte interactiva do jogo a trabalhar sem gráficos e com um conjunto fixo de palavras secretas. A segunda parte consiste na construção de uma classe separada, que mantém o esquema de andaime. A parte final exige que você substitui a versão fornecido da lista de palavra secreta com aquela que lê as palavras de um arquivo. O restante deste folheto descreve essas três partes em mais detalhes. Figura 1. Exemplos do jogo Hangman (somente consola)

Note que o programa só precisa ser capaz de jogar o jogo Hangman uma vez através (ou seja, o jogador adivinhar uma palavra), mas deve ser muito fácil estender seu programa para permitir que o jogador jogue várias vezes. Parte I-Jogar um jogo baseado em console Na primeira parte desta missão, sua tarefa é escrever um programa que lida com o componente do jogo de tudo, excepto a exibição gráfica de interacção do usuário. Para resolver o problema, o programa deve ser capaz de: Escolher uma palavra aleatória para usar como palavra secreta. Essa palavra é escolhida a partir de uma lista de palavras, como descrito no parágrafo seguinte. Acompanhar a palavra parcialmente adivinhada pelo usuário, o que começa como uma série de traços e, em seguida, é actualizada com as letras corretas são adivinhadas. Implementar a estrutura de controlo básico e gerenciar os detalhes (pedir ao usuário para adivinhar uma letra, manter o controle do número de palpites restantes, imprima as várias mensagens, detectar o fim do jogo, e assim por diante). A única operação que está além do seu conhecimento actual é a que representa a lista de palavras a partir do qual você pode escolher uma palavra ao acaso. Para as duas primeiras partes da missão, você vai simplesmente fazer uso de uma classe que te dei chamado HangmanLexicon que fornece uma pequena lista de palavras que lhe permitirá testar o programa. (A léxico é muito parecido com um dicionário, mas não necessariamente inclui definições, o que o torna um nome mais apropriado para uma classe que fornece uma lista de palavras sem significados associados.) A implementação da classe que lhe foi dado é apenas um expediente temporário para torná-lo possível para codificar o resto do trabalho. Na Parte III, você vai substituir esta implementação pela que lê uma lista de palavras a partir de um ficheiro. A estratégia de criação de uma aplicação temporária que fornece a funcionalidade suficiente para implementar o resto do programa é uma técnica comum na programação. Tais implementações temporárias são geralmente chamados de stubs. Nesta tarefa, o projeto inicial vem com uma implementação stub da classe HangmanLexicon, que aparece na Figura 2 na página seguinte. A classe contém dois métodos públicos: getwordcount (), que retorna o

número de palavras no léxico, e GetWord (i), que retorna a palavra no índice i. Como todos os índices em Java, o valor i vai de 0 a menos do que o número de palavras. Figure 2. Implementação stub de hangmanlexicon. Um jogo que usou esta implementação da classe HangmanLexicon iria rapidamente tornar-se desinteressante, porque há apenas dez palavras disponíveis. Mesmo assim, ele vai permitirlhe desenvolver o resto do programa e, em seguida, voltar e melhorar essa parte mais tarde. Parte I é um problema de manipulação de string usando os métodos desenvolvidos no Capítulo 8. O exemplo é executado na Figura 1 deve ser suficiente para ilustrar o

funcionamento básico do jogo, mas os seguintes pontos podem ajudar a esclarecer algumas questões: No início do seu método de execução, você precisa criar uma nova HangmanLexicon e armazená-lo em uma variável de instância. Se você estender o programa para permitir o usuário jogar vários jogos, a criação do HangmanLexicon deve ser realizada fora do loop que joga o jogo repetidamente para que esta operação seja realizada uma vez ao invés de cada jogo. Você deve aceitar as suposições do usuário, em qualquer caso inferior ou superior, apesar de todas as letras das palavras secretas são escritos em letras maiúsculas. Se as suposições do usuário algo diferente de uma letra, o programa deve informar ao usuário que o palpite é ilegal e aceitar um novo palpite. Se adivinha o usuário digita uma letra correta mais de uma vez, o programa deve simplesmente não fazer nada. Adivinhar uma letra incorrecta uma segunda vez deve ser contado como um outro palpite errado. (Em cada caso, essas interpretações são a maneira mais fácil de lidar com a situação, e seu programa provavelmente vai fazer a coisa certa, mesmo que você não pensa sobre estes casos em detalhe.) Parte II- Adicionando Graficos Para a Parte II, sua tarefa é simplesmente estender o programa que você já tem escrito de modo que a controlar o display gráfico Hangman. Embora você possa querer apimentar as coisas em suas implementações, a versão mais simples da imagem final para um usuário infeliz que acabou de perder o jogo é parecido com este:

O andaime e o pequeno pedaço de corda acima da cabeça são adicionados antes do início do jogo, e em seguida, as peças são adicionadas na seguinte ordem: cabeça, tronco, braço esquerdo, braço direito, perna esquerda, perna direita, pé esquerdo, pé direito. Porque esta imagem é mais simples do que a maioria dos exercícios que já fez, o desafio do trabalho não reside no uso do pacote acm.graphics mas sim na implementação da separação de funções entre a classe que executa a interacção baseado em console e da classe que gerência da parte grafica. Essa classe é chamada HangmanCanvas e está incluído no projecto de partida na forma de execução mostrado na Figura 3. Figura 3. Implementação Stub de HangmanCanvas

Este esboço é um pouco diferente do mostrado anteriormente para HangmanLexicon. Que realmente fez alguma coisa, mesmo que fosse só uma parcela da implementação completa do que a classe vai fazer. Este esboço declara várias constantes que definem os parâmetros da imagem, mas na verdade não são usados ainda. Os três métodos na implementação stub de HangmanCanvas - reset, displayword e noteincorrectguess não estão implementados. Esta estratégia é comum na programação. O fato das classes existirem e métodos de exportação significa que você pode chamar os métodos da classe Hangman baseado em console, mesmo antes de concluir a sua implementação. A primeira coisa que deve fazer quando começar a Parte II é a criação de uma nova HangmanCanvas (precisamente da forma de não fazer nada em que foi dado) e instalá-lo na janela do programa ao lado do console. A própria classe Hangman é um exemplo de um ConsoleProgram, o que significa que o código de inicialização nas bibliotecas ACM tem instalado um IOConsole na janela que preenche todo o espaço. Sua próxima tarefa é adicionar um HangmanCanvas para a janela do programa também. O código que você precisa para esta peça é extremamente simples. Primeiro, na seção variáveis a instância do programa Hangman, você precisa declarar uma variável de instância para a tela escrevendo e depois adicionar o seguite método init no seu programa: Note-se que o seu programa Hangman terá tanto um init e run método, e isto está perfeitamente bem. Este método init inicializa a tela e adiciona à janela antes de o método run ser executado, o método run é onde a execução do seu jogo vai começar depois que a janela é inicializada. Por padrão, o conteúdo da janela do programa recebem quantidades iguais de lado a lado do espaço. Uma vez que este é um programa de console, vai aparecer na coluna da esquerda. O HangmanCanvas ocupará a segunda coluna, a consola e componentes gráficas da janela irão receber cada uma metade do ecrã, conforme mostrado na Figura 4 abaixo. Entrada e saída do programa Hangman continuará a aparecer no console, e todos os

objectos que você adicionar aos HangmanCanvas armazenados na tela variável irá aparecer na área à direita. Figura4. PrintScreen mostrando lado a lado console (lado esquerdo) e canvas (à direita) Agora você pode adicionar as chamadas para os métodos em HangmanCanvas. Toda vez que você iniciar um jogo, por exemplo, você vai precisar de chamar para apagar todas as partes do corpo da tela e redesenhar o andaime. Da mesma forma, você terá que chamar displayword e noteincorrectguess nos pontos apropriados em seu código. Até agora, nada vai realmente ser exibido na tela quando você faz essas chamadas, mas o programa deve ser executado da mesma forma como fazia antes, libertando-o para se concentrar na implementação dos métodos em HangmanCanvas. Note que você não deve adicionar quaisquer métodos mais públicos para HangmanCanvas (adicionando métodos auxiliares). A implementação de HangmanCanvas deve ser razoavelmente simples. Embora os tamanhos do andaime e as várias partes do corpo são dadas a você, suas posições não são especificados, então você vai ter que fazer alguma aritmética para calcular as coordenadas. A linha central do corpo deve ser centrado horizontalmente na tela, e o andaime deve ser

exibido um pouco maior do que o centro de modo que haja espaço em baixo para dois labels: um label em letras grandes que mostra a palavra secreta na sua forma actual e uma label em uma fonte menor mostrando as suposições incorrectas. A Figura 5 mostra como a tela aparece no fim da sessão trágica em que o utilizador não conseguiu adivinhar. Figura 5. O fim trágico de HangMan Game

Parte III - Lendo o léxico de um ficheiro Parte III desta tarefa é, de longe, o mais fácil e requer muito menos do que metade de uma página de código. O único problema é que você precisa pesquisar sobre as facilidades para fazê-lo. Assim, a idéia é que terminada as partes I e II, preencher este último detalhe. Seu trabalho nesta parte do trabalho é simplesmente reimplementar a classe HangmanLexicon de modo que em vez de seleccionar a partir de uma lista de dez palavras, ele lê uma lista de palavras muito maior de um ficheiro. Os passos envolvidos nesta parte do trabalho são as seguintes: 1. Abra o HangmanLexicon.txt arquivo de dados usando um BufferedReader que permitirá ler o ficheiro linha por linha. 2. Ler as linhas do arquivo em um ArrayList. 3. Reimplementar os métodos e getwordcount GetWord em HangmanLexicon de modo que eles usam o ArrayList a partir do passo 2 como a fonte das palavras. Os dois primeiros passos devem ser feitos em um construtor para HangmanLexicon, que você terá que adicionar ao ficheiro (ver abaixo). O último passo é simplesmente uma questão de mudar a implementação dos métodos que já lá estão. Aqui está como o construtor HangmanLexicon deve ser adicionado à classe HangmanLexicon: Note-se que nada no programa principal deve mudar porque você fez esta mudança na implementação de HangmanLexicon. É um princípio de bom design de software não ter de fazer grandes mudanças em seu programa, deve ser sempre possível fazer seu programa estender.

Estendendo Há muitas maneiras de estender Hangman para torná-lo mais divertido. Aqui estão algumas idéias: Você poderia tornar as imagens mais atractivas. Você poderia animar as imagens. Em vez de ter as partes do corpo e as letras apenas a aparecer na tela, você pode faze-los moverem-se dentro de fora de campo, como as imagens costumam fazer, por exemplo, em slides do PowerPoint. Você poderia em vez de completar palavras completar frases. Use a sua imaginação!