Esempio n. 1
0
        public override void Apply(State state, int y, int x)
        {
            bool enemyExist = false;
            for (int i = 0; i < 4; i++)
            {
                int ny = y + dy[i];
                int nx = x + dx[i];
                if (isOutOfRange(ny, nx)) continue;
                if (state.StagePlayer[ny, nx] != state.NextPlayer * -1) continue;

                enemyExist = true;
                int mypower = state.GetPower(y, x, i);
                int enpower = state.GetPower(ny, nx, (i + 2) % 4);
                if (mypower > enpower)
                {
                    state.FlipCard(ny, nx);
                }
            }
            if (enemyExist == false) return;
            bool applyPlus = false;
            int[] sum = new int[21];
            for (int i = 0; i < 4; i++)
            {
                int ny = y + dy[i];
                int nx = x + dx[i];
                if (isOutOfRange(ny, nx)) continue;
                if (state.StagePlayer[ny, nx] == 0) continue;
                int mypower = state.GetPower(y, x, i);
                int enpower = state.GetPower(ny, nx, (i + 2) % 4);
            #if DEBUG
                if (mypower + enpower < 2) throw new Exception("mypower + enpower < 2");
                if (mypower + enpower > 20) throw new Exception("mypower + enpower > 20");
            #endif
                sum[mypower + enpower]++;
            }
            for (int i = 0; i <= 20; i++)
            {
                if (sum[i] >= 2) applyPlus = true;
            }
            if (applyPlus == false) return;
            for (int i = 0; i < 4; i++)
            {
                int ny = y + dy[i];
                int nx = x + dx[i];
                if (isOutOfRange(ny, nx)) continue;
                if (state.StagePlayer[ny, nx] == 0) continue;
                int mypower = state.GetPower(y, x, i);
                int enpower = state.GetPower(ny, nx, (i + 2) % 4);
            #if DEBUG
                if (mypower + enpower > 20) throw new Exception("mypower + enpower > 20");
            #endif
                if (sum[mypower + enpower] < 2) continue;
                if (state.StagePlayer[ny, nx] == state.NextPlayer * -1)
                {
                    state.FlipCard(ny, nx);
                }
                for (int j = 0; j < 4; j++)
                {
                    int my = ny + dy[i];
                    int mx = nx + dx[i];
                    if (isOutOfRange(my, mx)) continue;
                    if (state.StagePlayer[my, mx] != state.NextPlayer * -1) continue;
                    int mypower2 = state.GetPower(ny, nx, j);
                    int enpower2 = state.GetPower(my, mx, (j + 2) % 4);
                    if (mypower2 > enpower2)
                    {
                        state.FlipCard(my, mx);
                    }
                }
            }
        }