箱入り娘データ構造例

enum {
    // ピース種別
    BLANK = 0,
    P2x2,
    P2x1,       // width = 2, height = 1
    P1x2,
    P1x1,
    MASK = 0x0f,
    F = 0x10,            // 代表点意外の場合のフラグ
    P2x2F = P2x2|F,
    P2x1F = P2x1|F,
    P1x2F = P1x2|F,
    WALL = 255,
    // 盤面サイズ
    BD_WIDTH = 4,
    BD_HEIGHT = 5,
    ARY_WIDTH = (BD_WIDTH+1),
    ARY_HEIGHT = (BD_HEIGHT+2),
    ARY_SIZE = (ARY_WIDTH*ARY_HEIGHT),

};
class Board {
    .....
private:
    byte     m_board[ARY_SIZE];};
  • 2次元盤面を番人付き1次元配列で表す
  • 1×1 以外は左上のピース位置を代表ピースとし、それ以外は非代表ピースフラグを立てておく