マイミクにサンプルを見せようと思ったけど、mixiのメッセージにファイルが添付できないのでココにはっつけておく。
どっかのサービスで、コードをはっつけると色を付けてくれて、urlで参照できるようにしてくれるのがあったんだけど、どこだったか忘れちゃった。
namespace Othello { class Board { public enum State { None, Black, White }; private ColorBoard black = new ColorBoard(); private ColorBoard white = new ColorBoard(); public State this[int x, int y] { get { if (black[x,y]) return State.Black; if (white[x,y]) return State.White; return State.None; } set { if (value == State.Black) { black[x,y] = true; white[x,y] = false; } if (value == State.White) { black[x,y] = false; white[x,y] = true; } } } public int Count(State s) { if (s == State.Black) return black.num; if (s == State.White) return white.num; return 64 - black.num - white.num; } //1色だけの状態を表す. private struct ColorBoard { public ulong state; public int num; bool this[int x, int y] { get { ulong pos = (ulong)1 << (y * 8 + x); return (state & pos) != 0; } set { ulong pos = (ulong)1 << (y * 8 + x); if (value && !this[x, y]) { state |= pos; count++; } if (!value && this[x, y]) { state &= ~pos; count--; } } } int Count { get { return count; } } private int count; } } class Rule { public static Board NewBoard() { Board b = new Board(); b[3, 3] = Board.State.Black; b[4, 4] = Board.State.Black; b[3, 4] = Board.State.White; b[4, 3] = Board.State.White; return b; } //...その他オセロのルールはココに書いていく... } }