「グループ番号とマスクビット・カテゴリビット」の編集履歴(バックアップ)一覧に戻る

グループ番号とマスクビット・カテゴリビット - (2014/08/03 (日) 02:09:49) のソース

・グループ番号について
 0:自身のマスクと、他のキャラクタのカテゴリで判定する。
 →全キャラクタと衝突判定(自分のマスクと相手のカテゴリでAND演算) 
 つまり、常に衝突判定(自分のマスクと相手のカテゴリでAND演算)あり。

 正:同じグループ番号同士の場合、必ずヒットする。それ以外は0と同等。
 →同じグループ番号の場合は必ず衝突し、異なるグループ番号の場合は衝突判定(自分のマスクと相手のカテゴリでAND演算)
 つまり、同じグループ番号以外と衝突判定(自分のマスクと相手のカテゴリでAND演算)あり。

 負:同じグループ番号同士の場合、必ずヒットしない。それ以外は0と同等。
 →同じグループ番号の場合は必ず衝突せず、異なるグループ番号の場合は衝突判定(自分のマスクと相手のカテゴリでAND演算)
 つまり、同じグループ番号以外と衝突判定(自分のマスクと相手のカテゴリでAND演算)あり。
----
・マスクビットとカテゴリビットについて
 相手のカテゴリビットと、自分のマスクビットで、AND演算を行う。
 0であればヒットしない。0以外であればヒットする。

・ビットのAND演算の具体例(2進数の場合)
①0000と1010
 0000 → 0のため、衝突せず
②1111と1010
 1010 → 0でないため、衝突する
③0001と1010
 0000 → 0のため、衝突せず
④1110と1010
 1010 → 0でないため、衝突する
⑤1010と1010
 1010 → 0でないため、衝突する
⑥0101と1010
 0000 → 0のため、衝突せず
⑦1000と1010
 1000 → 0でないため、衝突する
⑧0111と1010
 0010 → 0でないため、衝突する

 どちらかが0(ONビットなし)であれば、AND演算の結果は0となる。
 どの桁でも1が重ならない場合(どこでもONビットが一致しない場合)、AND演算の結果は0となる。
 1が重なる桁が1つでもある場合(どこかでONビットが一致する場合)、AND演算の結果は0とならない。

 0以外の同一値であれば、AND演算の結果は0以外の同一値となり、0とはならない。
 全キャラクタと衝突させたい場合、全キャラクタのマスクとカテゴリを0以外の同一値にしておけば良い。
----
・AND演算(ともに1の場合のみ1となり、それ以外は0)
 1 AND 1 → 1
 1 AND 0 → 0
 0 AND 1 → 0
 0 AND 0 → 0

 同じ値の時は同じ値を返し、異なる値の場合は0を返す。
 ともに1の時のみ1を返し、どちらかが0の時は0を返す。
----
・実際の判定
①自分の衝突判定の有無
 自分のマスクと相手のカテゴリで判定
②相手の衝突判定の有無
 相手のマスクと自分のカテゴリで判定

 自分のマスクを0にしておけば、自分の衝突判定では、衝突しない。
 自分のカテゴリを0にしておけば、相手の衝突判定では、衝突しない。
 自分のマスクもカテゴリも0にしておけば、どの衝突判定でも、衝突しない。
----
・表での管理

①
||マスク|カテゴリ|
|A|1111|1111|
|B|1111|1010|
|C|1111|0101|
|D|1111|0000|

||Aカテゴリ|Bカテゴリ|Cカテゴリ|Dカテゴリ|
||1111|1010|0101|0000|
|Aマスク:1111|1111:○|1010:○|0101:○|0000:×|
|Bマスク:1111|1111:○|1010:○|0101:○|0000:×|
|Cマスク:1111|1111:○|1010:○|0101:○|0000:×|
|Dマスク:1111|1111:○|1010:○|0101:○|0000:×|

②
||マスク|カテゴリ|
|A|1010|1111|
|B|1010|1010|
|C|1010|0101|
|D|1010|0000|

||Aカテゴリ|Bカテゴリ|Cカテゴリ|Dカテゴリ|
||1111|1010|0101|0000|
|Aマスク:1010|1010:○|1010:○|0000:×|0000:×|
|Bマスク:1010|1010:○|1010:○|0000:×|0000:×|
|Cマスク:1010|1010:○|1010:○|0000:×|0000:×|
|Dマスク:1010|1010:○|1010:○|0000:×|0000:×|

③
||マスク|カテゴリ|
|A|0101|1111|
|B|0101|1010|
|C|0101|0101|
|D|0101|0000|

||Aカテゴリ|Bカテゴリ|Cカテゴリ|Dカテゴリ|
||1111|1010|0101|0000|
|Aマスク:0101|0101:○|0000:×|0101:○|0000:×|
|Bマスク:0101|0101:○|0000:×|0101:○|0000:×|
|Cマスク:0101|0101:○|0000:×|0101:○|0000:×|
|Dマスク:0101|0101:○|0000:×|0101:○|0000:×|

④
||マスク|カテゴリ|
|A|0000|1111|
|B|0000|1010|
|C|0000|0101|
|D|0000|0000|

||Aカテゴリ|Bカテゴリ|Cカテゴリ|Dカテゴリ|
||1111|1010|0101|0000|
|Aマスク:0000|0000:×|0000:×|0000:×|0000:×|
|Bマスク:0000|0000:×|0000:×|0000:×|0000:×|
|Cマスク:0000|0000:×|0000:×|0000:×|0000:×|
|Dマスク:0000|0000:×|0000:×|0000:×|0000:×|

⑤
||マスク|カテゴリ|
|A|1010|1111|
|B|0101|1010|
|C|0101|0101|
|D|1010|0000|
|E|0000|0011|
|F|1111|1100|


||Aカテゴリ|Bカテゴリ|Cカテゴリ|Dカテゴリ|Eカテゴリ|Fカテゴリ|
||1111|1010|0101|0000|0011|1100|
|Aマスク:1010|1010:○|1010:○|0000:×|0000:×|0010:○|1000:○|
|Bマスク:0101|0101:○|0000:×|0101:○|0000:×|0001:○|0100:○|
|Cマスク:0101|0101:○|0000:×|0101:○|0000:×|0001:○|0100:○|
|Dマスク:1010|1010:○|1010:○|0000:×|0000:×|0010:○|1000:○|
|Cマスク:0101|0101:○|0000:×|0101:○|0000:×|0001:○|0100:○|
|Dマスク:1010|1010:○|1010:○|0000:×|0000:×|0010:○|1000:○|
|Eマスク:0000|0000:×|0000:×|0000:×|0000:×|0000:×|0000:×|
|Fマスク:1111|1111:○|1010:○|0101:○|0000:×|0011:○|1100:○|
----