Sto cercando di creare un motore di gioco flessibile basato su tessere per creare tutti i tipi di giochi di puzzle non in tempo reale, proprio come Bejeweled, Civilization, Sokoban e così via.
Il primo approccio che ho avuto è stato quello di avere una matrice 2D di oggetti Tile, e quindi avere classi ereditate da Tile che rappresentavano gli oggetti di gioco. Sfortunatamente in questo modo non ho potuto impilare più elementi di gioco sulla stessa tessera senza avere un array 3D.
Poi ho fatto qualcosa di diverso: avevo ancora l'array 2D di oggetti Tile, ma ogni oggetto Tile conteneva un Elenco in cui ho inserito e entità diverse. Funzionava bene fino a 20 minuti fa, quando mi sono reso conto che è troppo costoso fare molte cose, guarda questo esempio:
Ho un'entità Wall. Ogni aggiornamento devo controllare le 8 tessere adiacenti, quindi controllare tutte le entità nell'elenco delle tessere, controllare se una di quelle entità è un muro, quindi disegnare lo sprite corretto. (Questo viene fatto per disegnare muri uno accanto all'altro senza soluzione di continuità)
L'unica soluzione che vedo ora è avere un array 3D, con molti livelli, che potrebbe adattarsi ad ogni situazione. Ma in questo modo non posso impilare due entità che condividono lo stesso livello sulla stessa tessera. Ogni volta che voglio farlo, devo creare un nuovo livello.
C'è una soluzione migliore? Cosa faresti?