Ho Tile
s che rappresentano le tessere nel mondo bidimensionale di un gioco. Le tessere possono avere muri su qualsiasi numero dei loro 4 lati. Ho qualcosa di simile al momento:Bel modo di farlo nel moderno linguaggio OO C-like?
interface Tile {
boolean isWallAtTop();
boolean isWallAtRight();
boolean isWallAtLeft();
boolean isWallAtBottom();
}
Da qualche altra parte ho anche 16 immagini, una per ogni configurazione rivestimento parete possibile. Qualcosa di simile a questo:
static final Image WALLS_ALL_AROUND = ...
static final Image WALL_ON_TOP_AND_RIGHT = ...
/* etc etc all 16 possibilities */
Voglio scrivere un
static Image getWallImage(Tile tile)
Quello che mi piacerebbe evitare di è il supplizio di passare attraverso le possibilità come
if (tile.isWallTop && tile.isWallRight
&& !tile.isWallBottom && !tile.isWallLeft) {
return WALL_ON_TOP_AND_RIGHT;
}
Qualcuno conosci un modo carino per fare questo?
OMG! Suggerisco vivamente di utilizzare i metodi (o le proprietà in C#), non i test manuali come "if (tile.Walls e (WALL_LEFT | WALL_RIGHT).) Il metodo manuale aggiunge dettagli non necessari al codice. I dettagli devono essere sempre estratti. Naturalmente questo commento non è contro il metodo a 4 bit. – jrharshath
Le maschere di bit sono IMO la soluzione sbagliata qui (e in genere un brutto attacco) .Il codice dell'OP è puramente procedurale e ha chiesto una soluzione OO –
bel trucco: usali, ma scrivi i predicati che vuoi come metodi statici (che JIT vuole, saranno in linea) – plinth