jju*_*uma 5 c# c++ java data-structures
我有Tile
一个代表游戏二维世界中瓷砖的东西.瓷砖的4面可以有任意数量的墙.我现在有这样的事情:
interface Tile {
boolean isWallAtTop();
boolean isWallAtRight();
boolean isWallAtLeft();
boolean isWallAtBottom();
}
Run Code Online (Sandbox Code Playgroud)
在其他地方我也有16个图像,每个图像可用于每个可能的图块墙配置.像这样的东西:
static final Image WALLS_ALL_AROUND = ...
static final Image WALL_ON_TOP_AND_RIGHT = ...
/* etc etc all 16 possibilities */
Run Code Online (Sandbox Code Playgroud)
我想写一个
static Image getWallImage(Tile tile)
Run Code Online (Sandbox Code Playgroud)
我想要避免的是经历诸如此类可能性的折磨
if (tile.isWallTop && tile.isWallRight
&& !tile.isWallBottom && !tile.isWallLeft) {
return WALL_ON_TOP_AND_RIGHT;
}
Run Code Online (Sandbox Code Playgroud)
有谁知道这样做的可行方法?
Ada*_*ght 15
去小工具位掩码.每个瓷砖使用4位掩模,说明哪一面有墙.
A B C D
Run Code Online (Sandbox Code Playgroud)
位A表示顶部的墙,B表示右侧,C表示底部,D表示左侧.定义常量以帮助您在逻辑上与蒙版相交,即
if (tile.Walls & (WALL_LEFT | WALL_RIGHT))
// Do stuff
Run Code Online (Sandbox Code Playgroud)
为了找到图像,这个4位掩码产生16种可能性.使用它作为图像"数组"的索引,这样您就可以毫不费力地直接找到正确的图像.