Skip to content

Instantly share code, notes, and snippets.

@you21979
Last active August 14, 2016 03:27
Show Gist options
  • Save you21979/ba84967e9c51b95d8dc2 to your computer and use it in GitHub Desktop.
Save you21979/ba84967e9c51b95d8dc2 to your computer and use it in GitHub Desktop.

ビット演算

ビット演算を使うと集合の判定が簡単にできる。 ただしjavascriptにおいて型サイズがint32に変換されているためそれを超える場合には使えない(0-31まで)。

const JOB = Object.freeze({
    NONE : 0,
    FIGHTER : 1,
    MAGE : 2,
    PRIEST : 3,
    MONK : 4,
    KNIGHT : 5,
    SUMMONER : 6,
});

const JOB_FLAGS = Object.freeze(Object.keys(JOB)
    .map((key)=>[key, 1 << JOB[key]])
    .reduce((r, tuple)=>{ r[tuple[0]] = tuple[1]; return r; }, {})
);

const JOB_GROUP = Object.freeze({
    TANK : JOB_FLAGS.FIGHTER | JOB_FLAGS.MONK | JOB_FLAGS.KNIGHT,
    CASTER : JOB_FLAGS.MAGE | JOB_FLAGS.PRIEST | JOB_FLAGS.SUMMONER,
    HEALER : JOB_FLAGS.PRIEST,
    EXJOB : JOB_FLAGS.KNIGHT | JOB_FLAGS.SUMMONER,
})


let job_id = JOB.FIGHTER;
if( 1<<job_id & JOB_GROUP.TANK){
    console.log("tank job")
}else{
    console.log("not tank job")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment