Esempio n. 1
0
        private void Size(object o)
        {
            if (N < 2)
            {
                N = 2;
            }
            if (M < 2)
            {
                M = 2;
            }
            var i = N;

            _p  = new Cell[N, M];
            _tp = new Cell[N, M];
            while (--i >= 0)
            {
                var j = M;
                while (--j >= 0)
                {
                    _p[i, j]  = new Cell();
                    _tp[i, j] = new Cell();
                }
            }
            Adv = new ArrayDataView(_p);
            OnPropertyChanged(nameof(Adv));
            Vis   = true;
            BVis  = true;
            _shag = true;
        }
Esempio n. 2
0
 internal ArrayRowView(ArrayDataView owner, int index)
 {
     _owner = owner;
     _index = index;
 }
Esempio n. 3
0
        private void Game(object o)
        {
            var m = new int[9];
            var s = new int[9];
            var n = new bool[9];
            int i1 = EnemyP.Count, i = i1, j;

            while (--i1 >= 0)
            {
                EnemyP[i1] += Och.Next(i * 100) * 10000;
            }
            EnemyP.Sort();
            foreach (var ep in EnemyP.ToArray())
            {
                i = ep % 10000 / 100;
                j = ep % 100;
                var k = _p[i, j].ColE();
                if (k == 0)
                {
                    continue;
                }
                m[8] = _p[i, j].Prep[1] ? 0 : 3;
                if (i > 0 && j > 0 && i < N - 1 && j < M - 1)
                {
                    m[0] = Mesto(_p[i - 1, j - 1]);
                    m[1] = Mesto(_p[i - 1, j]);
                    m[2] = Mesto(_p[i - 1, j + 1]);
                    m[3] = Mesto(_p[i, j + 1]);
                    m[4] = Mesto(_p[i + 1, j + 1]);
                    m[5] = Mesto(_p[i + 1, j]);
                    m[6] = Mesto(_p[i + 1, j - 1]);
                    m[7] = Mesto(_p[i, j - 1]);
                }
                else if (i > 0 && j > 0)
                {
                    m[0] = Mesto(_p[i - 1, j - 1]);
                    m[1] = Mesto(_p[i - 1, j]);
                    m[7] = Mesto(_p[i, j - 1]);
                    m[4] = 2;
                    if (i < N - 1)
                    {
                        m[5] = Mesto(_p[i + 1, j]);
                        m[6] = Mesto(_p[i + 1, j - 1]);
                        m[2] = m[3] = 2;
                    }
                    else if (j < M - 1)
                    {
                        m[2] = Mesto(_p[i - 1, j + 1]);
                        m[3] = Mesto(_p[i, j + 1]);
                        m[5] = m[6] = 2;
                    }
                    else
                    {
                        m[2] = m[3] = m[5] = m[6] = 2;
                    }
                }
                else if (i < N - 1 && j < M - 1)
                {
                    m[3] = Mesto(_p[i, j + 1]);
                    m[4] = Mesto(_p[i + 1, j + 1]);
                    m[5] = Mesto(_p[i + 1, j]);
                    m[0] = 2;
                    if (i > 0)
                    {
                        m[1] = Mesto(_p[i - 1, j]);
                        m[2] = Mesto(_p[i - 1, j + 1]);
                        m[6] = m[7] = 2;
                    }
                    else if (j > 0)
                    {
                        m[6] = Mesto(_p[i + 1, j - 1]);
                        m[7] = Mesto(_p[i, j - 1]);
                        m[1] = m[2] = 2;
                    }
                    else
                    {
                        m[1] = m[2] = m[6] = m[7] = 2;
                    }
                }
                else if (i > 0 && j < M - 1)
                {
                    m[1] = Mesto(_p[i - 1, j]);
                    m[2] = Mesto(_p[i - 1, j + 1]);
                    m[3] = Mesto(_p[i, j + 1]);
                    m[0] = m[4] = m[5] = m[6] = m[7] = 2;
                }
                else
                {
                    m[5] = Mesto(_p[i + 1, j]);
                    m[6] = Mesto(_p[i + 1, j - 1]);
                    m[7] = Mesto(_p[i, j - 1]);
                    m[0] = m[1] = m[2] = m[3] = m[4] = 2;
                }
                while (k-- > 0)
                {
                    var   h = 9;
                    short ch;
                    i1 = 9;
                    while (--i1 >= 0)
                    {
                        n[i1] = true; s[i1] = 0;
                    }
                    var e = _p[i, j].EnemyN(k);
                    int f;
                    if (e[0] == 2)
                    {
                        i1 = 8;
                        while (--i1 >= 0)
                        {
                            f = m[i1] % 80;
                            if (f > 8 && f < 24)
                            {
                                if (s[i1] < 3)
                                {
                                    s[i1] = 3;
                                }
                                f = i1 == 0 ? 7 : i1 - 1;
                                if (s[f] < 2 && m[f] % 10 != 0)
                                {
                                    s[f] = 2;
                                }
                                f = i1 == 7 ? 0 : i1 + 1;
                                if (s[f] < 2 && m[f] % 10 != 0)
                                {
                                    s[f] = 2;
                                }
                                switch (i1)
                                {
                                case 0:
                                case 4:
                                    if (s[2] == 0 && m[2] % 10 != 0)
                                    {
                                        s[2] = 1;
                                    }
                                    if (s[6] == 0 && m[6] % 10 != 0)
                                    {
                                        s[6] = 1;
                                    }
                                    break;

                                case 2:
                                case 6:
                                    if (s[0] == 0 && m[0] % 10 != 0)
                                    {
                                        s[0] = 1;
                                    }
                                    if (s[4] == 0 && m[4] % 10 != 0)
                                    {
                                        s[4] = 1;
                                    }
                                    break;
                                }
                            }
                            else if (f > 28)
                            {
                                s[i1] = 5;
                                f     = i1 == 0 ? 7 : i1 - 1;
                                if (s[f] < 4 && m[f] % 10 != 0)
                                {
                                    s[f] = 4;
                                }
                                f = i1 == 7 ? 0 : i1 + 1;
                                if (s[f] < 4 && m[f] % 10 != 0)
                                {
                                    s[f] = 4;
                                }
                                if (s[8] < 4 && m[8] != 0)
                                {
                                    s[8] = 4;
                                }
                                switch (i1)
                                {
                                case 1:
                                case 5:
                                    if (s[3] < 4 && m[3] % 10 != 0)
                                    {
                                        s[3] = 4;
                                    }
                                    if (s[7] < 4 && m[7] % 10 != 0)
                                    {
                                        s[7] = 4;
                                    }
                                    break;

                                case 3:
                                case 7:
                                    if (s[1] < 4 && m[1] % 10 != 0)
                                    {
                                        s[1] = 4;
                                    }
                                    if (s[5] < 4 && m[5] % 10 != 0)
                                    {
                                        s[5] = 4;
                                    }
                                    break;
                                }
                            }
                            else if (m[i1] % 10 == 1 || m[i1] == 2)
                            {
                                s[i1] = 5;
                            }
                        }
                        ch = -1;
                        do
                        {
                            f = 0;
                            if (ch++ == 4)
                            {
                                break;
                            }
                            i1 = 9;
                            while (--i1 >= 0)
                            {
                                if (s[i1] > ch)
                                {
                                    f++;
                                }
                            }
                        } while (h - f == 0);
                        if (ch == 5)
                        {
                            continue;
                        }
                        h -= f;
                        i1 = 9;
                        while (--i1 >= 0)
                        {
                            if (s[i1] > ch)
                            {
                                n[i1] = false;
                            }
                        }
                    }
                    else
                    {
                        i1 = 8;
                        while (--i1 >= 0)
                        {
                            if (m[i1] >= 160)
                            {
                                s[i1] = 6;
                            }
                            else if (m[i1] >= 80)
                            {
                                s[i1] = 5;
                            }
                            else if (m[i1] > 64)
                            {
                                s[i1] = 4;
                            }
                            else if (m[i1] > 56)
                            {
                                s[i1] = 3;
                            }
                            else if (m[i1] > 48)
                            {
                                s[i1] = 2;
                            }
                            else if (m[i1] > 16 && m[i1] < 36)
                            {
                                s[i1] = 1;
                            }
                            else if (m[i1] % 10 == 0 || m[i1] == 2)
                            {
                                n[i1] = false; h--;
                            }
                        }
                        ch = 7;
                        do
                        {
                            f = 0;
                            if (ch-- == 1)
                            {
                                break;
                            }
                            i1 = 8;
                            while (--i1 >= 0)
                            {
                                if (s[i1] == ch)
                                {
                                    f++;
                                }
                            }
                        } while (f == 0);
                        if (ch != 0 && (e[0] == 1 || ch > 4))
                        {
                            i1 = 8;
                            h  = f;
                            while (--i1 >= 0)
                            {
                                if (s[i1] < ch)
                                {
                                    n[i1] = false;
                                }
                            }
                        }
                    }
                    h = Och.Next(h * 100) / 100;
                    while (true)
                    {
                        if (n[++i1])
                        {
                            if (h-- == 0)
                            {
                                h = i1; break;
                            }
                        }
                    }
                    if (h == 8)
                    {
                        _p[i, j].Wait(e[1]); continue;
                    }
                    int ia = i, ja = j;
                    switch (h)
                    {
                    case 0: { ia--; ja--; break; }

                    case 1: { ia--; break; }

                    case 2: { ia--; ja++; break; }

                    case 3: { ja++; break; }

                    case 4: { ia++; ja++; break; }

                    case 5: { ia++; break; }

                    case 6: { ia++; ja--; break; }

                    case 7: { ja--; break; }
                    }
                    _p[ia, ja].Add(e[0], e[1]);
                    _p[i, j].Delete(e[0]);
                }
            }
            Col[0] = 0;
            Col[1] = 0;
            Col[2] = 0;
            foreach (var ep in EnemyP.ToArray())
            {
                i = ep % 10000 / 100;
                j = ep % 100;
                _p[i, j].Time();
                if (_p[i, j].ColE() == 0)
                {
                    EnemyP.Remove(ep); continue;
                }
                Col[0] += _p[i, j].Enemy[0];
                Col[1] += _p[i, j].Enemy[1];
                Col[2] += _p[i, j].Enemy[2];
            }
            i1 = EnemyP.Count;
            while (--i1 >= 0)
            {
                EnemyP[i1] %= 10000;
            }
            i = N;
            while (--i >= 0)
            {
                j = M;
                while (--j >= 0)
                {
                    if (_p[i, j].TimeColE() != 0)
                    {
                        _p[i, j].Time();
                        _p[i, j].TimeP3();
                        if (_p[i, j].ColE() == 0)
                        {
                            continue;
                        }
                        Col[0] += _p[i, j].Enemy[0];
                        Col[1] += _p[i, j].Enemy[1];
                        Col[2] += _p[i, j].Enemy[2];
                        EnemyP.Add(i * 100 + j);
                    }
                    else
                    {
                        _p[i, j].TimeP3();
                    }
                }
            }
            Adv = new ArrayDataView(_p);
            OnPropertyChanged(nameof(Adv));
            OnPropertyChanged(nameof(Button));
            if (EnemyP.Count != 0)
            {
                return;
            }
            BVis = true;
            Iter.Change(-1, 0);
        }