私はC#でGomokuの実装を行っていますが、プロジェクトの最初の課題はボードの状態を知的に表現することです。C#のビットフィールドの追加を実行する
この目標を達成するために、私は、組み合わせの値を表すためのビットフィールドに回すことにしました:、
[Flags]
public enum CombinationValue : byte
{
OnePawn = 1,
TwoPawns = 2,
ThreePawn = 4,
FourPawn = 8,
FivePawns = 16
}
私がつまずいた問題を、私は組み合わせをインクリメントしたい場合ということです私は前のビットを解除し、新しいものを設定したい。これは、基本的に左へのバイナリシフトであり、enumでは許されない。 たとえば、2つのポーンの組み合わせがあり、ポーンがその隣に置かれているので、列挙の値は "TwoPawns"ではなく "ThreePawn"になる必要があります。
基本的に、私がしたいのはTwoPawns + OnePawn == ThreePawnsです。
この動作を実装する最も効率的な方法は何でしょうか?
CombinationValue result = CombinationValue.OnePawn | CombinationValue.TwoPawns;
をしかし、あなたは、その後3としてThreePawnを持っている必要があります。
列挙型を整数にキャストして、任意の数式を実行できます。 – jdweng
'ThreePawn'が' 4'ではなく '3'ならば、期待通りに動作しませんか?また、ビットシフトしたい場合は、基底の型にキャストします。この場合は 'byte'です。 – CodeCaster
だから 'TwoPawns + ThreePawn = FivePawns'?私はあなたが2 + 6から16または8を得る方法を見ていません – Slai