Board.Board.place C# (CSharp) Method

place() public method

public place ( int original_stone, bool front, int angle, int x, int y ) : bool
original_stone int
front bool
angle int
x int
y int
return bool
        public bool place(int[] original_stone, bool front, int angle, int x, int y)
        {
            int[] stone = new int[64];

            // 表裏
            for (int i = 0; i < 8; i++) // y
            {
                for (int j = 0; j < 8; j++) // x
                {
                    int src = i * 8 + j;
                    int dst = i * 8 + (front ? j : (7 - j));
                    stone[dst] = original_stone[src];
                }
            }

            // 回転
            if (!((0 <= angle) && (angle <= 270)) || angle % 90 != 0)
                return false;

            for (int i = 0; i < angle / 90; i++)
            {
                int[] tmp = new int[64];
                Array.Copy(stone, tmp, 64);

                for (int j = 0; j < 8; j++)
                {
                    for (int k = 0; k < 8; k++)
                    {
                        int src = j * 8 + k;
                        int dst = k * 8 + (7 - j);
                        tmp[dst] = stone[src];
                    }
                }

                Array.Copy(tmp, stone, 64);
            }

            // 配置
            this.maxid++;
            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    int src = i * 8 + j;
                    if (stone[src] == 0)
                        continue;

                    int x1 = x + j;
                    int y1 = y + i;

                    if (!(0 <= x1 && x1 < 32))
                        return false;
                    if (!(0 <= y1 && y1 < 32))
                        return false;

                    int dst = y1 * 32 + x1;

                    if (this.nowmap[dst] != 0)
                        return false;

                    this.nowmap[dst] = this.maxid;
                }
            }

            // 本当に受理できるか
            return this.isAccept();
        }