| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2011 19:22:20
|
dreampeppers99
Virtual Machine Man
![[Avatar]](/images/avatar/6fb993285d56e6927284ff9b11ac6851.jpg)
Membro desde: 29/08/2006 21:50:17
Mensagens: 523
Offline
|
O desafio é bem simples, há um cenário e os testes para que vocês façam e demonstrem e/ou expliquem suas decisões de projeto.
Produto: Um jogo RPG chamado Breath of Fantasy
Estória: O esquema de batalha -> Criar o esquema de batalha para o jogo.
Descrição:
A batalha é baseada em turnos, a cada momento um personagem ataca e o outro recebe o ataque. O personagem tem pontos de energia e pontos de poder. Essas duas propriedades contém números inteiros. Por exemplo, se o herói (pontos de energia:60, pontos de poder:45) ataca um inimigo (pontos de energia:60, pontos de poder:45) o inimigo terá seus pontos de energia diminuídos. O dano sofrido, ou seja, os pontos de energia perdidos pelo inimigo, dependem do fator sorte. O fator sorte é um número randômico de 0 a 100 que é dado a cada turno da batalha.
Há quatro tipos de ataques que dependem logicamente do fator sorte:
Quando a sorte está em 0-3 então o ataque é Perdido -> não causa dano;
Quando a sorte está em 4-70 então o ataque é Normal -> causa 1/3 de seus pontos de poder de danos;
Quando a sorte está em 71-96 então o ataque é Sorte -> causa 1/3 de seus pontos de poder mais 20% desses 1/3;
E quando a sorte está em 97-100 então o ataque é Crítico -> causa o dobro de um ataque normal.
Crie testes que provem que com os personagens acima (herói e inimigo) :
Quando houver um ataque Perdido não há dano;
Quando houver um ataque Normal haverá um dano de 1/3 dos pontos de poder;
Quando houver um ataque Sorte haverá um dano de 1/3 + 20% de 1/3;
E quando houver um ataque Crítico haverá um dano de duas vezes o dano de um ataque normal.
Minha solução foi:
Poste a sua solução!
Post original : TDD em prática desenvolvendo um jogo
This message was edited 3 times. Last update was at 27/04/2011 10:05:54
|
- Não respondo dúvida por PM!
- Blog -> Software development - Clojure, Ruby, Java, Test and little pumpkins
- Blog - Desenvolvimento de software - Java |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2011 20:11:06
|
RafaelViana
GUJ Master
Membro desde: 23/03/2008 18:56:02
Mensagens: 1257
Localização: Venâncio Aires/RS
Offline
|
Legal esse desafio. Já está favoritado para eu fazer quando sobrar um tempo. Achou em algum site ou você mesmo que criou?
Observação: Muito bom o seu código.
|
Rafael Rodrigues Viana
Estudando Java e Flex
Blog: http://www.cauirs.com.br/rafael/
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2011 20:15:43
|
dreampeppers99
Virtual Machine Man
![[Avatar]](/images/avatar/6fb993285d56e6927284ff9b11ac6851.jpg)
Membro desde: 29/08/2006 21:50:17
Mensagens: 523
Offline
|
RafaelViana wrote:Legal esse desafio. Já está favoritado para eu fazer quando sobrar um tempo. Achou em algum site ou você mesmo que criou?
Observação: Muito bom o seu código.
Obrigado pelos elogios. Eu mesmo criei, reduzi bastante minha ideia original. Sou fã de games, juntei a série Breath of Fire com Final Fantasy para nomear o "jogo" bem simples mesmo, bom pra exercitar o TDD! rsrsrsr
|
- Não respondo dúvida por PM!
- Blog -> Software development - Clojure, Ruby, Java, Test and little pumpkins
- Blog - Desenvolvimento de software - Java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2011 20:22:17
|
Two_
JavaGuru
Membro desde: 03/12/2009 18:01:53
Mensagens: 240
Localização: Belo Horizonte, MG
Offline
|
meus jogos preferidos hehehehe FF e BOF
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2011 20:26:40
|
dreampeppers99
Virtual Machine Man
![[Avatar]](/images/avatar/6fb993285d56e6927284ff9b11ac6851.jpg)
Membro desde: 29/08/2006 21:50:17
Mensagens: 523
Offline
|
Two_ wrote:meus jogos preferidos hehehehe FF e BOF
O triste é saber que o Breath of Fire está fora dos planos da Capcom para lançar nova versão.
|
- Não respondo dúvida por PM!
- Blog -> Software development - Clojure, Ruby, Java, Test and little pumpkins
- Blog - Desenvolvimento de software - Java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2011 21:02:46
|
Two_
JavaGuru
Membro desde: 03/12/2009 18:01:53
Mensagens: 240
Localização: Belo Horizonte, MG
Offline
|
Triste mesmo. Final Fantasy já está uma *** nessa ultima versão.
Só acho que a chance de errar um ataque deve ser baseado em outros atributos, como por exemplo o "AGI" x "EVASION" do herói - inimigo.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2011 21:14:50
|
dreampeppers99
Virtual Machine Man
![[Avatar]](/images/avatar/6fb993285d56e6927284ff9b11ac6851.jpg)
Membro desde: 29/08/2006 21:50:17
Mensagens: 523
Offline
|
Two_ wrote:
Triste mesmo. Final Fantasy já está uma *** nessa ultima versão.
Só acho que a chance de errar um ataque deve ser baseado em outros atributos, como por exemplo o "AGI" x "EVASION" do herói - inimigo.
Concordo com você sobre o Final Fantasy e sobre "errar o ataque também", porém pensei em deixar o mais simples possível
|
- Não respondo dúvida por PM!
- Blog -> Software development - Clojure, Ruby, Java, Test and little pumpkins
- Blog - Desenvolvimento de software - Java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2011 21:19:16
|
Two_
JavaGuru
Membro desde: 03/12/2009 18:01:53
Mensagens: 240
Localização: Belo Horizonte, MG
Offline
|
Uns 2 ou 3 anos atrás eu fiz um joguinho bem simples parecido com Final Fantasy Tactics, pena que foi em C/C++. Caso queira tenho o código em algum CD/DVD em algum local na minha casa hehehehe
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2011 21:40:08
|
Marky.Vasconcelos
Moderador
![[Avatar]](/images/avatar/04940fadf3702cbd84b7a48161037c4f.png)
Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline
|
Opa, amanhã eu penso melhor nisso. Gostei do desafio.
|
Facebook @MarkyHitchhiker +Mark WP: MarkyTech's
Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais
DefaultTableModel?! PARE! Não faça isso! Faça melhor!
Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)
Develop games is fantastic, with words you can make worlds!!!
DON'T PANIC!
MarkyHitchhiker's Blog! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2011 22:00:26
|
dreampeppers99
Virtual Machine Man
![[Avatar]](/images/avatar/6fb993285d56e6927284ff9b11ac6851.jpg)
Membro desde: 29/08/2006 21:50:17
Mensagens: 523
Offline
|
Two_ wrote:Uns 2 ou 3 anos atrás eu fiz um joguinho bem simples parecido com Final Fantasy Tactics, pena que foi em C/C++. Caso queira tenho o código em algum CD/DVD em algum local na minha casa hehehehe
Então isso vai facilitar você no desafio.
|
- Não respondo dúvida por PM!
- Blog -> Software development - Clojure, Ruby, Java, Test and little pumpkins
- Blog - Desenvolvimento de software - Java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2011 23:29:44
|
Daniels
JavaGuru
Membro desde: 25/07/2008 14:19:39
Mensagens: 218
Offline
|
Achei legal o desafio.
Fiz minha versão aqui, rapidamente. Não gostei de algumas coisas(os ifs da AttackFactory, por exemplo. Cheguei a usar o else porque um if embaixo do outro estava me dando agonia hehe). Usei TDD conforme descrito(sim, vi todos os testes falharem antes de começar a implementar), acho válido citar porque muita gente pode acabar fazendo o teste por último.
Enfim, abaixo minha solução:
Testes:
Implementação:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2011 23:42:32
|
Daniels
JavaGuru
Membro desde: 25/07/2008 14:19:39
Mensagens: 218
Offline
|
Pensando aqui, eu mudaria os testes para iterar por todo o intervalo e não testar apenas as extremidades. É um pouco mais custoso, mas é o mais correto.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/04/2011 07:15:06
|
dreampeppers99
Virtual Machine Man
![[Avatar]](/images/avatar/6fb993285d56e6927284ff9b11ac6851.jpg)
Membro desde: 29/08/2006 21:50:17
Mensagens: 523
Offline
|
Daniels wrote:Pensando aqui, eu mudaria os testes para iterar por todo o intervalo e não testar apenas as extremidades. É um pouco mais custoso, mas é o mais correto.
Gostei da sua solução.
Você, antes, falava que não gostou do uso dos if's para devolver a instância correta para o Attack.
Há muito tempo atrás eu estava tentando implementar um emulador de NES em java (JNesBR) e lá eu resolvi um problema parecido com esse de um modo "dispatch".
Dai quando fosse executar a instrução dado o opcode era simplesmente ir no array e pegar a instância relacionada com aquele código.
Claro no caso dos ataques, que contém intervalos, sei lá talvez um map e repetindo a chave para o valor daria certo e evitaria os if's. Mais uma vez sua solução foi muito boa.
|
- Não respondo dúvida por PM!
- Blog -> Software development - Clojure, Ruby, Java, Test and little pumpkins
- Blog - Desenvolvimento de software - Java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/04/2011 08:29:35
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Eu criaria um mock do gerador de números aleatórios, que só gerasse os números que eu quisesse. Como vc está testando o sistema de ataque, e não a classe random, isso tornaria os testes extremamente simples. Você poderia gerar números sequenciais e ver o que aconteceu em cada caso, garantindo assim o seu sistema com 100% de certeza. Mas claro, para facilitar seria bom alterar um pouquinho as classes para que os randoms pudessem ser fornecidos, ou fossem criados por injeção de dependências. Caso contrário, vc seria obrigado a altera-los por reflexão.
This message was edited 1 time. Last update was at 27/04/2011 08:30:15
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/04/2011 08:41:24
|
dreampeppers99
Virtual Machine Man
![[Avatar]](/images/avatar/6fb993285d56e6927284ff9b11ac6851.jpg)
Membro desde: 29/08/2006 21:50:17
Mensagens: 523
Offline
|
ViniGodoy wrote:Eu criaria um mock do gerador de números aleatórios, que só gerasse os números que eu quisesse. Como vc está testando o sistema de ataque, e não a classe random, isso tornaria os testes extremamente simples. Você poderia gerar números sequenciais e ver o que aconteceu em cada caso, garantindo assim o seu sistema com 100% de certeza.
Mas claro, para facilitar seria bom alterar um pouquinho as classes para que os randoms pudessem ser fornecidos, ou fossem criados por injeção de dependências. Caso contrário, vc seria obrigado a altera-los por reflexão.
Eu (tentei) fiz foi isso mesmo o mock para o fator sorte!
|
- Não respondo dúvida por PM!
- Blog -> Software development - Clojure, Ruby, Java, Test and little pumpkins
- Blog - Desenvolvimento de software - Java |
|
|
 |
|
|