Design: Bridge Game [duplicato]

0

Sto facendo delle revisioni a una versione di console del bridge del contratto che ho realizzato in Java. La fonte può essere trovata qui: Bridge

Quindi la maggior parte del codice è terribile e ho cercato di apportare miglioramenti laddove possibile. Il gioco funziona ma il design è pessimo.

Attualmente ha tre classi: Carta ponte BridgeConsole

Tutto il codice relativo al gioco si trova in BridgeConsole ma mi è stato detto che è troppo lungo. Quindi sto pensando di separare parte del codice lì. Mi viene in mente una classe GameState (ribattezzando BridgeConsole to Main) ma non sono sicuro di come implementarla. Ho visto esempi online in cui hanno metodi come init (), cleanup (), draw (), ecc. Ma non sono sicuro di come implementarlo correttamente nel mio gioco. Non sono nemmeno sicuro di dove andrebbero i metodi per eseguire la logica AI. Un'altra possibilità è invece di usare ArrayList per tenere la mano dei giocatori, basta creare una classe di mano. Rimuovendo anche tutti i metodi statici e le variabili che ho nella classe BridgeConsole.

Sto cercando alcuni suggerimenti o suggerimenti sul buon design per questo particolare progetto. Non sono soddisfatto dal fatto di essere in grado di eseguire il gioco, vorrei che il codice fosse migliore quindi qualsiasi aiuto sarebbe apprezzato.

    
posta n0tion 27.05.2015 - 06:43
fonte

1 risposta

0

Pur essendo un oggetto divino, se senti sempre che il codice che stai scrivendo è adatto per il ruolo di BridgeConsole, allora il problema è con il nome! Rinominare qualcosa di più specifico e separare gli altri compiti nelle rispettive classi. È più facile a dirsi che a farsi, quindi forse sarebbe semplicemente più semplice riscrivere la lezione da zero. Prima di farlo, tieni sicuramente un backup da qualche parte a cui puoi fare riferimento!

Rimuovere la classe e quindi iniziare a creare le classi per eseguire le attività eseguite da BridgeConsole, ma concentrarsi sulle singole attività. Alcune idee sui componenti includono:

  1. Una classe EventBus che gestisce solo la notifica agli ascoltatori di eventi. In questo modo, puoi disaccoppiare molte delle cose che BridgeConsole fa e ti permetterebbe di suddividerlo facilmente in singoli componenti.
  2. Un altro trucco che puoi usare è creare una classe che disegna o è responsabile della stampa dello stato sullo schermo. Non dovrebbe contenere alcuna logica diversa da quella richiesta per mostrare lo stato corrente sullo schermo.
  3. Una classe di stato del gioco (probabilmente la più simile alla tua attuale classe BridgeConsole) che fornisce solo informazioni relative allo stato del gioco.
  4. Se la classe di stato del gioco è troppo grande, considera la possibilità di creare anche una classe di stato Board che tenga traccia delle mani, delle carte giocate, di questo genere di cose. Lo stato del gioco può invece concentrarsi sullo stato generale del gioco (ad esempio, è iniziato il gioco? Chi sono i giocatori? Quanti punti ha ciascun giocatore? Chi ha vinto?).

Se hai applicato tutte queste modifiche e ti trovi ancora in una classe che fa troppo, elenca tutte le cose che fa per te, e considera strongmente la divisione della classe in componenti che eseguono ogni singolo elemento in quella lista, proprio come hai fatto per BridgeConsole.

E, se ti ritrovi a tirare fuori i capelli, pensa semplicemente a riscrivere l'intero programma. Non dovresti prenderti tutto il tempo perché lo hai già scritto, in più hai un codice funzionante da avviare. Ti insegnerà anche una preziosa lezione su come strutturare meglio il tuo codice. Il fatto che ti rendi conto del problema con BridgeConsole significa che sei cresciuto come sviluppatore da quando lo hai creato per la prima volta, quindi il tuo secondo tentativo dovrebbe sicuramente risolvere molti dei problemi.

Spero che questo aiuti. Se incontri delle difficoltà, per favore menzionale nei commenti e cercherò di aiutarti.

    
risposta data 27.05.2015 - 10:43
fonte

Leggi altre domande sui tag