Tôi có Tile
s đại diện cho các ô trong thế giới 2 chiều của trò chơi. Các viên gạch có thể có các bức tường trên bất kỳ số nào của 4 mặt của chúng. Tôi có một cái gì đó như thế này vào lúc này:Cách hay để thực hiện điều này bằng ngôn ngữ OO C hiện đại?
interface Tile {
boolean isWallAtTop();
boolean isWallAtRight();
boolean isWallAtLeft();
boolean isWallAtBottom();
}
Một nơi khác tôi cũng có 16 hình ảnh, một cho mỗi cấu hình tường gạch có thể. Một cái gì đó như thế này:
static final Image WALLS_ALL_AROUND = ...
static final Image WALL_ON_TOP_AND_RIGHT = ...
/* etc etc all 16 possibilities */
Tôi muốn viết một
static Image getWallImage(Tile tile)
Những gì tôi muốn tránh là sự tra tấn đi qua các khả năng như
if (tile.isWallTop && tile.isWallRight
&& !tile.isWallBottom && !tile.isWallLeft) {
return WALL_ON_TOP_AND_RIGHT;
}
Có ai biết một cách dễ thương hơn để làm điều này?
OMG! Tôi đề nghị rằng các phương thức (hoặc Properties trong C#) được sử dụng, không phải các kiểm tra thủ công như "if (tile.Walls & (WALL_LEFT | WALL_RIGHT)). Phương pháp thủ công thêm các chi tiết không cần thiết vào mã của bạn. Tất nhiên, bình luận này không chống lại phương pháp 4-bit – jrharshath
Mặt nạ bit là IMO là giải pháp sai ở đây (và thường là một hack xấu xí) Mã của OP hoàn toàn là thủ tục và anh ta yêu cầu một giải pháp OO –
Bitmask là một sử dụng chúng, nhưng viết các biến vị ngữ mà bạn muốn như các phương thức tĩnh (mà JIT sẵn sàng, sẽ nội tuyến) – plinth