certo… vamos setar essa conversa como “Public” então uahuahuah
eu faria da seguinte maneira… a parte de itens…
parece complicado… mas imagine a gama de possibilidades…
(vou explicar primeiro e deixar as classes no final no post)
digamos que vc use o metodo convencional…
criar um item chamado Espada…
que terá pelo menos umas 10 booleans, para dizer se é Equipavel, combinavel, mastigavel, causa dano de fogo, anti-mortosvivos e por ai vai… coisas normais em um jogo de RPG
se vc diz que todas essas Booleans vem de uma classe Item… então todos os itens ocupam na memoria essas 10 variaveis boolean, 10 variaveis int… que inclui o dano, durabilidade, defesa, bonus Força, bonus Agilidade, bonus Magia… e por ai vai…
ou seja, todo Item acabará tendo obrigatoriamente q ser setado todas essas variaveis… oq é muito chato e improdutivo
supondo q vc tenha uns 100 itens carregados pelo seu personagem, então vc estaria usando quase 500 Ints, booleans e por ai vai, em um jogo de grande porte q utilizaria pelo menos 100x mais, isso seria um belo peso extra na sua memoria, podendo até dar um OutOfMemory se chegar ao extremo…
o modo via Heranças, Interfaces
(seguindo o exeplo que fiz abaixo)
existe uma classe chamada Item, ela é DEUS, todos os itens dependem dela, e ela só possui oq é exatamente necessario existir em cada item. Nome e Descrição (pode adicionar mais se sentir necessidade)…
então crio o Item Pedra, como vc disse, ela é um item Combinavel, utilizo o “implements Combinavel”… se ela não tiver nada demais alem de ser combinavel… veja que na classe dela vc não precisa setar mais nada, alem do Nome e Descrição…
faremos agora uma Arma… criamos a Espada…
Armas vão ser coisas comuns no jogo, então para generalizar criamos a Abstract class Arma que Extende a classe ITEM já que todos itens existentes precisam de Nome e Descrição…
e ela Implementa EQUIPAVEL, já que toda arma por natureza deve ser equipavel…
ela possui inicialmente 2 coisas (vc cria mais depois)
1- o Dano da arma…
2- e a posição do corpo onde o item será equipado, considero que é a posição da mão Direita é 0… (podemos dizer que 1 é escudo, 2 capacete e por ai vai)… como a ARMA sempre será na mão direita (normalmente, e não considerando equipar 2 armas) podemos definir que ARMA carrega um atributo FINAL setado em 0…
feito a classe Arma, faremos a Espada…
Espada extends Arma (já que Espada é uma arma que por sua vez extende um Item… então toda Espada é um Item tb)
e ela alem de possuir o setNome e setDesc…
terá o especial que apenas as Armas possuem… o setDano…
(crie metodos a vontade para desenvolver o seu jogo)
desculpe o tamanho do post… mas é complicado simplificar… uahuahuah
duvidas, pergunte =)
//Interfaces Equipavel e Combinavel
public interface Equipavel {}
public interface Combinavel {}
// Classe Espada
[code]public class Espada extends Arma {
public Espada() {
setNome("Espada");
setDano(10);
setDesc("Arma simples");
}
}
[/code]
//Classe Pedra
[code]public class Pedra extends Item implements Combinavel{
public Pedra() {
setNome("Pedra");
setDesc("Pequena Pedra");
}
}[/code]
//Classe Abstract Item
[code]public abstract class Item {
private String nome;
private String desc;
public final String getDesc() {
return desc;
}
public final void setDesc(String desc) {
this.desc = desc;
}
public final String getNome() {
return nome;
}
public final void setNome(String nome) {
this.nome = nome;
}
}[/code]
//Classe Abstract Arma
[code]public abstract class Arma extends Item implements Equipavel {
// Supondo que a posicao de equipamento onde vc poem a Arma é 0
// 1 para Escudo, 2 para Capacete e assim por diante
final int posicaoCorpo = 0;
private int dano;
public final int getDano(){
return dano;
}
public final void setDano(int dano){
this.dano = dano;
}
public final int getPosicaoCorpo(){
return posicaoCorpo;
}
}[/code]