Tengo Tile
s que representan las fichas del mundo bidimensional de un juego. Las fichas pueden tener paredes en cualquier número de sus 4 lados. Tengo algo como esto en la actualidad¿Una buena manera de hacer esto en el moderno lenguaje OO C-like?
interface Tile {
boolean isWallAtTop();
boolean isWallAtRight();
boolean isWallAtLeft();
boolean isWallAtBottom();
}
En algún otro lugar que también tiene 16 imágenes, una para cada configuración de la pared del azulejo sea posible. Algo como esto:
static final Image WALLS_ALL_AROUND = ...
static final Image WALL_ON_TOP_AND_RIGHT = ...
/* etc etc all 16 possibilities */
Quiero escribir un
static Image getWallImage(Tile tile)
Lo que me gustaría evitar es la tortura de pasar por las posibilidades como
if (tile.isWallTop && tile.isWallRight
&& !tile.isWallBottom && !tile.isWallLeft) {
return WALL_ON_TOP_AND_RIGHT;
}
¿Hay alguien ¿sabes una manera más linda de hacer esto?
OMG! Sugiero encarecidamente que se usen métodos (o propiedades en C#), no pruebas manuales como "if (tile.Walls & (WALL_LEFT | WALL_RIGHT)). El método manual agrega detalles innecesarios a su código. Los detalles siempre se deben abstraer. Por supuesto, este comentario no va en contra del método de 4 bits. – jrharshath
Las máscaras de bits son la solución incorrecta aquí (y en general un hack feo). El código del OP es puramente de procedimiento y pidió una solución de OO. –
Las máscaras de bits son bastante encantador, utilícelos, pero escriba los predicados que desee como métodos estáticos (lo que JIT quiere, se alineará). – plinth