Come modellare gli oggetti in un negozio (come LoL, Dota, ...) in modo MVC?

1

In un gioco 2D, edifici possono essere aggiornati con moduli ; Questi moduli possono essere acquistati in un negozio .

Il negozio è rappresentato da una griglia stereotipata di icone, ciascuna icona rappresenta un modulo acquistabile. Quando il mouse passa su un'icona, il nome della descrizione del modulo associato appare in un popup.

Attualmente, i moduli sono oggetti modello che estendono una classe astratta Module con i seguenti dati:

  • Il nome del modulo
  • Una descrizione di ciò che fa al tuo edificio
  • L'icona utilizzata per visualizzare il modulo nella griglia negozio
  • Inoltre, alcuni metodi di f(building) -like per "modulizzare" effettivamente l'edificio ...

All'inizio del gioco, shop viene fornito con un elenco di moduli . Quando si applica un modulo a un edificio i metodi f(building) vengono richiamati sul modulo acquistato. Pertanto, anche senza utilizzare il pattern Singleton, ogni classe *Module viene creata solo una volta.

Sono consapevole che questo design non è davvero ottimale:

  • In primo luogo, un modulo , un modello oggetto, incorpora la propria icona, una vista rappresentazione.
  • E ancora più importante: un modulo è senza stato perché lo stesso oggetto può essere applicato su diversi edifici (possibilmente di giocatori diversi); per essere stato, un modulo dovrebbe indossare una mappa [building] => data ... Non so perché, ma ho un brutto presentimento di questa soluzione ...

Tempo delle domande:

  • La [building] => data mappa efficace una soluzione non valida?
  • Se è così, qual è il modo migliore per risolvere la trappola dello "stato di gravità" che sto incontrando?
  • Sussidiario: anche, sarebbe più compatibile con MVC se ogni oggetto del modello non dovesse indossare un'immagine ...
posta Odepax 07.08.2017 - 11:42
fonte

1 risposta

1

Semplice.

Per prima cosa, hai l'interfaccia IModuleDefinition . Lo scopo principale di questa interfaccia è quello di identificare un modulo, possibilmente avendo un identificatore univoco per un modulo. Avrà metodi come CreateView e CreateModule . Questi creeranno istanze concrete che verranno utilizzate per visualizzare le informazioni sul modulo ( IModuleView ) e implementare il comportamento del modulo ( IModule ). Ciò significa anche che è possibile creare un numero qualsiasi di istanze per ciascun tipo di modulo, pertanto lo stato può trovarsi all'interno dell'istanza del modulo.

    
risposta data 07.08.2017 - 16:37
fonte

Leggi altre domande sui tag