0
votes

Quelle est la meilleure solution oop de mon problème?

Pour un bon moment, j'essaie de mieux structurer mon code et de vous concentrer sur l'utilisation de concepts de POOP de plus en plus dans mon code.

J'ai une question simple sur le scénario suivant et comment il est résolu le meilleur Dans la vue du modèle de conception.

J'ai une partie, dans laquelle un joueur peut voler un magasin. Le magasin est représenté par l'objet et le vol est représenté par le Robevent . Et j'ai un objet objet qui gère le frai des titres, lorsque quelqu'un tente de voler un magasin.

Mon problème central est que j'ai le sentiment que l'objet Robevent a trop d'informations et de fonctionnalités décrites ci-dessous et que je pourrais diviser les informations et les fonctionnalités dans plus d'objets et à Ceci j'ai besoin de l'aide de vous! xxx

Mon plus gros problème est que la méthode logique () est vraiment grande. C'est une méthode qui se fait boucler chaque seconde par la super classe.

Plus de détails:

  • Le Robevent doit savoir s'il s'agit actuellement de titres de frai et de faire des choses spécifiques,
  • Il faut vérifier si tous ont été générés et font des choses spécifiques,
  • Il faut vérifier si le joueur s'est enfui avant de finir et de faire des choses spécifiques,
  • Il doit vérifier si le joueur a tué tous et faire des choses spécifiques, etc.

    La plupart gênants consiste à garder une trace des titres générés, car s'il s'en va, ils doivent tous être méprisés. J'ai le sentiment que ceci est trop d'informations sur cet objet et que je pouvais par exemple diviser le suivi des titres générés dans un objet séparé et faire quelque chose comme tracker.decwn lorsque le Radevent a un état spécifique.

    EDIT: le code est en jut une simplification vraiment du code réel.


0 commentaires

3 Réponses :


0
votes

En termes de structure OO, les classes ont des domaines (leurs propriétés) et un comportement (leurs méthodes). Je regarderais à Robevent comme un comportement de magasin, c'est-à-dire le déplacer vers une méthode au lieu d'être une classe.

pour votre méthode logique () devient trop longue, c'est bien que vous reconnaissiez que c'est trop long, et c'est généralement une indication. que ça fait trop. L'approche la plus simple consiste à la diviser en méthodes plus petites que chacun fait une chose spécifique et s'appelle à son tour. Par exemple, une boucle de jeu typique pourrait ressembler à quelque chose comme: p>

public void gameLoop(){
    while(this.gameRunning){
        this.checkUserInputs();
        this.updateGameState();
        this.updateGameDisplay();
    }
}


0 commentaires

1
votes

Le Robevent doit savoir s'il s'agit actuellement de titres de frai et de faire des choses spécifiques, - il doit vérifier si tous ont été engendrés et faire des choses spécifiques, - il doit vérifier si le joueur s'est enfui avant de finir et de faire spécifiquement choses, - il doit vérifier si le joueur a tué tous et faire des choses spécifiques, etc.

Cela ressemble à la modèle d'état qui découle logique de l'état.

Mise en œuvre rapide

Robevent doit suivre un robste . Vous avez plusieurs robste comme startspansecuritisteState , ALLSECURITISPaRState , playerrunawaystate et plus .. xxx

Chaque robste connaît le prochain robste et définissez-le via le SETROBSTATE de de Robevent . xxx

après toutes les modifications de la méthode logique peut ressembler à: xxx


J'espère que ça vous aide! Si ce n'est pas cette fois peut-être à l'avenir!
Amusez-vous avec votre jeu:]


1 commentaires

Merci, j'ai utilisé ce modèle et ça a bien fonctionné!



0
votes

Avec d'autres réponses, je envisagerais également de modéliser Robevent comme un événement réel (Je ne sais pas Java Dev, je ne sais pas comment mettre en œuvre ceux de Java). Lorsque Shop obtient volé, il envoie autour Robevent . L'objet SPAWner peut abonner à ces événements et sur chaque Robevent Envoyer les titres. Ensuite, si le voleur s'éloigne, Shop Envoie RobberRunawayevent Quels sont tous les titres (ou Despwnner ) sont abonnés à.


0 commentaires