私はゲームの2次元世界のタイルを表すTile
を持っています。タイルは、その4辺の任意の数に壁を持つことができます。現代のOO Cのような言語でこれを行う良い方法は?
interface Tile {
boolean isWallAtTop();
boolean isWallAtRight();
boolean isWallAtLeft();
boolean isWallAtBottom();
}
どこか私も16枚、それぞれの可能なタイル壁の設定のための1つを持っている:私は、現時点ではこのようなものを持っています。このような何か:
static final Image WALLS_ALL_AROUND = ...
static final Image WALL_ON_TOP_AND_RIGHT = ...
/* etc etc all 16 possibilities */
私は回避が
if (tile.isWallTop && tile.isWallRight
&& !tile.isWallBottom && !tile.isWallLeft) {
return WALL_ON_TOP_AND_RIGHT;
}
のような可能性を通過するの拷問は誰をいているしたいのですがどう
static Image getWallImage(Tile tile)
を書きたいですこれを行うためのより控えめな方法を知っていますか?
OMG!私は、if(tile.Walls&(WALL_LEFT | WALL_RIGHT))のような手動テストではなく、メソッド(またはC#のプロパティ)を使用することを強くお勧めします。 – jrharshath
ビットマスクはIMOの間違った解決策です(一般的には醜いハックです)。OPのコードは純粋に手続き的なもので、彼はOOソリューションを求めています。 –
ビットマスクはかなりです素敵なハックですが、静的メソッド(JITはインラインになります)として必要な述語を記述してください。 – plinth