Estou modelando um jogo (Ludo) em Java e me deparei com uma duvida de OO:
O cenário é o seguinte: tenho basicamente peões, jogadores e um tabuleiro (além de outros detalhes)
Os peões são movimentados no tabuleiro linearmente.
As regras de movimentação decidi colocar na classe tabuleiro, que vai ou não autorizar um determinado movimento.
O jogador possui um array com seus peoes.
A dúvida é: meu peão deve saber quem é seu dono e a posição em que se encontra no momento, ou isso é responsabilidade do jogador e tabuleiro, respectivamente??
Tipo, é correto p. ex. ter no peão os atributos owner e pos, ou estes deveriam ser métodos da classe que contém o peão??
Na minha concepção, os peões devem ter a sua posição, mas o jogador deve ter uma lista ou array dos peões, e os peões não precisam saber quem é o seu “owner”
raphaaugusto
Certo. O jogador já tem seu array de peoes.
Também pensei incialmente que o peao nao precisa saber quem é seu dono.
Mas depois me deparei com um impasse: tenho um método que verifica se determinado movimento pode ser realizado (nao fere nenhuma regra).
Aí chega um momento que algo parecido com isto:
O objetivo é, partindo do princípio que estou acessando uma pos de listaPeoes que contém um outro peão (peao.getPosAtual()+qtdCasasMover), quero descobrir se este peão que ocupa a casa de destino é do mesmo dono do peao passado como parametro(peao.getOwner).
Se o peão não soubesse quem é seu dono, como eu faria para obter o dono do peão e fazer a comparação? Teria que fazer um método na classe Tabuleiro para dado um peao, ele me retornar seu dono, com base na lista de jogadores que a classe Tabuleiro possui?
Obrigado.
jgbt
Pensando rapidamente, eu trocaria o owner por algo que identificasse o grupo do peão. Pelo que me lembro desse jogo,
os peões são separados por cor. Então se eles são do mesmo grupo, automaticamente são do mesmo owner(que na real vc nem precisa saber).
[]s
MrSpaceman
Cara, mover o peão é um método do próprio peão.
Você pode colocar um método na classe Tabuleiro que vai te dizer se o movimento pode acontecer.
Nota: não coloquei os métodos de acesso get e set na definição das classes. Isso você faz na programação.
Acho que se você se basear por essa modelagem vai conseguir jogar seu Ludo sem problemas.
Abs
jgbt
MrSpaceman:
Cara, mover o peão é um método do próprio peão.
Você pode colocar um método na classe Tabuleiro que vai te dizer se o movimento pode acontecer.
Nota: não coloquei os métodos de acesso get e set na definição das classes. Isso você faz na programação.
Acho que se você se basear por essa modelagem vai conseguir jogar seu Ludo sem problemas.
Abs
Não, mover não é metodo do peão, simplesmente pq o peão não se move sozinho. Quem move ele é o jogador. O jogador tem a responsabilidade de mover um determinado peão para a nova posição.
O que interessa é ele atualizar sua posição durante o movimento.
Não é o tabuleiro que sabe se um movimento pode acontecer, são as regras.
[]´s
raphaaugusto
Umm,legal. Já tava arrancando meus cabelos aqui…rs
Mas então, devo ter uma classe responsável por analisar um movimento e dizer se ele é possível. Certo?
jgbt
raphaaugusto:
Umm,legal. Já tava arrancando meus cabelos aqui…rs
Mas então, devo ter uma classe responsável por analisar um movimento e dizer se ele é possível. Certo?
Bom,
quando se modelo software OO, a ideia é realizar abstrações do mundo real. Partindo disso vc deve definir os objetos e quais suas responsabilidades.
Vc deve perguntar:
Quem é responsavel pelo que.
No jogo real não é o tabuleiro que te diz se um lance é valido ou não, por exemplo.
Claro que no decorrer do desenvolvimento vc pode sentir que certas abstrações iniciais não são necessarias ou que novas tem que ser criadas.
Mas o mais importante é sempre pensar nas responsabilidades. So isso ja vai te ajudar bastante.