0
votes

Comment écrivez-vous une méthode qui a la même mise en œuvre pour plusieurs types d'objets (Java)?

J'écris un jeu Pokémon (actuellement) à la chaîne à Java. Avec la structure que j'ai, il existe actuellement 2 types d'objets que je souhaite faire des correspondances pour: pokemon et mouvements. La méthode que je veux écrire (IsstrongagaintSt ()) serait la même pour les deux. Par exemple, un pokémon de type eau et un mouvement de type eau sont forts contre le pokémon de type incendie, mais ces comparaisons peuvent impliquer des choses différentes basées sur le contexte. Les deux classes ont des méthodes implémentées différemment.

L'idée que j'avais était d'utiliser une interface implémente une méthode IsstrongagainSt () par défaut et déclare une méthode abstraite isType (). Je penserais que depuis n'importe quelle classe qui implémente cette interface devrait mettre en œuvre ISTYPE (), je pourrais l'utiliser dans mon Isstrongagaint (), mais je ne peux pas. Y a-t-il un moyen autour de cela ou une meilleure suggestion compte tenu de mon problème? P>

public interface TypeMatch<T> {
    boolean isType(Type t);
    default boolean isStrongAgainst(Pokemon opponent){
        if(T.isType(Type.NORMAL)){
            return false;
        }
        if(T.isType(Type.WATER)){
            return opponent.isType(Type.FIRE) ||
                    opponent.isType(Type.ROCK) ||
                    opponent.isType(Type.GROUND);
        } //etc...


0 commentaires

3 Réponses :


0
votes

En ce qui concerne la compréhension, votre jeu contient différents comportements en fonction du type de pokemon. Je vous recommande vivement d'utiliser modèle de conception de stratégie .


1 commentaires

Bonjour Orkun. Cela aurait pu être un commentaire. Évitez de donner des réponses à une ligne car cela n'aide pas beaucoup.



0
votes

Ce que je pense, c'est que la fonction isstrongagainst () peut être plus affinée. Il serait préférable de faire une implémentation de istype () de manière à renvoyer vrai si l'adversaire est plus faible que nous.

Ceci peut ensuite être utilisé dans la fonction isstrongagaint () directement dans son état de retour.

meilleur

PS: Je suis en classe en ce moment et je vais donner une réponse plus détaillée après que je suis fini avec elle, jusqu'à ce que possible, essayez d'avoir une idée de ce que j'ai dit. < / p>


0 commentaires

0
votes

Vous pouvez:

  1. Définissez Pokemon comme une classe abstraite à implémenter Typematch
  2. Move Isstrongagaint (Pokemon adversaire) de Typematch à Pokemon.
  3. Toute classe qui prolonge Pokemon a la même mise en œuvre de IsstrongagaintSt (Pokemon Advonent)

0 commentaires