私は、プレイヤーがFreeとTakenの 2 つの状態になることができるセルを使用した単純なゲームを書いています。
interface Cell {
int posX();
int posY();
}
abstract class BaseCell implements Cell {
private int x;
private int y;
public int posX() {
return x;
}
public int posY() {
return y;
}
...
}
class FreeCell extends BaseCell {
}
class TakenCell extends BaseCell {
private Player owningPlayer
public Player owner() {
return owningPlayer;
}
}
各ターンで、すべてのセルを検査して、以下の方法で次のセル状態を計算する必要があります
// method in class Cell
public Cell nextState(...) {...}
Set
まだ取得されていないすべてのセルを( で) 収集します。Cell
セルが Free から Taken に、またはその逆に変化する可能性があるため、上記のメソッドは戻ります。私はそれらを収集するために以下のようなことをしています:
for (Cell cell : cells) {
Cell next = cell.futureState(...);
if(next instanceof FreeCell) {
freeCells.add(currentCell);
}
...
}
それは醜いです。そのようなインスタンスのハックを回避するためにそれを行う方法は? 別のハックについて話しているわけではありませんが、適切な OOP ソリューションを見つけたいと思います。