Académique Documents
Professionnel Documents
Culture Documents
Histrico
Data 19/11/2010 Verso 1.0 Descrio Trmino da primeira verso da documentao dos requisitos ltimas modificaes e ajustes 20/11/2010 1.0 na documentao dos requisitos Entrega da Documentao do 21/11/2010 1.0 SIMPLE TETRIS contendo os Requisitos do jogo 03/06/2011 1.0 Reviso dos Requisitos do jogo Entrega da primeira verso da 04/06/2011 1.0 Documentao do SIMPLE TETRIS contendo os Requisitos e a Anlise do jogo 24/06/2011 1.1 Excluso da classe Jogador do Diagrama de Classes Incluso da classe Tetris no Diagrama de Classes Modificao dos mtodos e atributos das classes Incluso das especializaes 25/06/2011 1.1 da classe Pea do Diagrama de Classes 25/06/2011 1.1 Incluso de explicaes sobre os diagramas no captulo 1.3 Modificaes gramaticas e estruturais no documento Franciele Hoffmann Franciele Hoffmann Franciele Hoffmann Franciele Hoffmann Franciele Hoffmann Franciele Hoffmann Franciele Hoffmann Autor Franciele Hoffmann
24/06/2011
1.1
Franciele Hoffmann
24/06/2011
1.1
Franciele Hoffmann
25/06/2011
1.1
Franciele Hoffmann
26/06/2011
1.1
Franciele Hoffmann
26/06/2011
1.2
Franciele Hoffmann
10/07/2011
1.3
Franciele Hoffmann
10/07/2011
1.4
Franciele Hoffmann
1.3.1. 1.3.1.1. 1.3.1.2. 1.3.2. 1.3.3. 1.3.4. 1.3.5. 1.3.6. 1.3.7. 1.3.7.1. 1.3.7.2. 1.3.7.3. 1.3.7.4. 1.3.8. 1.3.9. 1.3.10. 1.3.11. 1.4.1. 1.4.2. 1.4.2.1. 1.4.2.2. 1.5. 1.6. 1.7.
2. Descrio Geral do Jogo ........................................................................... 26 2.1. Perspectivas do produto...................................................................... 26 Interfaces de sistema.................................................................... 26 Interfaces com o utilizador ............................................................ 26 Teclado...................................................................................... 27 Mouse........................................................................................ 27 Interface grfica ......................................................................... 27 Interface de udio ...................................................................... 27 Interfaces de hardware ................................................................. 27 Teclado...................................................................................... 27 Mouse........................................................................................ 28 Monitor ...................................................................................... 28 Interfaces de software .................................................................. 28 Interfaces de comunicao ........................................................... 28 Memria ........................................................................................ 28 Operaes .................................................................................... 28 Adaptaes ao local de instalao ............................................... 29
2.1.1. 2.1.2. 2.1.2.1. 2.1.2.2. 2.1.2.3. 2.1.2.4. 2.1.3. 2.1.3.1. 2.1.3.2. 2.1.3.3. 2.1.4. 2.1.5. 2.1.6. 2.1.7. 2.1.8. 2.2. 2.3. 2.4. 2.5. 2.6.
Funes do Produto ............................................................................ 29 Caractersticas do utilizador ................................................................ 29 Restries ........................................................................................... 29 Assunes e dependncias ................................................................ 30 Diviso e atribuio das exigncias .................................................... 30
3. Exigncias Especficas do Jogo ............................................................. 30 3.1. Interfaces externas .............................................................................. 30 Teclado ......................................................................................... 31 Mouse ........................................................................................... 31 Monitor.......................................................................................... 31
3.2.1.
Caso de Uso [01]: Escolher opo ............................................................ 32 Caso de Uso [02]: Escolher opo Iniciar jogo .......................................... 33 Caso de Uso [03]: Escolher opo Instrues ........................................... 34 Caso de Uso [04]: Escolher opo Desligar/Ligar som .............................. 36 Caso de Uso [05]: Escolher opo Sair ..................................................... 37 3.2.2. 3.2.2.1. Jogo .............................................................................................. 38 Requisitos de usurio ................................................................ 38
Caso de Uso [06]: Pausar .......................................................................... 39 Caso de Uso [07]: Direcionar pea ............................................................ 40 Caso de Uso [08]: Girar pea .................................................................... 42 Caso de Uso [09]: Descer pea ................................................................. 43 3.2.2.2. Requisitos de sistema ............................................................... 44
Caso de Uso [10]: Sortear pea ................................................................. 44 Caso de Uso [11]: Pea caindo ................................................................. 46 Caso de Uso [12]: Fechar linha ................................................................. 47 Caso de Uso [13]: Aumentar nvel ............................................................. 48 Caso de Uso [14]: Contar pontuao ......................................................... 50 Caso de Uso [15]: Chegar ao topo ............................................................ 51 3.2.3. 3.2.3.1. Ps-jogo ....................................................................................... 52 Requisitos de usurio ................................................................ 52
Caso de Uso [16]: Informar nome .............................................................. 53 Caso de Uso [17]: Submeter ao ranking .................................................... 54 3.2.3.2. Requisitos de sistema ............................................................... 55
Caso de Uso [18]: Mostrar ranking ............................................................ 56 3.3. 3.3.1. 3.3.2. 3.4. 3.5. Exigncias de desempenho ................................................................ 57 Nmero mximo de jogadores por partida ....................................... 57 Nmero de partidas simultneas ..................................................... 57 Exigncias lgicas de base de dados ................................................. 57 Restries de desenho........................................................................ 57 7
Atributos do sistema de software ........................................................ 58 Fiabilidade........................................................................................ 58 Disponibilidade ................................................................................. 59 Segurana........................................................................................ 59 Capacidade de manuteno ............................................................ 59 Portabilidade .................................................................................... 59 Organizao das exigncias especficas ............................................ 60 Modo de sistema.............................................................................. 60 Classe do utilizador .......................................................................... 60 Objetos............................................................................................. 60 Caractersticas ................................................................................. 60 Estmulos ......................................................................................... 60 Resposta .......................................................................................... 60 Hierarquia funcional ......................................................................... 60 Comentrios adicionais ....................................................................... 60
4. Plataforma para Desenvolvimento.......................................................... 61 5. Informaes adicionais ........................................................................... 61 5.1. 5.1.1. 5.1.1.1. 5.1.1.2. 5.1.2. Apndice ............................................................................................. 61 Instrues do jogo ............................................................................ 61 Teclas ........................................................................................... 61 Objetivo ........................................................................................ 62 Peas ............................................................................................... 62
6. Anlise dos Requisitos do Jogo.............................................................. 63 6.1. 6.1.1. 6.1.1.1. 6.1.2. Viso Completa das Classes .............................................................. 63 TetrisThread..................................................................................... 64 run ................................................................................................ 64 Tetris ................................................................................................ 65 8
Quadrado ......................................................................................... 72 atualizaPosio(linha : int, coluna : int)......................................... 72 Ranking ............................................................................................ 72 inserirNoRanking(nome : String, pontuao : int) ......................... 73 reordenaRanking() ........................................................................ 73 zerarRanking() .............................................................................. 73 retornaLinhaArquivo(linha : int) ..................................................... 73
Viso das Atividades ........................................................................... 73 Descrio das Funcionalidades .......................................................... 75 Opes Iniciais Disponveis ............................................................. 75 Funes Durante o Jogo .................................................................. 80 Funes Finais Disponveis ............................................................. 87
7. Viso Completa Dos Pacotes ................................................................. 89 7.1. 7.1.1. 7.1.2. 7.1.3. 7.1.4. 7.1.5. 7.2. 7.2.1. 7.2.1.1. 7.2.1.2. 7.2.2. Descrio dos Pacotes Java ............................................................... 90 Java.io.............................................................................................. 91 Java.awt ........................................................................................... 91 Javax.swing ..................................................................................... 91 Java.appelt....................................................................................... 91 Java.lang.* ....................................................................................... 92 Descrio dos Pacotes do Jogo .......................................................... 92 Pacote modelPeas ......................................................................... 92 Construtor PeaIdentificao (tabuleiro : tabuleiro) ...................... 94 Funo getCopy(t : Tabuleiro) : Pea ........................................... 95 Pacote model ................................................................................... 95 10
7.2.2.1.1. 7.2.2.1.2. 7.2.2.1.3. 7.2.2.1.4. 7.2.2.1.5. 7.2.2.1.6. 7.2.2.1.7. 7.2.2.1.8. 7.2.2.1.9. 7.2.2.2.
Classe Pea.................................................................................. 97 Construtor Pea(tabuleiro : Tabuleiro) ................................... 97 Funo inserirNoTabuleiro() : void ......................................... 98 Funo retirarDoTabuleiro() : void ......................................... 99 Funo descer() : void ........................................................... 99 Funo moveParaEsquerda() : void ..................................... 100 Funo moveParaDireita() : void .......................................... 101 Funo girarPea() : void ..................................................... 102 Funo verificaColisoInferior() : boolean ............................ 104 Funo verificaColisoSuperior() : boolean ......................... 105
7.2.2.2.10. Funo verificaColisoEsquerda() : boolean ....................... 106 7.2.2.2.11. Funo verificaColisoDireita() : boolean ............................ 107 7.2.2.2.12. Funo getTabuleiro() : Tabuleiro........................................ 108 7.2.2.2.13. Funo getCopy(): Pea ...................................................... 108 7.2.2.2.14. Funo setTabuleiro(tab : Tabuleiro) : void ......................... 108 7.2.2.3. Classe Ranking........................................................................... 108 Construtor Ranking() ............................................................ 109 Funo existeRankingNoDisco() : boolean .......................... 109 Funo leRankingNoDisco() : void ....................................... 110 Funo gravaRankingNoDisco() : void ................................. 110 11
7.2.2.3.10. Funo getPontosPosio(i : int) : int .................................. 112 7.2.2.3.11. Funo setNomePosio(nome : String, i : int) : void .......... 112 7.2.2.3.12. Funo setPontosPosio(pontos : int, i : int) : void ............ 112 7.2.2.3.13. Funo getQtd() : int ............................................................ 112 7.2.2.3.14. Funo zerarRanking() : void .............................................. 112 7.2.2.3.15. Funo retornaLinhaArquivo(linha : int) : String .................. 112 7.2.2.4. Classe Tabuleiro ......................................................................... 113 Construtor Tabuleiro(linhas : int, colunas : int) ..................... 113 Funo esvaziarTabuleiro() : void ........................................ 114
7.2.2.4.1. 7.2.2.4.2.
7.2.2.4.3. Funo preenchePosio(linha : int, coluna : int, quadrado : Quadrado) : void ...................................................................................... 114 7.2.2.4.4. 7.2.2.4.5. 7.2.2.4.6. 7.2.2.4.7. 7.2.2.4.8. 7.2.2.4.9. Funo esvaziarPosio(linha : int, coluna : int) : void ......... 114 Funo ehPosioVazia(linha : int, coluna : int) : boolean ... 115 Funo copiarLinha(linhaOrigem : int, linhaDestino : int) : void 115 Funo verificaLinhaCompleta() : int .................................... 115 Funo linhaEstaPreenchida(linha : int) : boolean ............... 115 Funo getLinhas() : int ....................................................... 116
7.2.2.4.10. Funo getColunas() : int .................................................... 116 7.2.2.5. Classe Tetris ............................................................................... 116 Construtor Tetris(tetrisGui : TetrisGUI) ................................ 116 escolherOpo()................................................................... 117 iniciarJogo().......................................................................... 117 ajuda() .................................................................................. 119 liga/desligaSom() ................................................................. 119 12
7.2.2.5.10. inserirNovaPea() ................................................................ 123 7.2.2.5.11. pedeNomeJogador() ............................................................ 123 7.2.2.5.12. retornaTodoRanking().......................................................... 124 7.2.2.5.13. atualizaRanking() ................................................................. 124 7.2.2.5.14. moveEsquerda() .................................................................. 125 7.2.2.5.15. moveDireita() ....................................................................... 125 7.2.2.5.16. girarPea() ........................................................................... 126 7.2.2.5.17. aumentaNvel() .................................................................... 127 7.2.2.5.18. aumentaPontuao() ........................................................... 127 7.2.2.5.19. Funo getPrximaPea() : Pea ........................................ 127 7.2.2.5.20. Funo sleepTime() : int ...................................................... 127 7.2.2.5.21. Funo getRanking() : Ranking ........................................... 127 7.2.2.5.22. Funo getTabuleiro() : Tabuleiro........................................ 128 7.2.2.5.23. Funo ehFimJogo() : boolean ............................................ 128 7.2.2.5.24. Funo ehPausado() : boolean ........................................... 128 7.2.2.5.25. Funo setPausado(b : boolean) : void ............................... 128 7.2.2.5.26. Funo getNivelAtual() : int ................................................. 128 7.2.2.5.27. Funo setPontos(pontos : int) : void .................................. 128 7.2.2.5.28. Funo setNivelAtual(nvelAtual : int) : void ........................ 128 7.2.2.5.29. Funo setFimJogo(fimJogo : boolean) : void ..................... 128 7.2.2.5.30. Funo getPontos() : int ...................................................... 128 7.2.3. 7.2.3.1. Pacote control ................................................................................ 128 Classe TetrisThread ................................................................... 129 Construtor TetrisThread(tetris : Tetris, tetrisGui : TetrisGUI) 129 Funo run()......................................................................... 129
7.2.4.1.1. Construtor MiniTabuleiroGUI(tetris : Tetris, tabuleiro : Tabuleiro) 131 7.2.4.1.2. 7.2.4.2. Funo paint(g : Graphics) ................................................... 132
Classe TabuleiroGUI .................................................................. 133 Construtor TabuleiroGUI(tabuleiro : Tabuleiro) .................... 133 Funo paint(g : Graphics) ................................................... 134
Classe TetrisGUI ........................................................................ 134 Construtor TetrisGUI() .......................................................... 135 Funo pausaJogo() : void ................................................... 135 Funo tecla/BotoPrecionado() : void ................................ 136
8. Interao entre os Objetos ................................................................... 138 9. Prottipos de Interfaces do Jogo .......................................................... 139 10. 10.1. 10.2. 10.3. 10.4. 10.5. 10.5.1. 10.5.2. 10.5.3. 10.6. 10.6.1. 10.6.2. 10.7. 10.7.1. 10.7.2. 10.8. 10.9. Processo de Planejamento do Projeto .............................................. 143 Objetivos ........................................................................................ 143 Pblico alvo .................................................................................... 143 Premissas ...................................................................................... 143 Restries ...................................................................................... 144 Anlise de Viabilidade .................................................................... 144 Viabilidade Tecnolgica .............................................................. 144 Viabilidade Econmica ............................................................... 145 Viabilidade Legal ........................................................................ 145 Fatores Ambientais e Organizacionais .......................................... 145 Ambientais .................................................................................. 146 Organizacionais .......................................................................... 146 Termos ........................................................................................... 146 Termo de Abertura do Projeto .................................................... 146 Termo de Encerramento do Projeto ............................................ 147 Declarao do Escopo Preliminar do Projeto................................. 147 Estrutura Analtica do Projeto (EAP) .............................................. 148 14
10.10.1. Funes do Software .................................................................. 153 10.10.1.1. 10.10.1.2. Gerncia da Partida................................................................. 153 Gerncia de Perifricos ........................................................... 154
10.10.2. Estimativas ................................................................................. 154 10.10.3. Recursos .................................................................................... 160 10.10.3.1. 10.10.3.2. Recursos Humanos ................................................................. 160 Recursos Tecnolgicos ........................................................... 161
10.10.4. Cronograma ................................................................................ 161 10.10.5. Custos ........................................................................................ 163 10.10.5.1. 10.10.5.2. 10.10.5.3. Custos Fixos ............................................................................ 163 Custos Variveis ..................................................................... 163 Custo Total .............................................................................. 164
15
18
19
1.
Introduo
1.1. Propsito O presente documento tem por objetivo fornecer todas as caractersticas
e funcionalidade que o jogo dever apresentar no momento de sua implementao e execuo, descrevendo os requisitos, a anlise, o projeto e o plano de projeto deste software, para que assim o desenvolvedor de software tenha o total domnio dos reais requisitos que o sistema deve atingir. Dos captulos 1 4 so apresentadas, alm da introduo, descrio geral do jogo, bem como as exigncias especficas do jogo e informaes adicionais, sendo estas, informaes necessrias para o bom funcionamento do mesmo. No captulo 5 tem-se a anlise dos requisitos do jogo contendo a descrio das classes e dos mtodos que devero ser implementados. O captulo 6 traz as informaes referentes ao projeto de software, juntamente com imagens que tm por objetivo auxiliar o desenvolvedor a ver como o jogo dever ser. Finalmente no captulo 6 so apresentadas as informaes referentes ao plano de projeto do jogo. 1.2. mbito O produto a ser desenvolvido trata-se de um jogo conhecido como Tetris, originado da Rssia no ano de 1984 por engenheiros informticos. Acredita-se que este jogo um sucesso at os dias atuais, graas basicamente a sua simplicidade. O Tetris entrou para o Guinness, o livro dos recordes, por se tornar o jogo mais portado e com o maior nmero de variantes oficiais e no oficiais. O jogo caracterizado por peas de diferentes formato s que caem do topo da tela aleatoriamente, e devem ser encaixadas, uma a uma pelo jogador, com o objetivo de organiz-las de maneira a formar uma linha horizontal, que desaparecer assim que no houver mais espaos em branco na determinada 20
acessibilidade de pessoas com deficincia. O jogo s poder ser portado para web caso a opo de ranking seja desativada ou o suporte ao mesmo seja projetado e implementado, observando-se que estas opes no fazem parte do escopo deste trabalho. 1.3. Definies, acrnimos e abreviaturas Para o correto compreendimento deste documento, exige-se o conhecimento de algumas definies que so descritas a seguir. 1.3.1. Requisito
Requisito o conjunto de caractersticas e funcionalidades que o software poder e/ou dever atender. Cada requisito dever participar de uma escala de prioridade e de frequncia, que diz o quo importante , e qual a frequncia de uso, respectivamente, da funcionalidade em questo. Para isto 21
Essencial: So requisitos essenciais para o funcionamento do jogo e no devem deixar de ser implementados. Importante: So requisitos fundamentais para o funcionamento satisfatrio do jogo. Sem estes, o jogo pode no funcionar de forma correta ou sofrer limitaes em relao ao seu funcionamento. Desejvel: So requisitos que no chegam a comprometer as funcionalidades bsicos do jogo, podendo ser implementado em verses futuras do jogo. 1.3.1.2. Frequncia
Alta: So os requisitos com as funcionalidades que so utilizadas mais repetidamente durante o jogo. Mdia: So os requisitos com as funcionalidades utilizadas com repetio intermediria durante o jogo. Baixa: So os requisitos com as funcionalidades utilizadas com menor repetio durante o jogo. 1.3.2. Jogador
O jogador, como assim foi por vezes tratado, o usurio do software. 1.3.3. Sistema
O sistema representa um conjunto de funcionalidades, presentes no computador do jogador, e que controlam o jogo. 1.3.4. Direcionar 22
Ranking uma tabela que mostra o nome dos jogadores que mais obtiveram pontos no jogo, bem como, suas pontuaes. 1.3.6. Score
Score a pontuao do usurio no jogo, seja ela total ou parcial. 1.3.7. Limites da tela
Abaixo so descritos os limites da tela e qual a importncia da compreenso de cada um para o sistema. 1.3.7.1. Inferior
Limite inferior da tela refere-se ao final da tela ou encontrar(encostar) em uma pea que esteja posicionada abaixo, este limite deve ser checado enquanto a pea estiver caindo (Caso de Uso [11]). 1.3.7.2. Superior
Limite superior da tela refere-se ao inicio da tela, a parte de cima ou encontrar(encostar) uma pea neste limite. Este limite deve ser checado quando a pea parar (Caso de Uso [15]). 1.3.7.3. Direito
Limite direito da tela refere-se ao lado direito da tela, este limite desse ser checado quando a pea for movida para a direita ou quando a pea for girada (Caso de Uso [07] e Caso de Uso [08]). 1.3.7.4. Esquerdo
23
O ator primrio a entidade responsvel pela ao em questo. Neste trabalho, representar sempre um ser humano. 1.3.9. Gatilho
Ao que leva a execuo de alguma funcionalidade no software. 1.3.10. Tarefa primria Uma tarefa que possui sub tarefas. 1.3.11. Tarefa especfica Uma tarefa que no possui sub tarefas. 1.4. Diagramas Os diagramas so os grficos que descrevem o contedo em uma viso. Neste documento utiliza-se a linguagem UML e o software Astah Community para gerar tais diagramas. 1.4.1. Diagrama de Classes
O diagrama de classes o principal diagrama da UML, pois demonstra a estrutura esttica das classes de um sistema, alm de ilustrar as interfaces e relacionamentos entre elas. 1.4.2. Classes
Uma classe a descrio das propriedades e comportamentos de um objeto, ou seja, objetos so instncias de uma classe.
24
Atributos representam propriedades comuns entre todos os objetos da classe, podem ter valores iguais ou diferentes. 1.4.2.2. Mtodos
Mtodos representam as aes comuns entre todos os objetos da classe, geralmente os mtodos alteram os valores dos atributos. 1.5. Diagrama de Atividade Um diagrama de atividade uma maneira alternativa de se mostrar interaes, com a possibilidade de expressar como as aes so executadas, o que elas fazem (mudanas nos estados dos objetos), quando elas so executadas (sequncia das aes), e onde elas acontecem (swimlanes). O diagrama de atividade mostra o fluxo sequencial das atividades, normalmente utilizado para demonstrar as atividades executadas por uma operao especfica do sistema. Decises e condies, como execuo paralela, tambm podem ser mostradas neste diagrama. O diagrama tambm pode conter especificaes de mensagens enviadas e recebidas como partes de aes executadas. 1.6. Diagrama de Sequncia O diagrama de sequncia mostra a colaborao dinmica entre os vrios objetos de um sistema. mostrado atravs dele as interaes entre os objetos, ou seja, as coisas que acontecem em um ponto especfico da execuo do programa. 1.7. Referncias Norma IEEE Std 830-1998 (disponvel em
http://www.urisan.tche.br/~pbetencourt/engsoftI/estrutura.pdf)
25
1.8. Organizao Este documento segue o modelo padro da IEEE, juntamente com seus conceitos quanto qualidade, estando organizado em sees e subsees. As informaes contidas nas primeiras sees tratam do software em carter geral, alm da organizao do documento. O documento possui as informaes necessrias quanto ao funcionamento do jogo, documento este, essencial para o bom compreendimento do funcionamento do jogo, bem como suas caractersticas, recursos e limitaes.
2.
de um sistema maior. Entretanto, para que seu funcionamento ocorra da maneira esperada, so necessrios alguns subsistemas especficos. A comunicao correta com estes subsistemas sero descritas abaixo: 2.1.1. Interfaces de sistema
O presente trabalho no contempla interfaces de sistema por no ser parte de um sistema maior. 2.1.2. Interfaces com o utilizador
O software utiliza-se de alguns perifricos de entrada e sada para que ocorra a interao do usurio com o jogo, estes perifricos so descritos a seguir.
26
O teclado ser o perifrico de entrada mais utilizado no software, pois atravs dele o jogador far todas as movimentaes no jogo, alm de conseguir iniciar, sair, pausar, acessar ajuda, submeter pontuao e ligar/desligar o som atravs de atalhos, e ainda confirmar a submisso do seu nome e pontuao para o ranking. 2.1.2.2. Mouse
O mouse no ser utilizado frequentemente, pois as funes de iniciar, sair, pausar, acessar ajuda, submeter pontuao e ligar/desligar o som, que podem ser feitas atravs do mouse, possuem atalhos no teclado. 2.1.2.3. Interface grfica
A interface grfica que ser apresentada ao usurio dever ser de fcil uso, alm de dispor da tela do jogo e botes que permitam ao usurio iniciar, sair, pausar, acessar ajuda, submeter pontuao e ligar/desligar o som quando necessitar. 2.1.2.4. Interface de udio
O udio ser utilizado apenas como forma de entretenimento, podendo ser desligado sem que prejudique a jogabilidade. 2.1.3. Interfaces de hardware
Para que seja implementada a interface com o utilizador e assim ocorra o correto funcionamento do software, so exigidas algumas especificidades de hardware, citadas a seguir. 2.1.3.1. Teclado
necessrio que o teclado esteja no padro ABNT2 e, em caso de teclados multimdia esteja com os drives corretamente instalados. 27
O mouse deve utilizar a configurao padro do Sistema Operacional (selecionar com o boto esquerdo e abrir opes com o boto direito o boto direito no ser utilizado). 2.1.3.3. Monitor
O monitor ser utilizado para mostrar a interface grfica ao usurio, aconselhvel que utilize uma resoluo entre 800x600 e 1280x800. O software no implementar qualquer funcionalidade que permita interao por touchscreen, presente nos monitores mais modernos. 2.1.4. Interfaces de software
O nico software necessrio para a execuo desde jogo a Mquina Virtual Java(Java Virtual Machine). 2.1.5. Interfaces de comunicao
Este software no contemplar opes de jogo on-line mantendo ranking de todos os jogadores, por exemplo nem em rede vrios usurios jogam, e vence quem tiver o maior score, por exemplo. 2.1.6. Memria
O software a ser implementado no ter restries referentes memria, seja ela principal ou secundria, por ser um jogo leve, ou seja, no necessita de grande poder de processamento. Sendo assim, se o computador atender s interfaces de hardware e software deste documento, o jogo ter a performance pretendida. 2.1.7. Operaes
28
Para este software no so necessrias adaptaes fsicas e nem virtuais, pois o software portvel, ou seja, pode ser executado em qualquer Sistema Operacional que possua a Java Virtual Machine, no necessitando de instalao. 2.2. Funes do Produto O software SIMPLE TETRIS dever implementar um jogo simples de Tetris no qual O usurio poder a qualquer momento iniciar, sair, pausar,
acessar ajuda ou ligar/desligar o som; O software dever disponibilizar a opo de o usurio submeter-
se ao ranking no final do jogo, e tambm mostrar esse ranking ao usurio; 2.3. Caractersticas do utilizador O utilizador do software no necessita de conhecimentos avanados em computao para jogar, basta que tenha familiaridade com o mouse e principalmente com o teclado. O software no prov nenhum tipo de acessibilidade para usurios com deficincia visual ou outro tipo de deficincia que no permita que o usurio utilize o teclado e/ou o mouse. O software espera que o utilizador seja alfabetizado, uma vez que todas as suas instrues so em modo textual. 2.4. Restries 29
3.
O teclado tem como entrada uma combinao de teclas que repassada na forma de um sinal de comando para o software. Quando o usurio pressiona uma tecla, o teclado identifica a tecla e repassa para o software qual a tecla pressionada, disparando um movimento no jogo ou uma funo. 3.1.2. Mouse
O mouse utilizado como outra forma de interao do usurio com o software. Quando o usurio clica sobre um boto, o mouse recebe a identificao do boto selecionado e o repassa para o software, que disparar alguma funcionalidade. 3.1.3. Monitor
O monitor recebe do software os dados da interface grfica e os mostra em forma de janelas para o usurio. 3.2. Funes As funes que o software dever possuir esto listadas abaixo, divididas quanto etapa (pr-jogo, jogo e ps-jogo) e quanto ao ator responsvel por ativar essa funcionalidade. 3.2.1. Pr-jogo
Neste tpico sero descritos todos os Casos de Uso referentes ao prjogo, ou seja, tudo que o usurio poder fazer no software antes de comear a jogar. 3.2.1.1. Requisitos de usurio 31
Descrio: O jogador ter uma srie de opes, onde poder escolher apenas uma delas por vez. Escopo: Jogo Nvel: Tarefa primria Pr-condies: O jogador deve estar com o software aberto. 32
Objetivo de desempenho: Sem tempo pr-definido, o software se mantm naquela condio at que o usurio escolha uma das opes do menu. Assuntos abertos: O jogo no prosseguir, nem encerrar at que o jogador escolha uma das opes do menu. Prioridade: Essencial. Frequncia: Alta. Calendrio: release 1.0 Caso de Uso [02]: Escolher opo Iniciar jogo
33
Condio em caso de sucesso: Uma partida foi iniciada. Condio em caso de falha: O software foi encerrado. Ator primrio: Jogador Gatilho: Jogador escolhe Iniciar jogo no Caso de Uso [01]. Cenrio principal de sucesso: 1. 2. O jogador seleciona a opo Iniciar jogo; Uma nova partida iniciada.
Objetivo de desempenho: Rpido. Assuntos abertos: Uma nova partida iniciada. Prioridade: Essencial. Frequncia: Alta. Calendrio: release 1.0 Caso de Uso [03]: Escolher opo Instrues
34
Descrio: Se escolhida a opo Instrues, o software dever mostrar as instrues do jogo, descritas na subseo 4.2.1 deste documento. Esta opo dever estar disponvel a qualquer instante da execuo do software. Escopo: Jogo. Nvel: Tarefa especfica. Pr-condies: 1. 2. O Caso de Uso [01] deve ter sido executado, e; A opo Instrues deve ter sido escolhida.
Condio em caso de sucesso: As instrues foram mostradas. Condio em caso de falha: O software foi encerrado. Ator primrio: Jogador Gatilho: Jogador escolhe Instrues no Caso de Uso [01]. Cenrio principal de sucesso: 1. 2. O jogador seleciona a opo Instrues; As instrues so mostradas na tela para o jogador.
Descrio: Se escolhida opo Desligar/Ligar som, o som dever ser desligado se estiver ligado ou ligado se estiver desligado. Esta opo dever estar disponvel a qualquer instante durante a execuo do software. Escopo: Jogo Nvel: Tarefa especfica. Pr-condies: 1. 2. O Caso de Uso [01] deve ter sido executado, e; A opo Desligar/Ligar som deve ter sido escolhida.
Condio em caso de sucesso: O som foi desligado/ligado. Condio em caso de falha: O software foi encerrado. Ator primrio: Jogador 36
Objetivo de desempenho: Rpido. Assuntos abertos: O som desligado/ligado. Prioridade: Desejvel. Frequncia: Baixa. Calendrio: release 1.0 Caso de Uso [05]: Escolher opo Sair
Descrio: Se escolhida opo Sair, o software dever ser corretamente encerrado. Escopo: Jogo Nvel: Tarefa especfica Pr-condies: 37
Condio em caso de sucesso: O software foi encerrado. Condio em caso de falha: O software no foi encerrado. Ator primrio: Jogador Gatilho: Jogador escolhe Sair no Caso de Uso [01]. Cenrio principal de sucesso: 1. 2. O jogador seleciona a opo Sair; O software encerrado.
Objetivo de desempenho: Rpido. Assuntos abertos: O software ser encerrado e o jogo ser perdido. Prioridade: Importante. Frequncia: Mdia. Calendrio: release 1.0 3.2.2. Jogo
Neste tpico sero descritos todos os Casos de Uso referentes ao jogo, ou seja, tudo que o usurio poder fazer no decorrer da execuo do software. 3.2.2.1. Requisitos de usurio
Funcionalidades que o usurio poder usufruir durante o jogo alm daquelas descritas no pr-jogo e que podem ser acessadas durante a execuo do jogo e que so divididos em 4 sub-funes.
38
Descrio: O usurio clica na opo Pausar ou utiliza um atalho de teclado e ento o jogo pausado(parado) na situao em que estiver, at que o usurio efetue esta operao novamente. Escopo: Jogo Nvel: Tarefa especfica Pr-condies: 1. O Caso de Uso [02] deve ter sido executado, e;
39
mouse ou atalho de teclado). Condio em caso de sucesso: O software foi pausado. Condio em caso de falha: O software foi encerrado. Ator primrio: Jogador Gatilho: Clicar em Pausar ou atalho de teclado para Pausar. Cenrio principal de sucesso: 1. 2. O jogador seleciona a opo Pausar; O jogo pausado.
Objetivo de desempenho: Rpido. Assuntos abertos: O software pausado. Prioridade: Importante. Frequncia: Mdia. Calendrio: release 1.0 Caso de Uso [07]: Direcionar pea
40
Condio em caso de sucesso: A pea que est caindo movimentada. Condio em caso de falha: A pea j est no limite da tela e no movida para a direo escolhida. Ator primrio: Jogador Gatilho: Teclas direcionais pressionadas. Cenrio principal de sucesso: 1. 2. O jogador pressiona uma tecla direcional; A pea movimentada.
Objetivo de desempenho: Rpido. Assuntos abertos: A pea ser direcionada. Prioridade: Essencial. Frequncia: Alta. Calendrio: release 1.0 41
Descrio: A pea deve ser girada sempre que o usurio pressionar a tecla direcional para cima, a menos que no haja espao para que a pea seja girada. Escopo: Jogo Nvel: Tarefa especfica Pr-condies: 1. 2. O Caso de Uso [02] deve ter sido executado, e; A tecla direcional para cima deve ter sido pressionada.
Condio em caso de sucesso: A pea girada. Condio em caso de falha: No h espao para a pea ser girada. Ator primrio: Jogador Gatilho: Jogador pressiona tecla direcional para cima. Cenrio principal de sucesso: 1. 2. O jogador pressiona a tecla direcional para cima; A pea girada. 42
Descrio: A pea deve descer em maior velocidade quando a tecla direcional para baixo for pressionada, a menos que a pea j esteja no limite inferior da tela. Escopo: Jogo Nvel: Tarefa especfica Pr-condies: 1. 2. O Caso de Uso [02] deve ter sido executado, e; A tecla direcional para baixo deve ter sido pressionada.
Condio em caso de sucesso: A pea desce em maior velocidade. Condio em caso de falha: A pea j est no limite inferior da tela. 43
Objetivo de desempenho: Rpido. Assuntos abertos: A pea desce em maior velocidade. Prioridade: Essencial. Frequncia: Alta. Calendrio: release 1.0 3.2.2.2. Requisitos de sistema
Descrio: Uma pea sorteada assim que o jogo executado, esta pea comea a cair e outra pea sorteada e exibida ao usurio como a prxima pea. Quando a pea que est caindo chegar no limite inferior, a pea que atava sendo exibida ao usurio como prxima comea a cair e uma nova pea sorteada e fica como a prxima pea. Escopo: Jogo Nvel: Tarefa especfica Pr-condies: O Caso de Uso [02] deve ter sido executado. Condio em caso de sucesso: Uma pea deve ser sorteada. Condio em caso de falha: O software encerrado. Ator primrio: Sistema Gatilho: Uma pea chega no limite inferior. Cenrio principal de sucesso: 1. 2. Uma pea sorteada; A pea sorteada exibida para o usurio.
Descrio: A pea que foi sorteada comea a cair at que chegue no limite inferior da tela. Escopo: Jogo Nvel: Tarefa especfica Pr-condies: O Caso de Uso [02] deve ter sido executado. Condio em caso de sucesso: A pea vai caindo. Condio em caso de falha: A pea chega no limite inferior da tela.. Ator primrio: Sistema Gatilho: Uma pea chega no limite inferior.
46
Descrio: Durante o jogo, cada vez que o usurio completar uma linha, ou seja, no exista nesta linha nenhum espao vazio, a mesma deve desaparecer, dando pontos ao usurio e fazendo com que as teclas ou pedaos de peas que estiverem na linha acima, ocupem o lugar desta que desapareceu. Escopo: Jogo Nvel: Tarefa especfica Pr-condies:
47
Condio em caso de sucesso: A linha fechada desaparece. Condio em caso de falha: O software encerrado. Ator primrio: Sistema Gatilho: Uma linha fechada. Cenrio principal de sucesso: 1. 2. 3. descem. Objetivo de desempenho: Rpido. Assuntos abertos: Uma linha fechada. Prioridade: Essencial. Frequncia: Alta. Calendrio: release 1.0 Caso de Uso [13]: Aumentar nvel Uma linha fechada; A linha fechada desaparece. As peas ou pedaos de peas que estiverem acima desta linha
48
Descrio: Enquanto o usurio joga, ganha pontos, e assim que atingir uma quantidade x de pontos o nvel de dificuldade dever aumentar e ento a velocidade do jogo deve aumentar. Escopo: Jogo Nvel: Tarefa especfica Pr-condies: 1. 2. O Caso de Uso [02] deve ter sido executado. Uma pontuao x deve ser alcanada.
Condio em caso de sucesso: O nvel aumentado. Condio em caso de falha: O software encerrado. Ator primrio: Sistema Gatilho: Uma pontuao x atingida. Cenrio principal de sucesso: 1. 2. O nvel de dificuldade aumentado; O aumento de nvel informado ao usurio.
49
Descrio: Sempre que uma pea chegar ao limite inferior na tela, dever ser verificada a posio dessa pea (altura) e de acordo com a posio acrescida uma quantidade de pontos para o jogador. Escopo: Jogo Nvel: Tarefa especfica Pr-condies: 1. 2. O Caso de Uso [02] deve ter sido executado. Uma pea deve atingir o limite inferior da tela.
Condio em caso de sucesso: A pontuao do jogador atualizada. Condio em caso de falha: O software encerrado. Ator primrio: Sistema 50
Objetivo de desempenho: Rpido. Assuntos abertos: A pontuao atualizada. Prioridade: Importante. Frequncia: Alta. Calendrio: release 1.0 Caso de Uso [15]: Chegar ao topo
Descrio: Sempre que uma pea chegar no limite superior da tela, dever ser informado ao jogador que ele perdeu. Em seguida, a possibilidade de inserir nome e pontuao deve ser mostrada. Escopo: Jogo Nvel: Tarefa especfica Pr-condies: 51
Condio em caso de sucesso: Uma pea encostou no limite superior da tela. Condio em caso de falha: O software encerrado. Ator primrio: Sistema Gatilho: Uma pea chega no limite superior da tela. Cenrio principal de sucesso: 1. 2. 3. Uma pea chega no limite superior da tela; O jogo acaba, o jogador perde; Entra nas funes de ps-jogo.
Objetivo de desempenho: Rpido. Assuntos abertos: Alguma pea chega ao topo, o que ocasiona o fim do jogo. Prioridade: Essencial. Frequncia: Alta. Calendrio: release 1.0 3.2.3. Ps-jogo
Neste tpico sero descritos todos os Casos de Uso referentes ao pjogo, ou seja, tudo que o usurio poder fazer no software aps o trmino do jogo. 3.2.3.1. Requisitos de usurio
Descrio: Quando um jogo chega ao fim, dever ser apresentada ao usurio a possibilidade de incluir seu nome e pontuao ao ranking. Escopo: Jogo Nvel: Tarefa especfica Pr-condies: O Caso de Uso [15] deve ter sido executado. Condio em caso de sucesso: O usurio informa o nome.
53
Descrio: Quando o jogo acabar, e o usurio inserir seu nome, e a opo de submeter ao ranking for selecionada, esta opo deve ser executada, inserindo o nome e a pontuao do jogador atual no ranking.
54
Condio em caso de sucesso: O nome e pontuao do jogador so submetidos ao ranking. Condio em caso de falha: O software encerrado. Ator primrio: Jogador Gatilho: A opo de submeter ao ranking foi escolhida. Cenrio principal de sucesso: O nome e a pontuao obtidos devem ser inseridos no ranking. Objetivo de desempenho: Rpido. Assuntos abertos: O nome e pontuao so includos no ranking. Prioridade: Desejvel. Frequncia: Mdia. Calendrio: release 1.0 3.2.3.2. Requisitos de sistema
55
Descrio: Quando o jogo acabar, e o usurio inserir seu nome, e a opo de submeter ao ranking for selecionada, esta opo deve ser executada, mostrando o ranking atualizado. Escopo: Jogo Nvel: Tarefa especfica Pr-condies: 1. 2. O Caso de Uso [17] deve ter sido executado. Deve ter sido selecionada a opo de submeter ao ranking.
O software ser projetado para funcionar com apenas um jogador. 3.3.2. Nmero de partidas simultneas
O software dar suporte para jogar apenas uma partida por vez. 3.4. Exigncias lgicas de base de dados O software utilizar um sistema de ranking local, no ser utilizada, portanto, nenhuma base de dados. O ranking ser gravado em arquivo e servir apenas para o computador local onde estiver rodando. 3.5. Restries de desenho 57
O usurio dever ser capaz de rodar o software com um processador acima de 700MHz ou superior. 3.5.1.2. Memria
O software dever rodar corretamente em um computador que possui no mnimo 256MB de memria RAM. 3.6. Atributos do sistema de software Nesta seo sero especificados os atributos de software requeridos e que servem de exigncia, de modo a que seu cumprimento possa ser objetivamente verificado. 3.6.1. Fiabilidade
Para que o software apresente as fiabilidades para o qual ser projetado, algumas exigncias devem ser respeitadas: A mquina na qual o software ser rodado deve possuir um
Sistema Operacional corretamente instalado (estvel) alm de ter uma Mquina Virtual Java instalada(verso 6.0 em diante); A mquina na qual o software ser rodado no deve estar
infectada por vrus ou outras pragas digitais que atrapalham o correto funcionamento do Sistema Operacional; Todos os perifricos de entrada citados como interface externa
No h requisitos de disponibilidade neste software por ele no utilizar rede local. 3.6.3. Segurana
Para que o software mantenha uma boa segurana, as seguintes medidas devem ser tomadas: O Sistema Operacional deve alm de estar corretamente
instalado, estar atualizado; O antivrus deve estar com sua base de dados atualizada
seu firewall ativado; 3.6.4. O cdigo fonte do software no deve ser alterado. Capacidade de manuteno
Pelo fato de o software estar usando mtodos da engenharia como requisitos e anlise do software, orientao a objetos, modelagem, o software poder ser facilmente alterado para manuteno. Alm de o software ser dividido em pacotes de acordo com a funcionalidade, como: 3.6.5. Pacote de controles do jogo; Pacote da interface com o usurio. Portabilidade
O software ser projetado de modo a ficar totalmente portvel, para isso, dever ser implementado utilizando a linguagem de programao Java.
59
O software apresentar somente um modo de utilizao, que descrito atravs dos requisitos citados anteriormente. 3.7.2. Classe do utilizador
O software ser projetado somente para um usurio genrico, no havendo outros modos para tipos de usurios especficos. 3.7.3. Objetos
Os objetos identificam as entidades que se correspondem com o sistema, ou seja, no jogo em questo, podemos citar as peas, dentre outros. 3.7.4. Caractersticas
Neste software, no so contemplados estmulos por possuir suas tradicionais regras. 3.7.6. Resposta
60
4.
a linguagem de programao Java, por ser uma linguagem muito utilizada nos dias de hoje e por ter uma grande portabilidade, alm de conter timos recursos para o desenvolvimento da interface grfica. O projeto do jogo foi baseado inteiramente na orientao a objetos e para tanto, as representaes utilizam-se das classes e interfaces
5.
Informaes adicionais
5.1. Apndice Nesta seo so mostradas informaes importantes para o
Durante toda execuo do software, os menus podem ser acessados atravs do mouse botes da interface , ou atravs de atalhos do teclado que so descritos na tabela a seguir, alm das teclas necessrias para jogar:
Tabela 1: Atalhos do Jogo
Funcionalidade
Atalho
61
5.1.1.2.
Objetivo
O objetivo do jogo encaixar tetramins, que so peas de diversos formados que descem do topo de uma tela. O jogador deve rodas as diversas peas a fim de completar uma linha. Quando uma linha completada, a mesma desaparece e d pontos extras ao jogador. O jogo termina quando as linhas incompletas se empilham at o topo da tela do jogo. 5.1.2. Peas
No jogo Tetris, h 7peas bsicas, sendo umas o inverso horizontal de outras. As peas podem ser giradas para que se consiga encaix-las corretamente. Cada pea constituda de 4 quadros posicionados de maneira a tornar cada pea diferente. O valor de cada pea, calculado levando-se em considerao a altura em que a pea parou, sendo que quando mais longe do topo, mais vale a pea, e quando mais perto do topo, menos vale a pea. A cor das peas s serve para diferenci-las, no influenciando na pontuao. O desenho das peas mostrado abaixo:
Tabela 2: Descrio dos Nomes das Peas
62
6.
objetos, sendo assim realizada a identificao das classes adequadas, com seus mtodos e atributos necessrios para uma correta implementao e futuro bom funcionamento do jogo. Os diagramas de classes que so o paradigma fundamental da orientao a objetos e os outros contidos no documento foram feitos com auxlio do programa Astah Community 6.4 (Model Version: 34) e da linguagem UML (Unified Modeling Language ou Linguagem de Modelagem Unificada). 6.1. Viso Completa das Classes
63
O diagrama da Figura 24 representa as classes do jogo, bem como seus atributos e mtodos que realizam as interaes entre as classes e assim entre o jogo e o usurio. Estas classes, juntamente com seus atributos e mtodos so descritas abaixo. 6.1.1. TetrisThread
A classe TetrisThread possui ligao apenas com a classe Tetris, possuindo assim apenas um atributo tetris desta classe. 6.1.1.1. run
O mtodo run() tem por objetivo executar um fluxo de operao(Thread) independente do fluxo original sendo assim independente da interao com o usurio. Neste mtodo dever haver um loop que s para quando o jogo finalizar, for pausado ou a opo ajuda for requerida. Sua funo a de 64
A classe Tetris pode ser considerada como a classe mais importante, pois responsvel por fazer o controle geral do jogo, tendo ligao com quase todas as demais classes. atravs desta classe que o usurio poder interagir com o jogo. Nesta classe tem-se atributos como tabuleiro que guarda as peas do jogo, a peaAtual e a prximaPea que iro participar do jogo, alm de atributos como pontuao, para guardar quantos pontos o usurio j conquistou, e seu nvelAtual. Encontram-se tambm nesta classe atributos que servem para controlar o jogo como fim, pausado e som. O atributo ranking utilizado para referenciar-se ao ranking onde so mantidas as pontuaes dos jogadores. 6.1.2.1. escolherOpo()
Este mtodo verifica qual a opo escolhida pelo usurio e ento chama-a. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.2.2. iniciarJogo()
Este mtodo inicia o jogo, chamando as funes que disparam a thread. Tambm neste mtodo so dados valores a quase todos os atributos desta classe, alm de sortear a prxima pea e inseri-la no tabuleiro. Esta funo s pode ser acessada antes do jogo e necessita de interveno do usurio. 6.1.2.3. ajuda()
Este mtodo mostra as instrues do jogo, regras e teclas necessrias para realizar a interao com o mesmo. Esta funo pode ser acessada a qualquer momento antes ou durante o jogo e necessita de interveno do usurio. 65
Este mtodo altera o valor do atributo som de true para false e viceversa, demonstrando que o som est ligado ou desligado. Esta funo pode ser acessada a qualquer momento antes ou durante o jogo e necessita de interveno do usurio. 6.1.2.5. sair()
Este mtodo encerra o jogo por completo de maneira segura. Esta funo pode ser acessada a qualquer momento antes, durante ou aps o jogo e necessita de interveno do usurio. 6.1.2.6. pausar()
Este mtodo para a execuo do jogo quando for requerida e s continua aps ser executada novamente. Esta funo pode ser acessada a qualquer momento durante o jogo e necessita de interveno do usurio. 6.1.2.1. descerPea()
Este mtodo verifica colises inferiores para que se possa descer a peaAtual. Aps esta verificao, quando ocorre coliso, ele chama o mtodo descerPea() da classe Pea. Quando ocorre coliso o mtodo verifica se alguma linha foi completada atravs do mtodo verificaLinhaCompleta() da classe Tabuleiro, caso haja, aumenta-se a pontuao e o nvel do jogador, caso contrrio apenas aumenta-se a pontuao. Este mtodo ainda chama o mtodo que verifica coliso superior da peaAtual, caso haja, ocasiona o fim do jogo. Esta funo pode ser acessada a qualquer momento durante o jogo e pode ser executada tanto pelo usurio para acelerar o movimento de descida da pea quanto pelo prprio jogo, a fim de mostrar a pea descendo linha a linha. 6.1.2.2. sortearPea()
66
Este mtodo sorteia qual ser a prximaPea e posteriormente insere esta pea como peaAtual do tabuleiro. Esta funo requerida ao iniciar novo jogo e toda vez que uma pea parar no tabuleiro. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.2.4. pedeNomeJogador()
Este mtodo solicita o nome do jogador para inclu-lo no ranking atravs da funo atualizaRanking(). Esta funo requerida apenas quando o jogo for encerrado e somente se o jogador aceitar submeter-se ao ranking. 6.1.2.5. retornaTodoRanking()
Este mtodo gera uma String com todo o ranking e a retorna. Para conseguir o nome e a pontuao de cada jogador no Ranking chamada a funo retornaLinhaArquivo() da classe Ranking. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.2.6. atualizaRanking()
Este mtodo envia a classe Ranking o nome e a pontuao do jogador atravs do mtodo inserirNoRanking da classe Ranking. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.2.7. moveEsquerda()
Este mtodo verifica coliso do lado esquerdo e se esta no ocorreu ento chama a funo moverParaEsquerda() da classe Pea atravs do
67
Este mtodo verifica coliso do lado direito e se esta no ocorreu ento chama a funo moverParaDireita() da classe Pea atravs do atributo peaAtual. Esta funo pode ser acessada a qualquer momento durante o jogo atravs de interveno do usurio. 6.1.2.1. girarPea()
Este mtodo chama o mtodo girarPea() da classe Pea atravs do atributo peaAtual, o que faz com que a pea seja girada, quando possvel, ou seja, quando no houver possibilidade de coliso. Esta funo pode ser acessada a qualquer momento durante o jogo atravs de interveno do usurio. 6.1.2.2. aumentaNvel()
Este mtodo utilizado quando uma linha completada para aumentar a dificuldade do jogo. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.2.3. aumentaPontuao()
Este mtodo utilizado a cada pea que encaixada, contando pontos para o jogador. Quando uma linha completada o jogador ganha mais pontos. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.3. Tabuleiro
A classe Tabuleiro formada por uma matriz de Quadrados a classe Quadrado ser descrita posteriormente com linha e coluna especificadas pelo programador.
68
Este mtodo limpa todas as posies do tabuleiro, geralmente a fim de iniciar um novo jogo. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.3.2. Quadrado) Este mtodo coloca um quadrado, passado como parmetro, em uma posio do tabuleiro, tambm passada por parmetro. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.3.3. esvaziarPosio(linha : int, coluna : int) preenchePosio(linha : int, coluna : int, quadrado :
Este mtodo limpa uma posio do tabuleiro passada por parmetro. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.3.4. ehPosioVazia(linha : int, coluna : int)
Este mtodo verifica se a posio passada por padrmetro est vazia. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.3.5. copiarLinha(linhaOrigem : int, linhaDestino : int)
Este mtodo copia toda linhaDestino no lugar da linhaOrigem passadas por parmetro. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.3.6. verificaLinhaCompleta()
Este mtodo verifica quantas linhas do tabuleiro esto preenchidas. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.3.7. linhaEstaPreenchida(linha : int)
69
A classe Pea representa as peas do jogo, que diferenciam-se pelo formato e cor. Cada modelo de pea formado por quatro quadrados e pertence a um tabuleiro. Esta classe possui especializaes que correspondem aos modelos de peas. Para melhor entendimento dos nomes dos modelos verifique a seo 4.1.2 deste documento. 6.1.4.1. inserirNoTabuleiro()
Este mtodo insere uma pea no tabuleiro e para isso chama o mtodo preencherPosio da classe Tabuleiro. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.4.2. retirarDoTabuleiro()
Este mtodo retira uma pea do tabuleiro e para isso chama o mtodo esvaziarPosio da classe Tabuleiro. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.4.3. descerPea()
Este mtodo desce em uma linha uma pea do tabuleiro, para isso ele retira a pea do tabuleiro, atualiza a posio de cada quadrado da pea atravs da classe Quadrado e depois insere novamente a pea no tabuleiro. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.4.4. moveParaEsquerda()
Este mtodo decrementa em uma coluna uma pea do tabuleiro, para isso ele retira a pea do tabuleiro, atualiza a posio de cada quadrado da pea atravs da classe Quadrado e depois insere novamente a pea no
70
Este mtodo incrementa em uma linha uma pea do tabuleiro, para isso ele retira a pea do tabuleiro, atualiza a posio de cada quadrado da pea atravs da classe Quadrado e depois insere novamente a pea no tabuleiro. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.4.6. girarPea()
Este mtodo gira a pea, e para isso, retira-a do tabuleiro, verifica de pode gir-la, caso sim, atualiza a posio de cada quadrado da pea atravs da classe Quadrado e ento insere novamente a pea no tabuleiro, caso no, apenas insere novamente a pea no tabuleiro. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.4.7. verificaColisoInferior()
Este mtodo verifica se a pea est encostando no limite inferior da tela, para isso, retira a pea do tabuleiro, verifica se j est na linha mais abaixo do tabuleiro ou se a posio abaixo est vazia, caso sim, insere novamente a pea no tabuleiro, caso no, apenas insere novamente a pea no tabuleiro. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.4.8. verificaColisoSuperior()
Este mtodo verifica se a pea est encostando no limite superior da tela, para isso, sempre chamada quando se verifica a coliso inferior, pois no final desta funo inserida uma nova pea, se esta pea imediatamente tiver coliso inferior, porque chegou ao limite superior da tela, por isso essa funo apenas chama a funo de verificao de coliso inferior. Esta funo executada internamente, ou seja, sem interferncia do usurio. 71
Este mtodo verifica se a pea est encostando no limite direito da tela, para isso, retira a pea do tabuleiro, verifica se no est na coluna 0 (zero) do tabuleiro ou se a posio ao lado esquerdo est vazia, caso sim, insere novamente a pea no tabuleiro, caso no, apenas insere novamente a pea no tabuleiro. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.4.10. verificaColisoDireita()
Este mtodo verifica se a pea est encostando no limite direito da tela, para isso, retira a pea do tabuleiro, verifica se no est na coluna mais a direita do tabuleiro ou se a posio ao lado direito est vazia, caso sim, insere novamente a pea no tabuleiro, caso no, apenas insere novamente a pea no tabuleiro. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.5. Quadrado
A classe Quadrado responsvel por guardar as caractersticas de cada quadrado que formar cada pea, ou que formar o tabuleiro. Nesta classe tem-se informaes como a cor do quadrado e sua localizao, atravs da linha e da coluna. 6.1.5.1. atualizaPosio(linha : int, coluna : int)
Este mtodo atualiza a localizao/posio de um quadrado atravs dos parmetros passados. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.6. Ranking
72
Este mtodo insere uma nova pontuao no ranking, juntamente com o nome do jogador. Esta funo executada somente se o usurio aceitar inserir-se no ranking. 6.1.6.2. reordenaRanking()
Este mtodo reordena, em ordem decrescente de pontuao, os jogadores. Geralmente chamado pela funo inserirNoRanking().Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.6.3. zerarRanking()
Este mtodo limpa o ranking. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.1.6.4. retornaLinhaArquivo(linha : int)
Este mtodo retorna uma linha do arquivo que teve seu nmero passado por parmetro. Esta funo executada internamente, ou seja, sem interferncia do usurio. 6.2. Viso das Atividades
73
74
Esta funcionalidade engloba os Casos de Uso [01], [02], [03], [04] e [05], descritos nos requisitos deste documento. Estas opes necessitam de 75
A Figura 26 demonstra atravs de um diagrama de atividades as opes iniciais disponveis para o usurio. As opes Ajuda e Liga/Desliga Som retornam o fluxo para a escolha, enquanto que a opo Sair encerra o sistema e a opo Iniciar Jogo realiza todas as funes necessrias para que o jogo seja iniciado estas opes sero descritas posteriormente. As figuras abaixo demonstram atravs de diagramas de sequncia estas funcionalidades.
76
77
A funcionalidade Sair (Figura 30) mostra que aps escolher esta opo, o jogo encerrado e os objetos das classes por sua vez so eliminados. 78
79
A Figura 32 mostra todo o processo necessrio para iniciar o jogo, contendo referncia funo Inserir No Tabuleiro da Figura 31. 6.3.2. Funes Durante o Jogo
Esta funcionalidade engloba os Casos de Uso [06], [07], [08], [09], [10], [11], [12], [13], [14] e [15], sendo os quatro primeiros as funes que o usurio pode realizar durante o Jogo e os demais as funes que o sistema realiza independente da interao do usurio. So apresentadas ainda as funes Sair, Ligar/Desligar som e Ajuda por estas funcionalidades poderem ser acessadas tambm nesta etapa. Os diagramas que descrevem cada uma das funcionalidades recm citadas encontra-se na seo 5.3.1. 80
A Figura 33 representa as atividades do sistema que ocorrem aps o usurio selecionar a opo Iniciar Jogo (Figura 31). As setas em vermelho representam os dois fluxos do sistema. A seta vermelha da esquerda mostra o fluxo que no necessita de interaes do usurio, enquanto que na seta vermelha da direita necessria a interao do usurio para realizar as funes de mover, girar e descer pea, dentre outras, caso no ocorra interao do usurio o jogo prosseguir de forma normal at que uma interao acontea ou at que seja verificada uma coliso superior ocasionando, assim, o fim do jogo.
81
82
83
Figura 37: Diagrama de Sequncia Descer Pea Com Fluxo Com Interao Durante o Jogo
84
A opo Pausar pode ser acessada a qualquer momento durante o jogo, assim como as opes Sair, Ajuda e Ligar/desligar som.
Figura 39: Diagrama de Sequncia Mover Pea Para Direita Durante o Jogo
85
Figura 40: Diagrama de Sequncia Mover Pea Para Esquerda Durante o Jogo
86
Figura 42: Diagrama de Sequncia Descer Pea Com Fluxo Sem Interao Durante o Jogo
As Figuras 37 e 42 representam a funcionalidade Descer Pea que pode ser considerada a mais importante do jogo, pois nesta funo que verificamse colises inferiores e superiores, alm da verificao de linha completa, que rende ao jogador mais pontos. Alm das funes citadas, a funcionalidade Descer Pea ainda aumenta o nvel do jogo, aumenta a pontuao do jogador e sorteia a prxima a pea. Pode-se verificar nas Figuras que independendo de haver ou no a interao do usurio, as mesmas funcionalidade so executadas. 6.3.3. Funes Finais Disponveis
Esta funcionalidade engloba os Casos de Uso [16], [17] e [18], os quais todos necessitam de interao do usurio para realizarem-se. Estas 87
88
A Figura 44 apresenta um diagrama de sequncia que demonstra como ocorre a funcionalidade de submeter-se ao ranking. Primeiramente solicita-se o nome do jogador, para ento atualizar-se o ranking, inserindo-o no ranking juntamente com sua pontuao, a lista do ranking reordenada e aps isto pode-se ento mostra-la o ranking ao usurio, recuperando-se linha a linha da lista do ranking. No prximo captulo so demonstradas todas as funes que devero ser implementadas no jogo detalhadamente.
7.
89
A Figura 45 apresenta um diagrama de classes do sistema e suas ligaes com as classes de interface. Neste diagrama as classes j encontramse divididas em pacotes, principalmente, para melhor organizao. As classes de cada pacote sero descritas nas sees abaixo. 7.1. Descrio dos Pacotes Java
90
Neste pacote encontram-se classes utilizadas para, no escopo do jogo, manipulao de arquivo, alm da classe IOException que captura e trata excees. A classe Tetris utiliza-se de objetos IOException para tratar excees que podem ser geradas pelo construtor da classe Ranking ao se instanciar um objeto da mesma. Na classe Ranking, alm de tratar excees, as classes do pacote Java.io servem para manipulao de arquivos. 7.1.2. Java.awt
Deste pacote utilizam-se as classes Color e Graphics, necessrias para pintar o tabuleiro do jogo. Na classe Quadrado utiliza-se a classe Color para definir a cor de um quadrado. J nas classes MiniTabuleiroGUI e Tabuleiro GUI os mtodos das classes Color e Graphics so utilizados para definir a cor e pintar o tabuleiro. 7.1.3. Javax.swing
Neste pacote encontram-se todas as classes de interface necessrias para criar janelas, botes, cones, dentre outros. As classes deste pacote so utilizadas nas classes MiniTabuleiroGUI, TabuleiroGUI e TetrisGUI a fim de montar a interface do jogo. 7.1.4. Java.appelt
Deste pacote utiliza-se a classe AudioClip, necessria para a utilizao do udio no jogo. Esta classe disponibiliza mtodos que param e iniciam os sons. Esta classe utilizada pela classe TetrisGUI que controla os sons do jogo.
91
Neste pacote encontram-se classes que representam tipos de variveis, como os utilizados boolean e String, alm de disponibilizar classes que tratam de threads, possibilitando inici-las, etc. A classe TetrisThread utiliza-se da classe Thread deste pacote para poder criar e manter um novo fluxo de execuo. As classes boolean e String so utilizadas por vrias classes do pacote model. 7.2. Descrio dos Pacotes do Jogo Nesta seo sero descritas as classes de cada pacote, bem como os mtodos destas classes em detalhes. As classes do jogo esto distribudas em pacotes no padro MVC (Model-View-Controller). Este padro bastante utilizado por minimizar a anlise da aplicao, retirando a dificuldade de pensar na lgica de aplicao. Assim sendo, o objetivo deste padro proporcionar facilidade de integrao dos requisitos de software com as entidades externas do mesmo. 7.2.1. Pacote modelPeas
Este pacote contm classes que so especializaes da classe Pea a classe Pea ser explicada posteriormente no pacote model, Seo 5.1.2 do presente documento e que correspondem aos modelos de peas utilizados no jogo. O nome das peas, bem como seu formato, podem ser compreendidos na Tabela 1 abaixo.
Tabela 3: Identificao dos Modelos de Peas
Pea
Linha, Coluna 0, 4 0, 5 1, 3
92
Devido s classes desde pacotes serem iguais, optou-se por no descrev-las separadamente. As classes deste pacote no possuem atributos, por isso nenhuma delas descrita, sendo descritos apenas seus mtodos. 93
No construtor de cada uma das classes de model.Peas chamado o construtor da classe superior, passando-se o tabuleiro como parmetro e posteriormente instanciando-se os quatro quadrados que formam a pea, passando como parmetros os valores da terceira coluna (Linha, Coluna) da Tabela 1 referente ao modelo da Pea desejada. Lembrando que ao implementar o construtor de cada classe, a palavra Identificao no nome do construtor dever ser trocada pelo correspondente modelo descrito na segunda coluna (Identificao) da Tabela 1, vide exemplo da imagem abaixo.
94
Este mtodo sobrescreve o mtodo getCopy da Classe Pea. Sua funo a de criar uma nova pea e retorn-la. O parmetro t deve ser passado como argumento ao se criar a nova pea. 7.2.2. Pacote model
Este pacote contm todas classes que formam os modelos do jogo e que so de extrema importncia para o bom funcionamento do mesmo. Estas classes so responsveis por especificar o comportamento dos objetos que controlam boa parte do jogo. 7.2.2.1. Classe Quadrado
A classe Quadrado representa cada quadrado que forma cada pea, e que forma o tabuleiro. Para isto, esta classe possui atributos que guardam o valor da linha e da coluna de cada quadrado a fim de saber a localizao de cada quadrado no tabuleiro, alm de um atributo que guarda a cor de cada quadrado. 7.2.2.1.1. Construtor Quadrado(linha : int, coluna : int)
Ao se instanciar um quadrado devem-se passar a linha e a coluna do mesmo como parmetros. Os valores dos parmetros so passados para as respectivas variveis do objeto.
95
A Figura 47 represente o diagrama de sequncia da construo de um objeto da classe Quadrado. 7.2.2.1.2. Funo getLin() : int
Este mtodo retorna o valor atual do atributo linha do quadrado. No recebe parmetros. 7.2.2.1.3. Funo getCol() : int
Este mtodo retorna o valor atual do atributo coluna do quadrado. No recebe parmetros. 7.2.2.1.4. Funo getCor() : Color
Este mtodo retorna o valor do atributo cor que representa a cor do quadrado. No recebe parmetros. 7.2.2.1.5. Funo setCor(cor : Color) : void
Este mtodo atribui ao atributo cor o valor (cor) passado como parmetro. No possui retorno. 7.2.2.1.6. Funo incrementaLinha() : void
96
Este mtodo acrescenta 1 (um) ao valor atual do atributo coluna do quadrado. No recebe parmetros e no possui retorno. 7.2.2.1.8. Funo decrementaColuna() : void
Este mtodo diminui 1 (um) do valor atual do atributo linha do quadrado. No recebe parmetros e no possui retorno. 7.2.2.1.9. void Este mtodo atribui aos atributos linha e coluna os valores passados, respectivamente como parmetros. No possui retorno. 7.2.2.2. Classe Pea Funo atualizaPosio(linha : int, coluna : int) :
Esta classe responsvel por manter cada pea que participar do jogo, para isto formada por um vetor de Quadrados de tamanho 4 (quatro), devido ao fato de que cada pea tem 4 Quadrados (partes). Possui ainda um atributo tabuleiro da classe Tabuleiro esta classe ser explicada posteriormente que onde ser inserida ou de onde poder ser retirada a pea durante o jogo. Esta classe possui mtodos que realizam as movimentaes necessrias nas peas durante o jogo e verificam se as peas podem ou no ser movimentadas. 7.2.2.2.1. Construtor Pea(tabuleiro : Tabuleiro)
Ao se instanciar uma pea deve-se passar o tabuleiro ao qual a pea pertence como parmetro. O valor do parmetro passado para o respectivo atributo do objeto.
97
Na Figura 48 representado o diagrama que mostra a criao de um objeto da classe Pea. 7.2.2.2.2. Funo inserirNoTabuleiro() : void
Este mtodo insere a pea no tabuleiro do jogo e para isto, insere cada quadrado da pea na sua respectiva posio do tabuleiro. Para isto, chamada a funo preenchePosio(linha : int, coluna : int, quadradro : Quadrado) da classe Tabuleiro atravs de atributo desta classe.
98
Este mtodo retira a pea do tabuleiro do jogo e para isto, retira cada um dos 4 (quatro) quadrados do tabuleiro. Para isto chamada a funo esvaziaPosio(linha : int, coluna : int) da classe Tabuleiro atravs de atributo desta classe.
A Figura 50 representa a execuo da funo retirarDoTabuleiro de pea. 7.2.2.2.4. Funo descer() : void
Este mtodo tem por objetivo descer em uma linha a pea que est no tabuleiro. Para isto, retira a pea do tabuleiro, decrementa a linha de cada quadrado da pea e posteriormente insere a pea no tabuleiro novamente.
99
Na Imagem 51 representada a execuo da funo Descer da classe Pea. 7.2.2.2.5. Funo moveParaEsquerda() : void
Este mtodo tem por objetivo mover a pea que est no tabuleiro um quadrado esquerda. Para isto, retira a pea do tabuleiro, decrementa a coluna de cada um dos quadrados e ento insere a pea novamente no tabuleiro.
100
A Figura 52 demonstra a execuo da funo moveParaEsquerda() da classe Pea. 7.2.2.2.6. Funo moveParaDireita() : void
Este mtodo tem por objetivo mover a pea que est no tabuleiro um quadrado direita. Para isto, retira a pea do tabuleiro, incrementa a coluna de cada um dos quadrados e ento insere a pea novamente no tabuleiro.
101
A Figura 53 demonstra a execuo da funo moveParaDireita() da classe Pea. 7.2.2.2.7. Funo girarPea() : void
Este mtodo tem por objetivo girar a pea que est no tabuleiro. Para isto, retira-a do tabuleiro, e ento pega os valores das linhas e colunas dos quadrados que compem as peas e coloca em variveis auxiliares, sendo que em um vetor auxiliar coloca os valores das linhas, e em outro os valores das colunas. Posteriormente, cria-se uma varivel que controlar se o giro foi realizado com sucesso, que dever ser uma varivel boolean com valor inicial em verdadeiro (true) e ento um loop de 1 a 4 realiza as seguintes funes:
102
103
A Figura 54 demonstra a execuo da funo girar() da classe Pea. 7.2.2.2.8. Funo verificaColisoInferior() : boolean
Este mtodo verifica se ocorreu coliso inferior da pea. Para isto, retira a pea do tabuleiro, ento entra num loop que verifica se alguma linha dos quadrados que formam a pea igual a 19 ou se a posio uma linha abaixo de cada quadrado est vazia no tabuleiro, se sim, insere a pea no tabuleiro e retorna true. Se o loop chega ao fim, insere a pea no tabuleiro e retorna false, mostrando que no ocorreu coliso.
104
A Figura 55 demonstra a execuo da funo verificaColisoInferior() da classe Pea. 7.2.2.2.9. Funo verificaColisoSuperior() : boolean
Este mtodo verifica se ocorreu coliso superior na pea. Para isto, aps inserir uma nova pea verifica imediatamente se ocorreu coliso inferior.
105
A Figura 56 apresenta a execuo da funo verificaColisoSuperior() da classe Pea. 7.2.2.2.10. Funo verificaColisoEsquerda() : boolean
Este mtodo verifica se est ocorrendo coliso no limite esquerdo do tabuleiro. Para isto, retira a pea do tabuleiro, ento entra num loop que verifica se alguma coluna dos quadrados que formam a pea igual a 0 ou se a posio uma coluna acima de cada quadrado est vazia no tabuleiro, se sim, insere a pea no tabuleiro e retorna true. Se o loop chega ao fim, insere a pea no tabuleiro e retorna false, mostrando que no ocorreu coliso.
106
A Figura 57 demonstra a execuo da funo verificaColisoEsquerda da classe Pea. 7.2.2.2.11. Funo verificaColisoDireita() : boolean
Este mtodo verifica se est ocorrendo coliso no limite esquerdo do tabuleiro. Para isto, retira a pea do tabuleiro, ento entra num loop que verifica se alguma coluna dos quadrados que formam a pea igual a 9 ou se a posio uma coluna abaixo de cada quadrado est vazia no tabuleiro, se sim, insere a pea no tabuleiro e retorna true. Se o loop chega ao fim, insere a pea no tabuleiro e retorna false, mostrando que no ocorreu coliso.
107
7.2.2.2.12.
Este mtodo retorna o valor do atributo tabuleiro de pea. No possui parmetros. 7.2.2.2.13. Funo getCopy(): Pea
Este mtodo retorna uma nova Pea, sem modelo, mas que pertence ao mesmo tabuleiro das demais. No possui parmetros. 7.2.2.2.14. Funo setTabuleiro(tab : Tabuleiro) : void
Este mtodo coloca o valor passado por parmetro no respectivo atributo da classe. No possui retorno. 7.2.2.3. Classe Ranking
A classe Ranking responsvel por manter o ranking do jogo em um arquivo. Esta classe possui atributos necessrio para manipular arquivos, como os atributos input, output e file. O atributo quantidade serve para verificar 108
O construtor da classe Ranking cria uma instncia de ranking. Nesta funo verifica-se se existe ranking no disco, se sim, l este ranking, se no, inicializa um novo ranking e grava o ranking no disco.
A Figura 59 demonstra a criao de um objeto ranking e as verificaes que so realizadas nesta funo. 7.2.2.3.2. Funo existeRankingNoDisco() : boolean
109
Este mtodo responsvel por abrir e ler o arquivo no disco. Para isto, cria-se um objeto do tipo StringBuffer, faz-se com que o atributo input da classe receba o retorno da criao de um objeto FileReader(file). Aps este processo, um loop que l uma linha do arquivo atravs da chamada file.read() coloca, enquanto o valor lido no for -1, todo o contedo lido do arquivo no objeto StringBuffer atravs da funo append(), este loop termina quando o valor lido for -1. Posteriomente fecha-se o arquivo atravs do objeto de FileReader com a funo close(). criado um objeto da classe StringTokenizer que recebe como parmetro o retorno da funo toString() do objeto da classe StringBuffer e um valor vazio ( ), um loop iniciado para atualizar os valores nas devidas posies do ranking, para isto, verifica-se se o retorno da funo hasMoreTokens() chamada pelo objeto da classe StringTokenizer verdadeiro (true), e enquanto for, chamam-se as funes setNomePosio() passando-se como parmetros o retorno da chamada nextToken().toString do objeto da classe StringTokenizer e um valor i que inicialmente valer 0 (zero), depois 1, depois 2 e assim sucessivamente, ainda chamada a funo
setPontosPosio() passando-se como parmetros o retorno da chamada Integer.parseInt(objetoStrinTokenizer.nextToken()) e o valor i, aps estas chamadas o valor i incrementado e o loop continua. 7.2.2.3.4. Funo gravaRankingNoDisco() : void
Este mtodo tem como objetivo gravas o arquivo de ranking no disco. Para isto, atribui ao atributo output da classe o retorno da criao de um objeto da classe FileWriter(file) passando como parmetro o atributo da classe que representa o arquivo. Escreve-se em um loop, que vai de 0 ao valor do atributo 110
Este mtodo instancia o vetor de nomes e o vetor de pontos da classe. No possui retorno nem parmetros. 7.2.2.3.6. Funo inicializaRanking() : void
Este mtodo atribui a todo vetor de nomes um valor default, por exemplo, NULL, e atribui a todo vetor de pontos o valor 0 (zero), atravs de um loop que vai de 0 at o valor do atributo quantidade da classe. 7.2.2.3.7. int) : void Este mtodo tem por objetivo inserir um novo jogador no ranking e reordenar o ranking. Para isto, feito um loop de 0 at o valor do atributo quantidade da classe, neste loop verificado se o valor pontos recebido como parmetro maior que o valor pontos da posio i do vetor de pontos, se sim, chama-se a funo reordenaRanking, passando o valor de i, o nome e os pontos como parmetro da funo e ento sai-se do loop utilizando break. O ranking posteriormente gravado no disco utilizando-se a funo Funo atualizaRanking(nome : String, pontos :
gravaRankingNoDisco. 7.2.2.3.8. pont : int) : void Este mtodo tem por objetivo reordenar o ranking. Para isto, realizado um loop que vai do valor do atributo quantidade da classe 1 at o valor ind passado recebido como parmetro. Dentro do loop a posio i do vetor de nomes recebe o valor contido na posio i-1 deste mesmo vetor, o mesmo acontece com pontos, a posio i do vetor de pontos recebe o valor contigo na posio i-1 deste mesmo vetor. Aps o loop a posio ind do vetor de nome 111 Funo reordenaRanking(ind : int, nome : String,
Este mtodo retorna o valor contido na posio i do vetor de nomes. 7.2.2.3.10. Funo getPontosPosio(i : int) : int
Este mtodo retorna o valor contido na posio i do vetor de pontos. 7.2.2.3.11. void Este mtodo atribui posio i do vetor de nomes o valor nome recebido como parmetro. 7.2.2.3.12. void Este mtodo atribui posio i do vetor de pontos o valor pontos recebido como parmetro. 7.2.2.3.13. Funo getQtd() : int Funo setPontosPosio(pontos : int, i : int) : Funo setNomePosio(nome : String, i : int) :
Este mtodo retorna o valor do atributo quantidade desta classe. 7.2.2.3.14. Funo zerarRanking() : void
Este mtodo tem como objetivo zerar o ranking do jogo. Para isto, atribui a todo vetor de nomes um valor default, por exemplo, NULL, e atribui a todo vetor de pontos o valor 0 (zero), atravs de um loop que vai de 0 at o valor do atributo quantidade da classe. Posteriormente grava-se o arquivo no disco atravs da funo gravaRankingNoDisco(). 7.2.2.3.15. Funo retornaLinhaArquivo(linha : int) : String
112
A classe Tabuleiro responsvel por manter o tabuleiro e para isto fornece mtodo que permitem s outras classes que interajam com esta. Possui como atributos valores que representam a quantidade de linhas e a quantidade de colunas que formam o tabuleiro. O atributo tabuleiro corresponde a uma matriz de quadrados com os tamanhos recm especificados. 7.2.2.4.1. Construtor Tabuleiro(linhas : int, colunas : int)
No construtor os valores linhas e colunas recebidos como parmetros so atribudos aos respectivos atributos da classe. Aps isto instanciada a matriz de quadrados, passando-se como parmetros para o construtor de Quadrado os valores recebidos como parmetros. O tabuleiro esvaziado posteriormente, como forma de inicializa-lo.
113
A figura 60 demonstra a execuo do construtor da classe Tabuleiro. 7.2.2.4.2. Funo esvaziarTabuleiro() : void
Este mtodo tem por objetivo atribuir NULL todas as posies da matriz tabuleiro. Para isto, possui um loop que vai de 0 ao valor do atributo linhas da classe, e dentro desse um loop que vai se 0 ao valor do atributo colunas desta classe. 7.2.2.4.3. Funo preenchePosio(linha : int, coluna : int,
quadrado : Quadrado) : void Este mtodo atribui posio linha, coluna de tabuleiro, o quadrado passa como parmetro. No possui retorno. 7.2.2.4.4. void Funo esvaziarPosio(linha : int, coluna : int) :
114
completamente preenchidas. Para isto, cria-se uma varivel inteira para fazer a contagem, faz-se um loop de vai do valor do atributo linhas 1 at 0, de forma decrescente, dentro do loop verificado se linha est preenchida, se sim, um novo loop iniciado e vai de lin (valor a linha que esta sendo verificada) at 0, de forma decrescente, e dentro do loop chama-se a funo copiarLinha(lin-1, lin), ao sair do loop, o atributo que controla o primeiro loop recebe o valor do atributo linhas da classe e a varivel que faz a contagem incrementada. Aps o loop terminar o valor da varivel que faz a contagem retornado. 7.2.2.4.8. Funo linhaEstaPreenchida(linha : int) : boolean
Este mtodo tem como objetivo verificar se algum quadrado da linha possui valor, ou seja, possui parte de uma pea. Para isto, tem-se um loop que vai de 0 ao valor do atributo colunas da classe, dentro do loop verificado se a 115
Este mtodo retorna o valor do atributo linhas da classe. No possui parmetros. 7.2.2.4.10. Funo getColunas() : int
Este mtodo retorna o valor do atributo colunas da classe. No possui parmetros. 7.2.2.5. Classe Tetris
A classe Tetris pode ser considerada como a classe mais importante, pois responsvel por fazer o controle geral do jogo, tendo ligao com quase todas as demais classes. atravs desta classe que o usurio poder interagir com o jogo. Nesta classe tem-se atributos como tabuleiro que guarda as peas do jogo, a peaAtual e a prximaPea que iro participar do jogo, alm de atributos como pontuao, para guardar quantos pontos o usurio j conquistou, e seu nvelAtual. Encontram-se tambm nesta classe atributos que servem para controlar o jogo como fim, pausado e som. O atributo ranking utilizado para referenciar-se ao ranking onde so mantidas as pontuaes dos jogadores. 7.2.2.5.1. Construtor Tetris(tetrisGui : TetrisGUI)
No construtor o valor recebido como parmetro passado ao respectivo atributo da classe. Posteriormente instancia-se o Ranking e chama-se a funo iniciarJogo().
116
7.2.2.5.2.
escolherOpo()
Este mtodo verifica qual a opo escolhida pelo usurio e ento chama-a. Esta funo executada internamente, ou seja, sem interferncia do usurio. 7.2.2.5.3. iniciarJogo()
Este mtodo inicia o jogo, atribuindo valores aos atributos da classe, alm de sortear a prxima pea e inseri-la no tabuleiro. Esta funo s pode ser acessada antes do jogo e necessita de interveno do usurio.
117
118
Este mtodo mostra as instrues do jogo, regras e teclas necessrias para realizar a interao com o mesmo. Esta funo pode ser acessada a qualquer momento antes ou durante o jogo e necessita de interveno do usurio.
7.2.2.5.5.
liga/desligaSom()
Este mtodo altera o valor do atributo som de true para false e viceversa, demonstrando que o som est ligado ou desligado. Esta funo pode ser acessada a qualquer momento antes ou durante o jogo e necessita de interveno do usurio.
119
7.2.2.5.6.
sair()
Este mtodo encerra o jogo por completo de maneira segura. Esta funo pode ser acessada a qualquer momento antes, durante ou aps o jogo e necessita de interveno do usurio.
120
7.2.2.5.7.
pausar()
Este mtodo para a execuo do jogo quando for requerida e s continua aps ser executada novamente. Esta funo pode ser acessada a qualquer momento durante o jogo e necessita de interveno do usurio. 7.2.2.5.8. descerPea()
Este mtodo verifica colises inferiores para que se possa descer a peaAtual. Aps esta verificao, quando ocorre coliso, ele chama o mtodo descerPea() da classe Pea. Quando ocorre coliso o mtodo verifica se alguma linha foi completada atravs do mtodo verificaLinhaCompleta() da classe Tabuleiro, caso haja, aumenta-se a pontuao e o nvel do jogador, caso contrrio apenas aumenta-se a pontuao. Este mtodo ainda chama o mtodo que verifica coliso superior da peaAtual, caso haja, ocasiona o fim do jogo. Esta funo pode ser acessada a qualquer momento durante o jogo e pode ser executada tanto pelo usurio para acelerar o movimento de descida
121
122
Este mtodo sorteia a prxima pea, e a retorna. Esta funo requerida toda vez que o jogo for iniciado e toda vez que uma nova pea for inserida no tabuleiro. Esta funo executada internamente, ou seja, sem interferncia do usurio. 7.2.2.5.10. inserirNovaPea()
Este mtodo sorteia qual ser a prximaPea e posteriormente insere esta pea como peaAtual do tabuleiro. Esta funo requerida ao iniciar novo jogo e toda vez que uma pea parar no tabuleiro. Esta funo executada internamente, ou seja, sem interferncia do usurio.
7.2.2.5.11.
pedeNomeJogador()
123
7.2.2.5.12.
retornaTodoRanking()
Este mtodo gera uma String com todo o ranking e a retorna. Para conseguir o nome e a pontuao de cada jogador no Ranking chamada a funo retornaLinhaArquivo() da classe Ranking. Esta funo executada internamente, ou seja, sem interferncia do usurio. 7.2.2.5.13. atualizaRanking()
124
Este mtodo verifica coliso do lado esquerdo e se esta no ocorreu ento chama a funo moverParaEsquerda() da classe Pea atravs do atributo peaAtual. Esta funo pode ser acessada a qualquer momento durante o jogo atravs de interveno do usurio.
7.2.2.5.15.
moveDireita()
Este mtodo verifica coliso do lado direito e se esta no ocorreu ento chama a funo moverParaDireita() da classe Pea atravs do atributo 125
7.2.2.5.16.
girarPea()
Este mtodo chama o mtodo girarPea() da classe Pea atravs do atributo peaAtual, o que faz com que a pea seja girada, quando possvel, ou seja, quando no houver possibilidade de coliso. Esta funo pode ser acessada a qualquer momento durante o jogo atravs de interveno do usurio.
126
7.2.2.5.17.
aumentaNvel()
Este mtodo utilizado quando uma linha completada para aumentar a dificuldade do jogo. Esta funo executada internamente, ou seja, sem interferncia do usurio. 7.2.2.5.18. aumentaPontuao()
Este mtodo utilizado a cada pea que encaixada, contando pontos para o jogador. Quando uma linha completada o jogador ganha mais pontos. Esta funo executada internamente, ou seja, sem interferncia do usurio. 7.2.2.5.19. Funo getPrximaPea() : Pea
Gera um valor de acordo com o nvel, isso far com que quanto maior o nvel, mais rpido a pea desa. 7.2.2.5.21. Funo getRanking() : Ranking 127
128
A classe TetrisThread responsvel por manter a execuo de uma thread que se caracteriza como um segundo fluxo de execuo do jogo. Possui como atributos Tetris e TetrisGUI. Pode-se dizer que esta classe que controla o jogo, por ser esta que possui como atributos a classe que controla o jogo e a classe que controla a interface do jogo, respectivamente. 7.2.3.1.1. TetrisGUI) O Construtor desta classe apenas atribui aos atributos da classe os valores recebidos como parmetro. Construtor TetrisThread(tetris : Tetris, tetrisGui :
O mtodo run() tem por objetivo executar um fluxo de operao(Thread) independente do fluxo original sendo assim independente da interao com o usurio. Para isto, tem-se um loop que s para quando o jogador escolher a 129
Na Figura acima apresentada a execuo do mtodo run() da classe TetrisThread. 7.2.4. Pacote view
As classes do Pacote View, que no foram abordadas na documentao do SIMPLE TETRIS que continha a anlise do jogo, tem por objetivo, prover a interface do sistema, gerando as telas com as quais o jogador ir interagir e onde visualizar todo o jogo. 130
Esta classe tem por objetivo exibir na tela a prxima pea que foi sorteada, para isto, possui ligaes com as classes Tetris, Tabuleiro e Pea, com as quais tem os atributos tetris, tabuleiro e pecaatual, respectivamente. 7.2.4.1.1. tabuleiro : Tabuleiro) Neste construtor so inicializados os componente que geram a interface do jogo atravs do mtodo initComponents() gerado pela prpria IDE. Alm da interface, so passados os parmetros tetris e tabuleiro para os atributos tetris e tabuleiro da classe, alm de inicializar o atributo pecaatual como NULL. Construtor MiniTabuleiroGUI(tetris : Tetris,
131
A Figura acima demonstra a criao de um objeto da classe MiniTabuleiroGUI. 7.2.4.1.2. Funo paint(g : Graphics)
Esta funo sobrescreve a funo paint da classe JPanel que invocada para desenhar componentes. Dentro deste mtodo so chamadas as funes paint da classe superior, setColor(color.black) e fillRect(0,0,30*4,30*4) para pintar o retngulo(tabuleiro) na interface, que so funes da Classe Graphics e portanto devem ser acessadas com o atributo g passado por parmetro. Obtem-se da classe Tetris qual a prxima pea e ento verifica-se se esta pea diferente da peaAtual e se no igual a NULL, se sim, torna esta pea a nova pea atual, obtem-se uma cpia da pea nova pea atravs do mtodo getCopy. Esvazia-se o tabuleiro e logo aps insere-se a nova pea no tabuleiro, direcionando-a dois quadrados esquerda e um abaixo. Utilizando as mesmas funes descritas anteriormente pinta-se o tabuleiro, posteriormente define-se o tamanho da linha e coluna dos quadrados, fazendo-se os seguintes clculos: (30*4)/tabuleiro.getLinhas e (30*4)/tabuleiro.getColunas,
respectivamente, onde atribui-se o resultado destes clculos s variveis que definem o tamanho dos quadrados. Aps isto, tem-se um loop de 0 at tabuleiro.getLinhas() e dentro deste um loop que vai de 0
g.fillRect((col+1)*ladoCol+1,(lin+2)*ladoLin+1,ladoCol-1,ladoLin-1) .
Figura
acima
demonstra
as
interaes
entre
classe
Esta classe faz a mesma coisa que a classe MiniTabuleiroGUI, a nica diferena que nesta classe pretende-se mostrar todo o tabuleiro, com as peas j posicionadas e as que ainda esto caindo. 7.2.4.2.1. Construtor TabuleiroGUI(tabuleiro : Tabuleiro)
Neste construtor so inicializados os componentes que geram a interface do jogo atravs do mtodo initComponents() que gerado pela
133
Esta funo possui o mesmo princpio de funcionamento da funo paint da classe MiniTabuleiroGUI. No ser especificada em um diagrama de sequncia, pois este mtodo realiza apenas funes que pintam o tabuleiro da interface. Este mtodo sobrescreve a funo paint da classe JPanel que invocada para desenhar componentes. Dentro deste mtodo so chamadas as funes paint da classe superior, setColor(color.black) e fillRect(0,0,300,600) para pintar o retngulo(tabuleiro) na interface, que so funes da Classe Graphics e portanto devem ser acessadas com o atributo g passado por parmetro. Posteriormente define-se o tamanho da linha e coluna dos quadrados, fazendo-se os seguintes clculos: (600)/tabuleiro.getLinhas e (300)/tabuleiro.getColunas, respectivamente, onde atribui-se o resultado destes clculos s variveis que definem o tamanho dos quadrados. Utiliza-se a funo setColor(color.write) novamente a fim de desenhar as linhas e as colunas do tabuleiro, para isto, tem-se um loop de 1 at tabuleiro.getLinhas() onde executa-se a funo
g.drawLine(0,lin*ladoLin,300,lin*ladoLin). Logo aps tem-se outro loop de 1 at tabuleiro.getColunas() onde executa-se a funo
g.drawLine(col*ladoCol,0,col*ladoCol,600). Aps isto, tem-se um loop de 0 at tabuleiro.getLinhas() e dentro deste um loop que vai de 0 tabuleiro.getColunas(), ento verifica-se se a posio no tabuleiro no est vazia, e se no estiver, pinta-se a linha atravs da funo g.fillRect((col+1)*ladoCol+1,(lin+2)*ladoLin+1,ladoCol-1,ladoLin-1) . 7.2.4.3. Classe TetrisGUI
Esta classe possui ligao com as classes Tetris, TetrisThread, MiniTabuleiroGUI e TabuleiroGUI, o que confere a ela grande importncia. 134
Neste construtor so inicializados os componentes que geram a interface do jogo atravs do mtodo initComponents() que gerado pela prpria IDE. instanciado o atributo pnMiniTabuleiro passando-se Tetris e new Tabuleiro(8,8) como parmetros. Posteriormente criado um objeto da classe TetrisThread e ento iniciado a thread atravs da funo start() que uma funo fornecida pela classe Thread.
A Figura 77 demonstra a criao de um objeto da classe TetrisGUI. Pode-se dizer que este diagrama representa a criao de todo o jogo. 7.2.4.3.2. Funo pausaJogo() : void 135
setPausado(false), logo aps criada uma nova instancia de TetrisThread que enseguida iniciada com a funo start(), j quando o retorno for false, executada a funo setPausado(true).
A Figura 78 demonstra o processo realizado ao pausar o jogo. 7.2.4.3.3. Funo tecla/BotoPrecionado() : void
Este mtodo verifica qual tecla o usurio pressionou, se for alguma tecla de ao do jogo, este mtodo chama os mtodos responsveis por executar a ao desejada pelo usurio. Os atalhos que devero estar disponveis para acesso via teclado pelo usurio podem ser verificados no documento de requisitos deste software.
136
137
8.
A Figura 80 apresenta um Diagrama de Objetos das classes do Jogo, incluindo as classes de interface. O Objetivo deste diagrama o de mostrar que todo o jogo est interligado, ou seja, por exemplo, o atributo tetris, da classe Tetris, encontrado em vrias classes, referencia o mesmo objeto, sendo assim, quando ocorre alterao desse objeto em uma das classes, ocorre nas outras tambm. O mesmo ocorre com a classe tabuleiro, que acessada de varias outras classes. Diferentemente acontece com a classe Pea, que possui dois objetos neste diagrama, o objeto peaAtual e o objeto prxima pea, diferentes entre 138
9.
programador possa ter plena noo de como devero ser as interfaces do jogo. Lembrando que estas interfaces podem, e devem, ser melhoradas pelo programador.
A Figura 81 apresenta uma possvel interface inicial para o jogo, onde o jogador tem opes de Iniciar Jogo, Ajuda, Sair ou Ligar/Desligar o Som. A execuo do jogo s ocorre aps esta primeira interao do jogador.
139
A Figura 82 apresenta uma possvel tela de ajuda ao usurio, onde ele consegue visualizar a descrio do jogo e tambm as teclas que ele deve utilizar. Tambm nesta tela pode-se Ligar/Desligar o Som.
140
A Figura 83 apresenta uma possvel tela de execuo do jogo. Devero constar nesta tela, como j mencionado neste documento, opes para pausar o jogo, ligar/desligar som, sair e ajuda, todas acessveis via teclado. Para o programador, interessante salientar que a os dois tabuleiro, o que mostra a
141
A Figura 84 representa a tela em que solicita-se o nome do usurio para inseri-lo no ranking.
A Figura 85 representa a tela onde o usurio verifica o ranking. O jogador s aparecer no ranking se sua pontuao for maior que a pontuao do ltimo colocado. 142
10.
valores dos custos de um projeto de software, onde os mesmo devem ser entregues dentro do prazo estipulado e com os requisitos solicitados pelo cliente. 10.1. Objetivos
Definir detalhadamente todas as informaes necessrias para a aprovao efetiva do projeto, contemplando todas as etapas que sero, de alguma forma, relevantes para o planejamento, execuo e desenvolvimento, envolvendo o escopo, comunicaes, tempo, custo, recursos humanos, dentre outros. 10.2. Pblico alvo
Pessoas de qualquer idade, que queiram divertir-se em um jogo simples e que tenham um mnimo de instruo sobre as funcionalidades do jogo e interao do usurio com o jogo. 10.3. Premissas
Nesta seo so descritas as premissas de funcionamento e desenvolvimento do software. O software deve proporcionar partidas com jogadores humanos, ou seja, no h adversrios; O software deve possuir uma interface grfica de fcil utilizao; 143
O software deve seguir as informaes estabelecidas nas restries deste documento, alm da seo de Informaes Adicionais, no devendo fugir do padro de funcionamento do conhecido jogo Tetris. 10.5. Anlise de Viabilidade
Nesta seo mostrada a viabilidade tecnolgica, econmica e legal do projeto. 10.5.1. Viabilidade Tecnolgica Analisando-se a descrio do software, percebe-se que: No necessria a realizao de clculos complexos nem a utilizao de recursos avanados de computao grfica, o que diminui os requisitos de hardware exigidos durante o
desenvolvimento do jogo e durante sua utilizao. Os requisitos de hardware exibidos pelo jogo so supridos pelos computadores atuais.
144
ferramentas; Grande parte dos gastos ser para pagamento de pessoal; um projeto de curta durao.
Sendo assim, pode-se concluir que o projeto tambm vivel do ponto de vista econmico. 10.5.3. Viabilidade Legal Sero utilizadas ferramentas gratuitas para o desenvolvimento do jogo; O jogo no fornecer qualquer tipo de funcionalidade que possibilite, facilite ou mesmo incentive a aposta durante as partidas; A interface grfica no utilizar qualquer tipo de linguagem ofensiva ou racista, nem mesmo imagens que possam ser consideradas ilegais. Sendo assim, pode-se concluir que o projeto tambm vivel do ponto de vista legal. 10.6. Fatores Ambientais e Organizacionais
Nesta seo so descritos os termos de autorizao do projeto e de encerramento do mesmo. 10.7.1. Termo de Abertura do Projeto Termo de Abertura do Projeto SIMPLE TETRIS Justificativa: Entreter o usurio com um jogo simples, intuitivo e conhecido mundialmente. Produtos e servios: Software com interface amigvel e que armazena a pontuao obtida pelo jogador.
146
10.8.
Nesta seo so demonstradas a definio do projeto, as atividades a serem realizadas, abordando e documentando as caractersticas e limites do projeto e seus produtos e servios. Objetivos do Projeto: jogo simples de tetris com as regras bsicas do mesmo.
147
Nesta seo so demonstradas as atividade que compem o projeto, sendo estas representadas na forma de uma Estrutura Analtica de Projeto (EAP). A Figura abaixo demonstra as principais atividades do projeto, juntamente com suas subatividades.
148
SIMPLE TETRIS
Documentao
Codificao
Interface Grfica
Testes
Modificaes
Entrega
Levantamento de Requisitos
Projeto de Software
Alteraes do cdigo
Pesquisa de Material
Escolha da Linguagem
Testes do conjunto
Obteno de Requisitos
Montagem/redao do Documento
Montagem/redao do Documento
Montagem/redao do Documento
Nas prximas sees ser apresentada uma descrio das atividades presentes na EAP. 10.9.1. Verificao do Escopo Esta seo contm a tabela com a descrio das atividades presentes na EAP. Nesta descrio so encontradas informaes referentes a: Nome do Pacote / Sub Pacote: informa a qual pacote pertence quela atividade e ainda qual o sub pacote, se este existir. Nome do Sub pacote e da Atividade: informa a qual o nome da atividade. Objetivos: informa uma breve descrio dos objetivos daquela atividade. Critrio para Tomada de Deciso: informa porqu necessria quela atividade. 149
Nome da Atividade
Objetivos Verificar material existente relacionado ao escopo do projeto Verificar os requisitos de usurio e de sistema Definir o
Artefatos Gerados Material para consulta e auxlio nas decises Descrio dos Requisitos de usurio e de Sistema
Pesquisa de Material
contendo as especificaes dos casos de uso e dos requisitos do software Definir em classes as
Documento de Requisitos
relacionamentos entre as classes do software que faro com que as classes comuniquem-
150
151
Testes
152
10.10.
Gerenciamento do Projeto
153
funcionalidades, previamente definidas: Descer Pea: o usurio poder descer a pea quando desejar durante o jogo. Direcionar Pea: o usurio poder direcionar a pea de acordo com sua vontade. Girar Pea: o usurio poder girar a pea para encaix-la com maior facilidade. 10.10.1.2. Gerncia de Perifricos A comunicao do usurio com o software dever ocorrer atravs dos perifricos de entrada e sada, sendo assim, o software dever gerenciar tal comunicao de forma: Gerenciamento de entrada (mouse e teclado): o usurio poder interagir com o software atravs do teclado,
essencialmente, ou opcionalmente atravs do mouse, porm as funes que realizam efetivamente as jogadas do software devem ser realizadas atravs do teclado. Gerenciamento de sada (monitor): o usurio perceber a movimentao das peas do jogo atravs do monitor. 10.10.2. Estimativas
Existem vrias tcnicas de estimativas para projetos de software, as utilizadas neste projeto so descritas abaixo: Estimativa utilizando linhas de cdigo (LOC), que usa base de conhecimento histrico relacionada a projetos de
Depois de uma anlise profunda e avaliao de projetos similares, seguindo o padro de linhas de cdigo obtm-se as seguintes estimativas:
Tabela 6: Estimativa por LOC Classe TetrisThread Pea Quadrado Ranking Tabuleiro Tetris Pea2D Pea2E Pea3C Pea3D Pea3E PeaQuadrada PeaReta MiniTabuleiroGUI TabuleiroGUI TetrisGUI TOTAL Otimista 68 183 67 227 109 252 42 41 42 42 42 41 41 127 96 428 1.845 Provvel 62 166 61 206 99 229 38 37 38 38 38 37 37 115 87 389 1.677 Pessimista 56 149 55 185 89 206 34 33 34 34 34 33 33 104 78 350 1.509
155
Atravs destes valores, o software Costar calculou os valores com estimativas prprias na forma de esforo pessoa/ms.
156
Na prxima imagem so apresentadas algumas informaes geradas pelo software Costar, tais como a necessidade de 152 horas por pessoa/ms, alm de outras informaes.
157
E por fim, a imagem abaixo mostra as estimativas da diviso de etapas. Inicialmente so mostradas as estimativas totais e abaixo as divises de tarefa 158
159
Nesta seo sero descritas as informaes referentes aos recursos do projeto. 10.10.3.1. Recursos Humanos Devido a baixa complexidade do projeto, foram definidas as seguintes atribuies e responsabilidade para cada funcionrio e cargo.
Tabela 9: Recursos Humanos Previstos Quantidade Disponibilidade Cargo Funes Realiza a 01 Imediata Programador Java codificao, testes e adequao do software Projetar o software e 01 Imediata Projetista de Software redigir toda a documentao do mesmo Funcionrio Franciele Ehrhardt Hoffmann
160
10.10.3.2. Recursos Tecnolgicos Para o desenvolvimento total do projeto, so utilizados os seguintes recursos tecnolgicos:
Tabela 11: Recursos Tecnolgicos Previstos Qtd. Recurso Dispon. Descrio Utilizao Utilizado em todas as 01 Hardware Imediata Computador etapas ao longo do projeto 01 Software Imediata NetBeans verso 7.0.1 Microsoft Office 2010 Microsoft 01 Software Imediata Project Professional 2010 01 Software Imediata Costar 7.0 Astah Community 6.4 Desenvolvimento de estimativas de custo Desenvolvimento de diagramas Gratuito Desenvolvimento de cronogramas R$ 1.900,00 Implementao do software Redao dos documentos ao longo do projeto R$ 499,00 Gratuito R$ 2.500,00 Custo
01
Software
Imediata
01
Software
Imediata
Gratuito R$ 4.899,00
TOTAL
10.10.4.
Cronograma
Nesta seo so apresentados os grficos de cronograma do projeto gerados a partir do Software Microsoft Project 2010, baseado nas separaes de atividades definidas na EAP do projeto, demonstrando o tempo requerido por cada etapa, levando em considerao os 7,1 meses calculados pelo software Costar para execuo do projeto. 161
Pode-se observar que as atividades possuem certa ordem de continuidade, ou seja, uma atividade comea somente aps outra atividade terminar. O cronograma foi definido desta forma levando em conta tambm, o fato de haver apenas um funcionrio no projeto. A imagem a seguir contm o grfico de durao de todas as tarefas do projeto.
162
desenvolvimento do projeto. Todos os valores so estimativas, portanto, em uma aplicao real haver diferena nos valores. Para esta estimativa foram levados em conta as atividades, os recursos e o cronograma do projeto. 10.10.5.1. Custos Fixos Os custos fixos so custos relevantes para todo o projeto, sendo direta ou indiretamente usados por todas ou pelo menos mais de uma etapa do desenvolvimento do projeto. A tabela abaixo contm o recurso, seu custo mensal e total.
Tabela 12: Custos Fixos do Projeto Recurso Funcionrios Computador Microsoft Project 2010 Microsoft Office 2010 TOTAL Custo Mensal R$ 3.000,00 R$ 312,50 R$ 237,50 R$ 62,50 R$ 3.612,50 Custo Total R$ 24.000,00 R$ 2.500,00 R$ 1.900,00 R$ 499,00 R$ 28.899,00
Estes valores baseiam-se no tempo estimado de 7,1 meses para o desenvolvimento do projeto, porm foram calculados com base em 8 meses. 10.10.5.2. Custos Variveis Os custos variveis so aqueles que variam de acordo com o tempo ou consumo. Aqui esto previstos gastos com gua, luz, telefone e manuteno, mas por serem variveis de estimativa podem diferir bastante do caso real.
Tabela 13: Custos Variveis do Projeto Recurso gua Custo Mensal R$ 60,00 Custo Total R$ 480,00
163
10.10.5.3. Custo Total O custo total do projeto refere-se a soma dos custos fixos e variveis, e est representada na tabela abaixo.
Tabela 14: Custos Totais do Projeto Tipo Custo Fixo Custo Varivel TOTAL Custo Mensal R$ 3.612,50 R$ 380,00 R$ 3.992,50 Custo Total R$ 28,899,00 R$ 3.040,00 R$ 31,939,00
Relembrando
que
os
clculos
de
custo
foram
baseados
no
arredondamento dos 7,1 meses necessrios ao projeto para 8 meses, permitindo assim 0,9 ms de reserva. 10.10.6. Riscos
Um risco qualquer coisa que pode dar errado e em consequncia atrapalhar ou mesmo inviabilizar o projeto. Os termos utilizados na tabela indica, graus de acordo com a conveno abaixo: Custo: Baixo, Mdio, Alto. Impacto: 1 a 5 (muito baixo a muito alto) Ocorrncia: 1 a 5 (muito incomum a muito comum) 164
10.10.7.
Qualidade
Para atingir a qualidade do produto necessria no projeto, necessrio que alguns padres sejam seguidos, para que haja ento uma consolidao do projeto e a satisfao das necessidades de cada etapa. As orientaes so mostradas a seguir: O documento de requisitos do sistema proposto deve ser elaborado dentro do conjunto de normas do padro IEEE 830, garantindo a integridade dos requisitos levantados. Os documentos de anlise e projeto devem seguir o padro de modelagem UML. A linguagem de programao escolhida dever ser orientada a objetos, garantindo a modularizao das funes e opes do software, para que assim, sejam criadas as classes, atributos e mtodos necessrios. 165
recomenda-se comentrios para ajudar a identificao de segmentos de cdigo e permitir o suporte posterior.
166
173