Nota : sono consapevole della scarsa formulazione del titolo, ma non sono riuscito a trovare uno migliore. Se qualcuno ha un'idea migliore, modifica il titolo.
Sto provando a ricreare un gioco di carte, ma ho difficoltà a risolvere un problema. Ogni carta nel gioco ha un color
(enum) e rank
(enum). Alcune carte hanno alcune abilità speciali che richiedono dati aggiuntivi. Queste carte hanno sempre un colore speciale dato solo alle carte con abilità speciali. Il Game
ha uno stack a cui vengono aggiunte carte giocate tramite un metodo void playCard(Card)
.
Un esempio di abilità speciale sta cambiando il colore della carta in cima alla pila. Il nuovo colore è totalmente a discrezione del giocatore. Il problema è che questo nuovo colore deve essere deciso quando viene giocata la carta e prima che il colore della carta speciale sia solo SPECIAL
. Ma come faccio a passare i nuovi dati di colore in un modo carino (vale a dire, quindi non ho bisogno di usare instanceof
ed estrarre i dati, ma ottenerli come card.getColor()
)? Idealmente mi piacerebbe che fosse una carta speciale prima e dopo averla giocata per camuffarsi come una normale carta (o farla sembrare come). Se possibile, vorrei comunque poter recuperare la carta speciale originale.
Ho pensato di risolvere questo creando un FakeCard
e aggiungendo un metodo a SpecialCard
per generare FakeCard
e passare i dati richiesti a quel metodo, ma temo un accoppiamento aggiuntivo che si verificherebbe come speciale differente le carte richiedono diversi dati aggiuntivi e non vogliono violare il principio Open / Closed (usare questo approccio mi richiederebbe di farlo). Non riesco a pensare a nient'altro però. Hai qualche suggerimento su come affrontare questo problema?