Projeto de Sistemas de Informação 1
Período 2004.2
|
|
Monopoly
Neste semestre, vocês irão projetar e implementar uma versão em software do jogo de tabuleiro “Monopoly”. Apesar de a maioria de vocês conhecer o jogo em sua versão brasileira, chamada “Banco Imobiliário”, lembro que o Monopoly original, americano, tem diferenças importantes na disposição do tabuleiro e nas regras. É a versão americana que será feita (porque estou escrevendo um livro com Osório que usa esse jogo como exemplo), então sugiro primeiramente que vocês se familiarizem com o jogo seguindo os links no final dessa página. Cuidado para não perderem tempo demais nessa etapa, pois o jogo pode viciar rapidamente – lembrem-se de que vocês têm um projeto para entregar.
Nessa disciplina, a análise é dada pronta para vocês, através desse documento (leiam com bastante atenção) e, principalmente, através dos artefatos de análise executáveis representados pelos testes de aceitação automáticos que serão fornecidos (se você não entendeu isso, comece a assistir às aulas). Um dos objetivos desse projeto é que vocês consigam construir um jogo de Monopoly que passe 100% dos testes de aceitação. Se conseguirem, significa que vocês atingiram o objetivo mais importante no desenvolvimento de software de qualidade: atender aos requisitos do cliente. Os testes de aceitação acessam apenas a lógica do negócio, não a interface com o usuário.
Em um software como um jogo, interfaces bonitas e fáceis de usar são uma característica muito importante. Entretanto, para facilitar a vida de vocês, é suficiente criar um Monopoly com uma simples interface textual (comandos de console). Se vocês tiverem tempo de fazer uma GUI (uma dessas, por exemplo), terão um bônus na nota se o programa rodar 100% dos testes de aceitação. Caso isso não aconteça, não ganham bônus, porque foram se preocupar com GUI antes de fazer o dever de casa (não lembraram do objetivo principal); minha dica é portanto: esqueçam de interface GUI bonitinha. Há outros objetivos também que somam para a nota final de vocês: vou olhar como vocês fizeram o projeto, os testes de unidades, a qualidade do código, etc., mas é importante inicialmente se preocupar em fazer os testes de aceitação passarem.
Vocês terão que projetar e implementar o Monopoly de uma forma incremental. Haverá quatro milestones, e em cada um novas funcionalidades serão adicionadas ao sistema. As funcionalidades estão descritas dentro de User Stories. Uma User Story consiste de duas partes: 1) uma descrição informal do que deseja de funcionalidade e das interações que o sistema deve suportar; 2) um conjunto formal de testes de aceitação que, se executarem direitinho, comprovam que a funcionalidade foi implementada como desejada. Em cada um dos milestones, haverá um conjunto de user stories que deverá ser implementado. Aqui você encontra os testes de aceitação para cada user story, e as instruções de como rodá-los. Antes de entregar um milestone, sempre leia as recomendações e a listagem do que deve ser entregue.
User story 1 – Criar
um novo jogo
Exemplo do console:
Entre com o número
de jogadores [2-8]: 2
Entre com o nome do
jogador no. 1 : jacques
Escolha a cor do
peão do jogador no. 1 entre as opções seguintes:
[preto][branco][vermelho][verde][azul][amarelo][laranja][rosa]
: azul
Entre com o nome do
jogador no. 2 : osorio
Escolha a cor do
peão do jogador no. 2 entre as opções seguintes:
[preto][branco][vermelho][verde][amarelo][laranja][rosa]
: vermelho
O jogo Monopoly foi
iniciado.
A jogada de jacques
começou.
Comandos
disponíveis: [jogar][sair]
Entre com um
comando:
User story 2 – Jogada
do Monopoly
Permita que os jogadores se alternem realizando jogadas, implementando as regras e requisitos listados abaxio. A ordem dos jogadores é a mesma fornecida na criação do jogo. A jogada começa com uma mensagem indicando quem é o jogador atual, e quais são os comandos disponíveis. Inicialmente, os únicos comandos disponíveis para os jogadores são “jogar” (os dados) ou “sair”. Em jogadas posteriores, outros comandos poderão ficar disponíveis. O comando “sair” é usado para sair do jogo. O programa deve mostrar uma mensagem e pedir uma confirmação “sim/não”, para garantir que o usuário deseja realmente terminar o jogo. O comando “jogar” faz os dados serem lançados e avança o peão no tabuleiro de acordo com a soma dos números obtidos no lançamento dos dados (uma mensagem deve informar os números obtidos e onde o peão caiu). Dependendo do lugar onde o peão caia, várias coisas podem acontecer, de acordo com as regras e requisitos listadas ao final dessa User Story. Implemente todas essas regras e requisitos. Ao usar o comando “jogar”, o jogador está ciente de que quer terminar sua jogada. Se o jogador cair em uma propriedade ou ferrovia que possua um título disponível para venda, o jogador compra o título automaticamente, se tiver dinheiro suficiente. Após as conseqüências da jogada terem sido tratadas (pagamentos, compras, etc.) e informadas no console, a jogada do jogador termina e começa a jogada do próximo jogador, da mesma forma: uma mensagem deve aparecer indicando quem é o jogador da vez, quais os comandos disponíveis, e o programa pede que seja entrado um comando.
Exemplo do console:
A jogada de jacques
começou.
Comandos disponíveis:
[jogar][sair]
Entre com um
comando: jogar
O jogador jacques
tirou 6,4 e o peão avançou para 10 – Jail, Just Visiting.
Nada aconteceu.
A jogada de osorio
começou.
Comandos
disponíveis: [jogar][sair]
Entre com um
comando: sair
Você tem certeza de
que quer sair (Sim/Não)? S
Jogo encerrado.
Regras e requisitos que devem ser implementados nessa User Story (vai haver testes de aceitação para tudo):
GO → |
Mediterranean Avenue |
Community Chest |
Baltic Avenue |
Income Tax |
Reading Railroad |
Oriental Avenue |
Chance |
Vermont Avenue |
Connecticut Avenue |
Jail |
||
|
|
|
|
|
||||||||
Boardwalk |
|
Monopoly |
|
St. Charles Place |
||||||||
Luxury Tax |
Electric Company |
|||||||||||
Park Place |
|
|
States Avenue |
|||||||||
Chance |
|
Virginia Avenue |
||||||||||
Short Line |
Pennsylvania Railroad |
|||||||||||
Pennsylvania Avenue |
|
|
St. James Place |
|||||||||
Community Chest |
Community Chest |
|||||||||||
North Carolina Avenue |
|
|
Tennessee Avenue |
|||||||||
Pacific Avenue |
|
|
New York Avenue |
|||||||||
Go To Jail |
|
Water Works |
|
|
B&O Railroad |
|
|
Chance |
|
Free Parking |
||
Marvin Gardens |
Ventnor Avenue |
Atlantic Avenue |
Illinois Avenue |
Indiana Avenue |
Kentucky Avenue |
Fig. 1 – Tabuleiro do Monopoly clássico
(copyright Parker Brothers)
Posição |
Nome |
Preço |
Aluguel sem casas |
1 Casa |
2 Casas |
3 Casas |
4 Casas |
Hotel |
Hipoteca |
Preço da Casa |
1 |
Mediterranean Avenue |
60 |
2 |
10 |
30 |
90 |
160 |
250 |
30 |
50 |
2 |
Community
Chest 1 |
|
|
|
|
|
|
|
|
|
3 |
Baltic Avenue |
60 |
4 |
20 |
60 |
180 |
320 |
450 |
30 |
50 |
4 |
Income
Tax |
|
|
|
|
|
|
|
|
|
5 |
Reading
Railroad |
200 |
|
|
|
|
|
|
100 |
|
6 |
Oriental Avenue |
100 |
6 |
30 |
90 |
270 |
400 |
550 |
50 |
50 |
7 |
Chance 1 |
|
|
|
|
|
|
|
|
|
8 |
Vermont Avenue |
100 |
6 |
30 |
90 |
270 |
400 |
550 |
50 |
50 |
9 |
Connecticut Avenue |
120 |
8 |
40 |
100 |
300 |
450 |
600 |
60 |
50 |
10 |
Jail –
Just Visiting |
|
|
|
|
|
|
|
|
|
11 |
St. Charles Place |
140 |
10 |
50 |
150 |
450 |
625 |
750 |
70 |
100 |
12 |
Electric
Company |
150 |
|
|
|
|
|
|
75 |
|
13 |
States Avenue |
140 |
10 |
50 |
150 |
450 |
625 |
750 |
70 |
100 |
14 |
Virginia Avenue |
160 |
12 |
60 |
180 |
500 |
700 |
900 |
80 |
100 |
15 |
Pennsylvania
Railroad |
200 |
|
|
|
|
|
|
100 |
|
16 |
St. James Place |
180 |
14 |
70 |
200 |
550 |
750 |
950 |
90 |
100 |
17 |
Community
Chest 2 |
|
|
|
|
|
|
|
|
|
18 |
Tennessee Avenue |
180 |
14 |
70 |
200 |
550 |
750 |
950 |
90 |
100 |
19 |
New York Avenue |
200 |
16 |
80 |
220 |
600 |
800 |
1000 |
100 |
100 |
20 |
Free
Parking |
|
|
|
|
|
|
|
|
|
21 |
Kentucky Avenue |
220 |
18 |
90 |
250 |
700 |
875 |
1050 |
110 |
150 |
22 |
Chance 2 |
|
|
|
|
|
|
|
|
|
23 |
Indiana Avenue |
220 |
18 |
90 |
250 |
700 |
875 |
1050 |
110 |
150 |
24 |
Illinois Avenue |
240 |
20 |
100 |
300 |
750 |
925 |
1100 |
120 |
150 |
25 |
B & O
Railroad |
200 |
|
|
|
|
|
|
100 |
|
26 |
Atlantic Avenue |
260 |
22 |
110 |
330 |
800 |
975 |
1150 |
130 |
150 |
27 |
Ventnor Avenue |
260 |
22 |
110 |
330 |
800 |
975 |
1150 |
130 |
150 |
28 |
Water
Works |
150 |
|
|
|
|
|
|
|
|
29 |
Marvin Gardens |
280 |
24 |
120 |
360 |
850 |
1025 |
1200 |
140 |
150 |
30 |
Go to
Jail |
|
|
|
|
|
|
|
|
|
31 |
Pacific Avenue |
300 |
26 |
130 |
390 |
900 |
1100 |
1275 |
150 |
200 |
32 |
North Carolina Avenue |
300 |
26 |
130 |
390 |
900 |
1100 |
1275 |
150 |
200 |
33 |
Community
Chest 3 |
|
|
|
|
|
|
|
|
|
34 |
Pennsylvania Avenue |
320 |
28 |
150 |
450 |
1000 |
1200 |
1400 |
160 |
200 |
35 |
Short
Line Railroad |
200 |
|
|
|
|
|
|
100 |
|
36 |
Chance 3 |
|
|
|
|
|
|
|
|
|
37 |
Park Place |
350 |
35 |
175 |
500 |
1100 |
1300 |
1500 |
175 |
200 |
38 |
Luxury
Tax |
|
|
|
|
|
|
|
|
|
39 |
Boardwalk |
400 |
50 |
200 |
600 |
1400 |
1700 |
2000 |
200 |
200 |
40 |
Go |
|
|
|
|
|
|
|
|
|
Tabela 1 – Valores oficiais do Monopoly clássico
User story 3 – Status
Na sua vez, antes de usar o comando “jogar”, o jogador tem a opção de usar o comando “status”. Através dele, o jogador obtém informação textual sobre seu estado no jogo. A maneira como o texto será arrumado e formatado pode ser feita como você quiser, mas ele deve conter o seguinte: o nome do jogador, a cor do peão, o nome da posição atual no tabuleiro, quanto dinheiro o jogador possui, uma lista dos títulos que o jogador possui (seus pertences) com as informações relativas a cada título (cor do grupo se for propriedade, aluguel das propriedades, valor de corridas das ferrovias, etc.). Após mostrar a informação, o programa pede para o jogador entrar com um comando, da maneira usual (através da user story 2).
Exemplo do console:
A jogada de jacques
começou.
Comandos
disponíveis: [jogar][status][sair]
Entre com um
comando: status
O status de jacques
– azul é o seguinte:
Situado na posição
39 – Boardwalk
Possui $304
Títulos:
[Baltic Avenue] –
propriedade roxa, aluguel 4
[B & O Railroad]
– ferrovia, corrida 25
[Pennsylvania Avenue]
– propriedade verde, aluguel 28
Comandos
disponíveis: [jogar][status][sair]
Entre com um
comando:
User story 4 – Compra
de Propriedades e Ferrovias
Quando o peão cai em uma propriedade ou ferrovia sem dono, o jogador tem a opção de comprar o título da propriedade ou ferrovia pelo preço indicado na tabela 1. Se o jogador tiver o dinheiro necessário para a compra, o programa deve mostrar uma mensagem indicando o nome do item (propriedade ou ferrovia), o tipo (um texto, que pode ser a cor do grupo, se for uma propriedade, or “ferrovia” para as ferrovias), o preço e o dinheiro que o jogador possui, e perguntar se o jogador quer comprar ou não. Se o jogador não quiser comprar o item, ou não tiver dinheiro suficiente, o item fica disponível para ser comprado depois por qualquer jogador (inclusive o que não o comprou) em outra jogada.
Exemplo do console:
A jogada de jacques
começou.
Comandos
disponíveis: [jogar][status][sair]
Entre com um
comando: jogar
O jogador jacques
tirou 6,5 e o peão avançou para 11 – St. Charles Place.
A título da
propriedade St. Charles Place está disponível por $140.
Jacques, você possui
$304.
Você deseja comprar
St. Charles Place (Sim/Não)? S
User story 5 – Sorte/Revés e Cofres
Comunitários
Você deve implementar os lugares do tipo Sorte/Revés (Chance) e os Cofres Comunitários (Community Chests). Sempre que um jogador cair em Sorte/Revés ou Cofres Comunitários, uma carta aleatória é selecionada e a ação indicada na carta ocorre. A lista de cartas e as ações associadas estão nas tabelas 2 e 3. Uma mensagem deve mostrar a carta sorteada e o jogador deve pressionar qualquer tecla para continuar. Veja mais detalhes nas regras abaixo. Se o jogador receber uma carta de saída livre da prisão, ela deve ser informada quando o comando “status” for usado.
A jogada de jacques
começou.
Comandos
disponíveis: [jogar][status][sair]
Entre com um
comando: jogar
O jogador jacques
tirou 4,3 e o peão avançou para 7 – Chance 1.
O banco lhe pagou
dividendos de $50.
Número da carta |
Nome da carta |
Descrição |
Observações |
1 |
Avance para o Ponto de Partida (Go) |
Receba
$200 |
Isso não é um bônus, ou seja, os $200 referem-se ao valor que o jogador recebe normalmente ao passar pelo Ponto de Partida. Importante: veja a regra acima marcada com um * |
2 |
Erro do banco em seu favor |
Receba $200 |
|
3 |
Taxa do médico |
Pague $50 |
|
4 |
Abertura da Grande Ópera |
Receba $50 de cada jogador pelas entradas |
|
5 |
Da liquidação fora de estoque |
Receba
$45 |
|
6 |
Saia livre da prisão, sem pagar |
Esta carta pode ser mantida até o uso ou venda. |
Veja a user story sobre a prisão |
7 |
Vá para a prisão |
Vá direto para a prisão – Não passe pelo ponto de partida – Não receba $200 |
|
8 |
Restituição do Imposto de Renda |
Receba $20 |
|
9 |
Aniversário do seguro de vida |
Receba $100 |
|
10 |
Pague o hospital |
Pague $100 |
|
11 |
Pague taxa da escola |
Pague $150 |
|
12 |
Receba por seus serviços |
Receba $25 |
|
13 |
Aniversário dos fundos de Natal |
Receba $100 |
|
14 |
Você tirou o segundo lugar no concurso de beleza |
Receba
$10 |
|
15 |
Você herdou |
Receba $100 |
|
16 |
Você deve pagar os reparos da rua |
Pague $40 por cada casa, $115 por hotel |
Isso se aplica apenas às casas e hotéis que o jogador possui; ele não precisa pagar pelas casas e hotéis dos outros jogadores. |
Table 2 – Cartas dos Cofres
Comunitários
Número da carta |
Nome da carta |
Descrição da carta |
Observações |
1 |
Avance para o Ponto de Partida |
Receba
$200 |
|
2 |
Avance
para |
|
O jogador não recebe $200 se passar pelo Ponto de Partida. |
3 |
Avance para St.
Charles Place |
Se passer pelo ponto de partida, receba $200 |
|
4 |
Avance o peão para o serviço público mais próximo |
Se não tiver dono você pode comprá-lo do banco. Se tiver, lance os dados e pague ao dono 10 vezes o resultado do lançamento. |
O jogador não recebe $200 se passar pelo Ponto de Partida. |
5 |
Avance o peão para a ferrovia mais próxima |
Pague ao dono duas vezes o valor que ele deveria receber normalmente. Se a ferrovia não tiver dono, você pode comprá-la do banco. |
O jogador não recebe $200 se passar pelo Ponto de Partida. |
6 |
O banco lhe pagou dividendos de |
$50 |
|
7 |
Volte 3 espaços |
|
|
8 |
Vá diretamente para a Prisão |
Não passe pelo ponto de partida, não receba $200. |
|
9 |
Faça a manutenção de todas as suas propriedades |
Para cada casa pague $25, para cada hotel $10. |
Somente para casas e hotéis que o jogador construiu. |
10 |
Pague imposto de pobreza de |
$15 |
|
11 |
Esta carta pode ser mantida até seu uso ou venda |
Get Out Of Jail Free |
Veja user stories sobre Prisão. |
12 |
Dê uma volta na Reading |
Se você passer pelo Ponto de Partida receba $200 |
|
13 |
Dê uma caminhada no Board Walk |
Avance o peão para Board Walk |
|
14 |
Você foi eleito presidente do tabuleiro |
Pague $50 para cada jogador |
|
15 |
Seus empréstimos e investimento fizeram aniversário |
Receba $150 |
|
Table 3 – Cartas de Sorte/Revés
Regras para cofres comunitários e sorte/revés.
User story 6 – Prisão
Adicionar a funcionalidade da prisão. O jogador pode ir para
a prisão se cair
Exemplos do console:
A jogada de jacques
começou.
jacques está na
prisão.
Comandos
disponíveis: [pagar][carta][jogar][status][sair]
Entre com um
comando: pagar
Comandos
disponíveis: [jogar][status][sair]
Entre com um
comando: jogar
O jogador jacques
tirou 3,2 e o peão avançou para 15 – Pennsylvania Railroad.
Outro exemplo:
A jogada de jacques
começou.
jacques está na
prisão.
Comandos
disponíveis: [pagar][carta][jogar][status][sair]
Entre com um
comando: jogar
O jogador jacques
tirou 3,2 e não conseguiu sair da prisão.
A jogada de osorio
começou
Comandos
disponíveis: [jogar][status][sair]
Entre com um
comando:
Regras para a prisão:
User story 7 –
Serviços Públicos
Se o jogador cair em um serviço público (Water Works e Electric Company) sem dono, ele tem a opção de comprá-lo pelo preço indicado na tabela 1 – mostrar o nome do serviço público, o preço, e perguntar se o jogador deseja comprá-lo. Se o jogador pedir o status do jogo, o texto deve incluir informações sobre os serviços públicos que possui (nome, tipo; serviço público). Quando um jogador cai em um serviço público com dono, ele deve pagar ao dono o resulto do lançamento dos dados multiplicado por um fator que pode ser 4 ou 10, caso o dono possua apenas um ou os dois serviços públicos, respectivamente. Informar o que aconteceu antes de terminar a jogada.
User story 8 –
Construção de casas
Em sua jogada, antes de lançar os dados, um jogador pode usar o comando “construir”, que é usado para construir casas e/ou hotéis em suas propriedades. Esse comando só fica disponível se o jogador detiver monopólio sobre um grupo de propriedade (possui todas da mesma cor), se houver casas e/ou hotéis disponíveis no banco, se o jogador tiver dinheiro suficiente para construir (veja tabela 1) e se ela ainda puder construir em suas propriedades (se já tiver hotéis em todas as propriedades de um monopólio, ele não pode mais construir nesse grupo). Use as regras para construção abaixo. Se o jogador pedir seu status no jogo, o texto deve conter informações sobre casas: para cada propriedade, exibir o número de casas (ou hotel) construídos, se houver. Quando o jogador entra com o comando “construir”, uma lista numerada de todas as propriedades onde se pode construir, com o dinheiro correspondente necessário para construir a próxima casa ou hotel (o número de casas já construídas deve ser informado) é mostrado, juntamente com o dinheiro que o jogador possui. O jogador deve então entrar com o número correspondente à propriedade na qual quer construir, ou 0 para cancelar a operação. Quando ele constrói, a lista é atualizada, mostrada, e o programa pede outro número. O processo continua até que o jogador entre com 0, ou até que não haja mais propriedades onde se possa construir. Se o jogador cancelar (entrando 0), ele pode voltar a digitar “construir” se ainda puder, desde que seja antes de “jogar”.
A jogada de jacques
começou.
Comandos
disponíveis: [construir][vender][jogar][status][sair]
Entre com um
comando: construir
jacques possui $530
Escolha onde quer
construir:
1 – Park Place tem 0
casa(s) construídas, casa custa $200
2 – Boardwalk tem 1
casa(s) construídas, casa custa $200
Entre com o número da
propriedade (0 para sair): 1
jacques possui $330
Escolha onde quer
construir:
1 – Park Place tem 1
casa(s) construídas, casa custa $200
2 – Boardwalk tem 1
casa(s) construídas, casa custa $200
Entre com o número
da propriedade (0 para sair): 0
Comandos disponíveis:
[vender][jogar][status][sair]
Entre com um comando:
Regras para a construção de casas:
Use story 9 – Venda
de casas
Se o jogador tiver qualquer casa ou hotel construído, ele deve, durante sua jogada, poder vendê-los de volta para o banco. O comando “vender” fica disponível nesta condição. Uma lista numerada igual à usada para a construção de casas aparece, e o jogador escolhe a casa ou hotel que quer vender digitando o número correspondente, ou 0 para cancelar. O processo se repete até que o jogador digite 0, ou até que não haja casas adicionais a serem vendidas. O jogador recebe a metade do valor de compra pela casa ou hotel vendida (veja tabela 1). O comando deve continuar disponível se o jogador não tiver vendido todas as suas casas.
A jogada de jacques
começou.
Comandos
disponíveis: [vender][jogar][status][sair]
Entre com um
comando: vender
jacques possui $330
Escolha onde quer
vender:
1 – Park Place tem 1
casa(s) construídas, você recebe $100
2 – Boardwalk tem 1
casa(s) construídas, você recebe $100
Entre com o número
da propriedade (0 para sair): 1
jacques possui $430
Escolha onde quer
vender:
1 – Park Place tem 0
casa(s) construídas, você recebe $100
2 – Boardwalk tem 1
casa(s) construídas, você recebe $100
Entre com o número
da propriedade (0 para sair): 0
Comandos
disponíveis: [vender][jogar][status][sair]
Entre com um
comando:
User story 10 –
Hipoteca
Permita que títulos de propriedades, ferrovias e serviços públicos possam ser hipotecados. Todo jogador que detiver um título tem disponível em sua jogada um novo comando chamado “hipotecar”. Quando o jogador entrar esse comando, uma lista numerada similar à da compra de casas aparece, mostrando os títulos que podem ser hipotecados (veja regras e requisitos abaixo). O jogador deve entrar com o número do título que quer hipotecar, ou 0 para cancelar. O valor das hipotecas de cada título pode ser encontrado na tabela 1. O processo continua até que 0 seja digitado, ou não houver mais títulos que possam ser hipotecados.
As informações sobre títulos de propriedades, ferrovias e serviços públicos hipotecados também devem estar disponíveis se o jogador pedir o status do jogo (apenas dizer para cada um de seus títulos se está hipotecado ou não).
A jogada de jacques
começou.
Comandos
disponíveis: [hipotecar][construir][jogar][status][sair]
Entre com um
comando: hipotecar
Escolha o título que
quer hipotecar:
1 – Park Place pode
ser hipotecado por $175
2 – Boardwalk pode
ser hipotecado por $200
Entre com o número
do título (0 para sair): 1
Escolha o título que
quer hipotecar:
1 – Boardwalk pode
ser hipotecado por $200
Entre com o número
do título (0 para sair): 0
Regras para hipotecas:
User story 11 –
Quitação de hipoteca
Permita que a hipoteca de títulos possa ser quitada. Um comando chamado “desipotecar” deve estar disponível para todo jogador que tiver títulos hipotecados. Quando usado, este comando abre uma lista numerada de títulos hipotecados (cuja hipoteca o dono tem dinheiro para quitar), juntamente com o dinheiro que o jogador possui. O jogador quita as hipotecas digitando o número correspondente. O valor é o da hipoteca + 10% de juros. O processo é repetido até que 0 seja digitado, ou até que não haja mais títulos hipotecados.
Exemplo do console:
A jogada de jacques começou.
Comandos
disponíveis: [hipotecar][desipotecar][construir][jogar][status][sair]
Entre com um
comando: desipotecar
jacques possui $430
Escolha o título que
quer desipotecar:
1 – Park Place pode
ser desipotecado por $192
Entre com o número
do título (0 para sair): 1
Comandos
disponíveis: [hipotecar][construir][jogar][status][sair]
Entre com um
comando:
User story 13 –
Evitar falência
Sempre que o dinheiro de um jogador ficar abaixo de 0, um evento especial ocorre que interrompe o jogo e muda a atenção para o jogador ameaçado de falência. Uma jogada especial é dada para este jogador para que ele possa vender habitações e hipotecar títulos para tentar continuar no jogo. Os comandos disponíveis para ele são “sair” (sai do jogo), “hipotecar” (se ainda tiver títulos para hipotecar), “vender” (se tiver habitações construídas), e “status”. Ele deve usar os comandos hipotecar e vender para tentar pagar suas dívidas. Se “hipotecar” e “vender” se tornarem indisponíveis e o dinheiro do jogador ainda estiver abaixo de zero, ele é excluído do jogo, e uma mensagem aparece dizendo isso. Ao conseguir fazer o dinheiro voltar a ficar acima de zero, um comando chamado “evitar” se torna disponível, e faz com que o jogo recomece do ponto em que parou.
Funcionalidades
extras não-essenciais (mas que rendem pontos, se você implementá-las, além de
fazer o essencial)
Permitir regras
customizáveis – Isso poderia ser feito através de um arquivo de
configuração. Através dele, o usuário poderia personalizar o jogo, modificando
as regras do Monopoly. É aqui que a gente vê se o seu programa está bem
projetado (
Permitir salvar/abrir jogos – commandos adicionais (que poderiam ser usados a qualquer momento) chamados “salvar” e “abrir”. Através deles, o estado de um jogo pode ser salvo em um arquivo, e depois aberto.
Implementar jogadores artificiais – na criação do jogo, cada jogador seria marcado como humano ou artificial. Um jogador artificial é comandado pelo computador, joga automaticamente, e pode ter diferentes níveis de inteligência.
Implementar jogabilidade em rede/online – o Monopoly pode ser jogado em rede, cada jogador em seu computador. Um jogador teria que esperar enquanto os outros fazem suas jogadas. Funcionalidades interessantes poderiam ser trocas entre jogadores a qualquer momento e um leilão baseado em tempo, em que os jogadores podem dar lances a qualquer momento.
Teremos 4 milestones. Vejam abaixo.
Vocês vão observar que não pedi interface gráfica (Swing ou Web). Tem dois motivos:
Recomendações para a
entrega:
Coisas que devem ser entregues:
Lembre dos
seguintes pontos ao entregar o resultado:
o
ant limpa compila doc unit testa
o
Um
manual do usuário (conciso mas completo) para o uso de sua ferramenta.
o
Um
diagrama de classes, como modelo de design.
o
Uma
lista dos patterns usados e onde foram usados.
o
Compilação
(0% - se não compilar, não aceito o projeto)
o
Execução
e qualidade dos testes de unidade (10%)
o
Execução
dos testes de aceitação (40%)
o
Qualidade
da documentação (10%)
o
Qualidade
do design (15%)
o
Qualidade
do código (15%)
o
Qualidade
do relatório (10%)
o
Compilação: extraia os arquivo do .rar
e faça "ant limpa compila". O programa deve compilar. Se não
compilar, os alunos (e o professor) devem ser avisados imediatamente do fato. A
correção desse projeto pára. O projeto receberá uma penalidade, mesmo se for
entregue depois para corrigir o problema.
o
Testes de unidade: execute "ant
unit". Anote o número de testes para você poder comparar com os colegas. O
número de testes em si não é suficiente para dar nota, pois a qualidade do que cada
teste realiza é importante. Portanto, analise a qualidade dos testes de
aceitação. Testes triviais não contam. Dê uma nota entre 0 e 10 para refletir
quão bem os testes de unidade testam o software.
o
Testes de aceitação: Execute “ant testa”.
Observe se todos os testes de aceitação executam. Para a user story 1, os
testes estão em us1.txt e assim por diante. Retire 1 ponto (sobre 10) para cada
testes de aceitação que não funciona. No milestone 1, apenas us1, us2, us3 e
us4 são testadas. A partir do milestone 2, os testes das user stories de
milestones anteriores devem ser retestadas.
o
Relatório: leia o relatório e dê uma
nota de
o
Documentação: verifique a qualidade do
javadoc. Deve-se ter uma descrição de cada pacote, cada classe, cada método,
cada parâmetro, cada valor de retorno e cada exceção. Não precisa verificar
todo o código. Basta fazer um scan rápido. Dê nota de
o
Design: Avalie a qualidade do
design examinando o código e/ou o relatório (diagrama de classes). Verifique as
entidades principais e seus métodos. As entidades principais fazem sentido?
Estão desempenhando responsabilidades adequadas (seus atributos e métodos fazem
sentido)? Dê nota de
o
Código: Examine a qualidade do
código, além do design já examinado. Verifique nomes de variáveis, construções
de loops, endentação, organização em pacotes, tratamento de exceções, etc. Dê
nota de
Implemente as user stories 5, 6 e 7, obedecendo às regras correspondentes.
Siga as mesmas recomendações do primeiro milestone.
Implemente as user stories 8 e 9, obedecendo às regras correspondentes.
Siga as mesmas recomendações do primeiro milestone.
Agora, vamos brincar! Você
vai receber o projeto de outro grupo e deverá implementar as user
stories 10, 11 e 12, obedecendo às regras correspondentes. Mude o mínimo
necessário no programa que você recebeu para implementar a US. Você deve
avaliar os seguintes pontos (incluir sua avaliação no relatório):
Aqui você pode baixar os testes de aceitação que você deve rodar para saber se o seu jogo está atendendo direitinho os requisitos. Você usará o EasyAccept (ex-JAccept) para rodar os testes. Baixe-o aqui e leia o manual aqui. Para poder rodar os testes, vocês precisarão criar uma Façade que acessa a business logic do seu jogo segundo uma linguagem de script que foi criada para os testes de aceitação.
Para acessar a business logic de seu programa e poder realizar os testes de aceitação, você precisará implementar uma linguagem de script que consiste nos comandos abaixo. Esses são os comandos usados nos testes de aceitação (us1.txt, us2.txt, etc.). Cada um deles deve corresponder a um método na sua façade.
Obs.: por enquanto apenas estão listados os comandos usados nos testes das user stories 1,2,3 e 4.
<void> createGame numPlayers=<int> playerNames=<String>
tokenColor=<String>
Obs.: o vetor de nomes e o de cores será passado através de uma String, com o seguinte formato: começa com abre chaves "{", seguida dos itens, que são separado por vírgulas, sem aspas; a String deve terminar com fecha chaves "}". Ex.: createGame numPlayers=2 playerNames="{jacques,osorio}" tokenColors="{red,blue}"
Obs.: o vetor de títulos deve ser retornado através de uma String, da seguinte forma: começa com abre chaves "{", seguida dos itens, que são separado por vírgulas, sem aspas; a String deve terminar com fecha chaves "}". Ex.: expect "{Marvin Gardens,Boardwalk}" getPlayerDeeds playerName="jacques"
Obs.: o vetor de comandos deve ser retornado através de uma String, da seguinte forma: começa com abre chaves "{", seguida dos itens, que são separado por vírgulas, sem aspas; a String deve terminar com fecha chaves "}". Ex.: expect "{roll,status,quit}" getCommands
Propriedade – lugar do tabuleiro que rende dinheiro para os donos sob a forma de aluguéis, cada vez que os outros jogadores caem nele. Nelas, casas ou hotéis podem ser construídas para aumentar o valor do aluguel. Formam grupos de 3, com cores associadas.
Ferrovia – lugar do tabuleiro que rende dinheiro para o dono sob a forma de corridas, cada vez que os outros jogadores caem nele. O valor da corrida aumenta de acordo com a quantidade de ferrovias que o dono possui. Há quatro ferrovias no total.
Serviço Público – lugar do tabuleiro que rende dinheiro para o dono sob a forma de serviços, cada vez que os outros jogadores caem nele. O valor devido depende do número obtido no lançamento dos dados e da quantidade de serviços que o dono possui. Há dois serviços públicos: electric company e water works.
Cofre Comunitário – lugar do tabuleiro que gera para o jogador que cai nele uma carta que contém um evento aleatório, na maioria das vezes envolvendo ganho ou perda de dinheiro.
Sorte/Revés – lugar do tabuleiro que gera para o jogador que cai nele uma carta que contém um evento aleatório, na maioria das vezes envolvendo avanços ou recuos no tabuleiro.
Imposto de Renda – lugar do tabuleiro em que o jogador deve pagar o valor de $200 ao banco.
Imposto de Riqueza – lugar do tabuleiro em que o jogador deve pagar o valor de $75 ao banco.
Título – é um documento que representa uma propriedade, ferrovia ou serviço público – lugares compráveis do tabuleiro. Os jogadores que detém títulos de um lugar são os donos do lugar.
Habitação – casas ou hotéis, que podem ser construídas em propriedades.
Peão – a peça representativa de um jogador que se move pelo tabuleiro, ocupando os lugares.
Lugar – cada um dos 40 espaços do tabuleiro onde os peões se movimentam.
Jogada – é a “vez” de um jogador, a chance que ele tem de realizar ações através de comandos e de lançar os dados para avançar no tabuleiro, ocupando um novo lugar.
Rodada – um conjunto de jogadas, formado por 1 jogadas de cada jogador.
http://www.games.com – aqui você pode jogar online o monopoly original em Java; crie uma conta, ou entre como “guest”.
http://www.download.com/Monopoly-3/3000-10186-10331437.html – shareware do Monopoly 3, jogo em 3D com animações. Sugiro alguém baixar e gravar em um cd, porque o jogo é grande (252 MB), e só funciona por 1 hora (mas tem um crack no submundo da internet, não digam que vocês leram isso aqui, hehe ).